mutt-1.5.21/0000755000175000017500000000000011444176761007605 500000000000000mutt-1.5.21/intl/0000755000175000017500000000000011444176761010553 500000000000000mutt-1.5.21/intl/Makefile.in0000644000175000017500000002337210770271235012540 00000000000000# Makefile for directory with message catalog handling in GNU NLS Utilities. # Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = @libdir@ includedir = @includedir@ datadir = @datadir@ datarootdir = @datarootdir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/intl aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` l = @INTL_LIBTOOL_SUFFIX_PREFIX@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ -DLIBDIR=\"$(libdir)\" @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h COMHDRS = gettext.h gettextP.h hash-string.h SOURCES = $(COMSRCS) intl-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ localcharset.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ plural.$lo localcharset.$lo GETTOBJS = intl-compat.$lo DISTFILES.common = Makefile.in \ config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) DISTFILES.generated = plural.c DISTFILES.normal = VERSION DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c # Libtool's library version information for libintl. # Before making a gettext release, the gettext maintainer must change this # according to the libtool documentation, section "Library interface versions". # Maintainers of other packages that include the intl directory must *not* # change these values. LTV_CURRENT=1 LTV_REVISION=1 LTV_AGE=0 .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed .c.o: $(COMPILE) $< .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< .y.c: $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h .sin.sed: sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ mv t-$@ $@ INCLUDES = -I.. -I. -I$(top_srcdir)/intl all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed all-no: all-no-@BUILD_INCLUDED_LIBINTL@ all-no-yes: libgnuintl.$la all-no-no: libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la libgnuintl.la: $(OBJECTS) $(LIBTOOL) --mode=link \ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ $(OBJECTS) @LIBICONV@ \ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ -rpath $(libdir) \ -no-undefined libintl.h: libgnuintl.h cp $(srcdir)/libgnuintl.h libintl.h charset.alias: config.charset $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ mv t-$@ $@ check: all # This installation goal is only used in GNU gettext. Packages which # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a # system which has the GNU gettext() function in its C library or in a # separate library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkinstalldirs) $(DESTDIR)$(libdir); \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ orig=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ if test @GLIBC21@ = no; then \ orig=charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ fi; \ fi; \ $(mkinstalldirs) $(DESTDIR)$(localedir); \ test -f $(DESTDIR)$(localedir)/locale.alias \ && orig=$(DESTDIR)$(localedir)/locale.alias \ || orig=$(srcdir)/locale.alias; \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ dists="$(DISTFILES.generated)"; \ for file in $$dists; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ $(INSTALL_DATA) $$dir/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ dists="$(DISTFILES.obsolete)"; \ for file in $$dists; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ rm -f $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ if test -f $(DESTDIR)$(localedir)/locale.alias; then \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext"; then \ for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi info dvi: $(OBJECTS): ../config.h libgnuintl.h bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.la *.o *.lo core core.* rm -f libintl.h charset.alias ref-add.sed ref-del.sed rm -f -r .libs _libs clean: mostlyclean distclean: clean rm -f Makefile ID TAGS if test "$(PACKAGE)" = gettext; then \ rm -f ChangeLog.inst $(DISTFILES.normal); \ else \ : ; \ fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ ln $$dir/$$file $(distdir) 2> /dev/null \ || cp -p $$dir/$$file $(distdir); \ done Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mutt-1.5.21/intl/ChangeLog0000644000175000017500000000011010770271152012224 000000000000002001-09-13 GNU * Version 0.10.40 released. mutt-1.5.21/intl/config.charset0000644000175000017500000003202210770271152013301 00000000000000#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name used by which systems a MIME name? # ASCII, ANSI_X3.4-1968 glibc solaris freebsd # ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-3 glibc yes # ISO-8859-4 osf solaris freebsd yes # ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes # ISO-8859-6 glibc aix hpux solaris yes # ISO-8859-7 glibc aix hpux irix osf solaris yes # ISO-8859-8 glibc aix hpux osf solaris yes # ISO-8859-9 glibc aix hpux irix osf solaris yes # ISO-8859-13 glibc # ISO-8859-15 glibc aix osf solaris freebsd # KOI8-R glibc solaris freebsd yes # KOI8-U glibc freebsd yes # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd dos # CP869 dos # CP874 win32 dos # CP922 aix # CP932 aix win32 dos # CP943 aix # CP949 osf win32 dos # CP950 win32 dos # CP1046 aix # CP1124 aix # CP1129 aix # CP1250 win32 # CP1251 glibc win32 # CP1252 aix win32 # CP1253 win32 # CP1254 win32 # CP1255 win32 # CP1256 win32 # CP1257 win32 # GB2312 glibc aix hpux irix solaris freebsd yes # EUC-JP glibc aix hpux irix osf solaris freebsd yes # EUC-KR glibc aix hpux irix osf solaris freebsd yes # EUC-TW glibc aix hpux irix osf solaris # BIG5 glibc aix hpux osf solaris freebsd yes # BIG5-HKSCS glibc # GBK aix osf win32 dos # GB18030 glibc # SHIFT_JIS hpux osf solaris freebsd yes # JOHAB glibc win32 # TIS-620 glibc aix hpux osf solaris # VISCII glibc yes # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 glibc aix hpux osf solaris yes # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "BIG5 BIG5" echo "gb2312 GB2312" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; beos*) # BeOS has a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru KOI8-R" # not CP866 ?? echo "ru_RU KOI8-R" # not CP866 ?? # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac mutt-1.5.21/intl/locale.alias0000644000175000017500000000514610770271152012742 00000000000000# Locale name alias data base. # Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # The format of this file is the same as for the corresponding file of # the X Window System, which normally can be found in # /usr/lib/X11/locale/locale.alias # A single line contains two fields: an alias and a substitution value. # All entries are case independent. # Note: This file is far from being complete. If you have a value for # your own site which you think might be useful for others too, share # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. # Packages using this file: bokmal no_NO.ISO-8859-1 bokmċl no_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 dansk da_DK.ISO-8859-1 deutsch de_DE.ISO-8859-1 dutch nl_NL.ISO-8859-1 eesti et_EE.ISO-8859-1 estonian et_EE.ISO-8859-1 finnish fi_FI.ISO-8859-1 français fr_FR.ISO-8859-1 french fr_FR.ISO-8859-1 galego gl_ES.ISO-8859-1 galician gl_ES.ISO-8859-1 german de_DE.ISO-8859-1 greek el_GR.ISO-8859-7 hebrew he_IL.ISO-8859-8 hrvatski hr_HR.ISO-8859-2 hungarian hu_HU.ISO-8859-2 icelandic is_IS.ISO-8859-1 italian it_IT.ISO-8859-1 japanese ja_JP.eucJP japanese.euc ja_JP.eucJP ja_JP ja_JP.eucJP ja_JP.ujis ja_JP.eucJP japanese.sjis ja_JP.SJIS korean ko_KR.eucKR korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 nb_NO no_NO.ISO-8859-1 nb_NO.ISO-8859-1 no_NO.ISO-8859-1 norwegian no_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 portuguese pt_PT.ISO-8859-1 romanian ro_RO.ISO-8859-2 russian ru_RU.ISO-8859-5 slovak sk_SK.ISO-8859-2 slovene sl_SI.ISO-8859-2 slovenian sl_SI.ISO-8859-2 spanish es_ES.ISO-8859-1 swedish sv_SE.ISO-8859-1 thai th_TH.TIS-620 turkish tr_TR.ISO-8859-9 mutt-1.5.21/intl/ref-add.sin0000644000175000017500000000210610770271152012476 00000000000000# Add this package to a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } mutt-1.5.21/intl/ref-del.sin0000644000175000017500000000203110770271152012507 00000000000000# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } mutt-1.5.21/intl/gettext.h0000644000175000017500000000604510770271152012324 00000000000000/* Description of GNU message catalog format: general file layout. Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #if HAVE_LIMITS_H || _LIBC # include #endif /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translation strings. */ nls_uint32 trans_tab_offset; /* Size of hashing table. */ nls_uint32 hash_tab_size; /* Offset of first hashing entry. */ nls_uint32 hash_tab_offset; }; struct string_desc { /* Length of addressed string. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* @@ begin of epilog @@ */ #endif /* gettext.h */ mutt-1.5.21/intl/gettextP.h0000644000175000017500000001701310770271152012441 00000000000000/* Header describing internals of libintl library. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include /* Get size_t. */ #ifdef _LIBC # include "../iconv/gconv_int.h" #else # if HAVE_ICONV # include # endif #endif #include "loadinfo.h" #include "gettext.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 SWAP (i) nls_uint32 i; { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ enum operator { /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ /* Unary operators: */ lnot, /* Logical NOT. */ /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Module operation. */ plus, /* Addition. */ minus, /* Subtraction. */ less_than, /* Comparison. */ greater_than, /* Comparison. */ less_or_equal, /* Comparison. */ greater_or_equal, /* Comparison. */ equal, /* Comparision for equality. */ not_equal, /* Comparision for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ /* Ternary operators: */ qmop /* Question mark operator. */ } operation; union { unsigned long int num; /* Number value for `num'. */ struct expression *args[3]; /* Up to three arguments. */ } val; }; /* This is the data structure to pass information to the parser and get the result in a thread-safe way. */ struct parse_args { const char *cp; struct expression *res; }; /* The representation of an opened message catalog. */ struct loaded_domain { const char *data; int use_mmap; size_t mmap_size; int must_swap; nls_uint32 nstrings; struct string_desc *orig_tab; struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; int codeset_cntr; #ifdef _LIBC __gconv_t conv; #else # if HAVE_ICONV iconv_t conv; # endif #endif char **conv_tab; struct expression *plural; unsigned long int nplurals; }; /* We want to allocate a string at the end of the struct. But ISO C doesn't allow zero sized arrays. */ #ifdef __GNUC__ # define ZERO 0 #else # define ZERO 1 #endif /* A set of settings bound to a message domain. Used to store settings from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; int codeset_cntr; /* Incremented each time codeset changes. */ char *codeset; char domainname[ZERO]; }; /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ extern int _nl_msg_cat_cntr; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding)) internal_function; void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, struct binding *__domainbinding)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, struct loaded_domain *__domain, struct binding *__domainbinding)) internal_function; void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) internal_function; char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, size_t *lengthp)) internal_function; #ifdef _LIBC extern char *__gettext PARAMS ((const char *__msgid)); extern char *__dgettext PARAMS ((const char *__domainname, const char *__msgid)); extern char *__dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *__dngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int n)); extern char *__dcngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)); extern char *__dcigettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category)); extern char *__textdomain PARAMS ((const char *__domainname)); extern char *__bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, const char *__codeset)); #else extern char *gettext__ PARAMS ((const char *__msgid)); extern char *dgettext__ PARAMS ((const char *__domainname, const char *__msgid)); extern char *dcgettext__ PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *dngettext__ PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n)); extern char *dcngettext__ PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)); extern char *dcigettext__ PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category)); extern char *textdomain__ PARAMS ((const char *__domainname)); extern char *bindtextdomain__ PARAMS ((const char *__domainname, const char *__dirname)); extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, const char *__codeset)); #endif #ifdef _LIBC extern void __gettext_free_exp PARAMS ((struct expression *exp)) internal_function; extern int __gettextparse PARAMS ((void *arg)); #else extern void gettext_free_exp__ PARAMS ((struct expression *exp)) internal_function; extern int gettextparse__ PARAMS ((void *arg)); #endif /* @@ begin of epilog @@ */ #endif /* gettextP.h */ mutt-1.5.21/intl/hash-string.h0000644000175000017500000000346010770271152013065 00000000000000/* Description of GNU message catalog format: string hashing function. Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(Args) Args # else # define PARAMS(Args) () # endif #endif /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static unsigned long int hash_string PARAMS ((const char *__str_param)); static inline unsigned long int hash_string (str_param) const char *str_param; { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned long int) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } mutt-1.5.21/intl/libgnuintl.h0000644000175000017500000001046210770271152013005 00000000000000/* Message catalogs for internationalization. Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include /* The LC_MESSAGES locale category is the category used by the functions gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. On systems that don't define it, use an arbitrary value instead. On Solaris, defines __LOCALE_H then includes (i.e. this file!) and then only defines LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES in this case. */ #if !defined LC_MESSAGES && !defined __LOCALE_H # define LC_MESSAGES 1729 #endif /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 /* Resolve a platform specific conflict on DJGPP. GNU gettext takes precedence over _conio_gettext. */ #ifdef __DJGPP__ # undef gettext # define gettext gettext #endif #ifndef PARAMS # if __STDC__ || defined __cplusplus # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifdef __cplusplus extern "C" { #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ extern char *gettext PARAMS ((const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); /* Similar to `gettext' but select the plural form corresponding to the number N. */ extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)); /* Similar to `dgettext' but select the plural form corresponding to the number N. */ extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n)); /* Similar to `dcgettext' but select the plural form corresponding to the number N. */ extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category)); /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ extern char *textdomain PARAMS ((const char *__domainname)); /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ extern char *bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ extern char *bind_textdomain_codeset PARAMS ((const char *__domainname, const char *__codeset)); /* Optimized version of the functions above. */ #if defined __OPTIMIZED /* These are macros, but could also be inline functions. */ # define gettext(msgid) \ dgettext (NULL, msgid) # define dgettext(domainname, msgid) \ dcgettext (domainname, msgid, LC_MESSAGES) # define ngettext(msgid1, msgid2, n) \ dngettext (NULL, msgid1, msgid2, n) # define dngettext(domainname, msgid1, msgid2, n) \ dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) #endif /* Optimizing. */ #ifdef __cplusplus } #endif #endif /* libintl.h */ mutt-1.5.21/intl/libgettext.h0000644000175000017500000000362110770271152013010 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include #else # define gettext(Msgid) (Msgid) # define dgettext(Domainname, Msgid) (Msgid) # define dcgettext(Domainname, Msgid, Category) (Msgid) # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) # define textdomain(Domainname) ((char *) (Domainname)) # define bindtextdomain(Domainname, Dirname) ((char *) (Dirname)) # define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset)) #endif /* For automatical extraction of messages sometimes no real translation is needed. Instead the string itself is the result. */ #define gettext_noop(Str) (Str) #endif /* _LIBGETTEXT_H */ mutt-1.5.21/intl/loadinfo.h0000644000175000017500000000647110770271152012436 00000000000000/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif /* Separator in PATH like lists of pathnames. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 #define CEN_SPECIAL 4 #define XPG_NORM_CODESET 8 #define XPG_CODESET 16 #define TERRITORY 32 #define CEN_AUDIENCE 64 #define XPG_MODIFIER 128 #define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) #define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, size_t name_len)); extern struct loaded_l10nfile * _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate)); extern const char *_nl_expand_alias PARAMS ((const char *name)); /* normalized_codeset is dynamically allocated and has to be freed by the caller. */ extern int _nl_explode_name PARAMS ((char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision)); extern char *_nl_find_language PARAMS ((const char *name)); #endif /* loadinfo.h */ mutt-1.5.21/intl/bindtextdom.c0000644000175000017500000002317510770271152013157 00000000000000/* Implementation of the bindtextdomain(3) function Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_dirname _nl_default_dirname__ # define _nl_domain_bindings _nl_domain_bindings__ #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock) /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN bindtextdomain__ # define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__ #endif /* Prototypes for local functions. */ static void set_binding_values PARAMS ((const char *domainname, const char **dirnamep, const char **codesetp)); /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not modified, only the current value is returned. If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither modified nor returned. */ static void set_binding_values (domainname, dirnamep, codesetp) const char *domainname; const char **dirnamep; const char **codesetp; { struct binding *binding; int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') { if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; return; } __libc_rwlock_wrlock (_nl_state_lock); modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding != NULL) { if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The current binding has be to returned. */ *dirnamep = binding->dirname; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; if (strcmp (dirname, result) != 0) { if (strcmp (dirname, _nl_default_dirname) == 0) result = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, dirname, len); #endif } if (__builtin_expect (result != NULL, 1)) { if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = result; modified = 1; } } *dirnamep = result; } } if (codesetp) { const char *codeset = *codesetp; if (codeset == NULL) /* The current binding has be to returned. */ *codesetp = binding->codeset; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, codeset, len); #endif if (__builtin_expect (result != NULL, 1)) { if (binding->codeset != NULL) free (binding->codeset); binding->codeset = result; binding->codeset_cntr++; modified = 1; } } *codesetp = result; } } } else if ((dirnamep == NULL || *dirnamep == NULL) && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) *dirnamep = _nl_default_dirname; if (codesetp) *codesetp = NULL; } else { /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; memcpy (new_binding->domainname, domainname, len); if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The default value. */ dirname = _nl_default_dirname; else { if (strcmp (dirname, _nl_default_dirname) == 0) dirname = _nl_default_dirname; else { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; memcpy (result, dirname, len); #endif dirname = result; } } *dirnamep = dirname; new_binding->dirname = (char *) dirname; } else /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; new_binding->codeset_cntr = 0; if (codesetp) { const char *codeset = *codesetp; if (codeset != NULL) { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; memcpy (result, codeset, len); #endif codeset = result; new_binding->codeset_cntr++; } *codesetp = codeset; new_binding->codeset = (char *) codeset; } else new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } modified = 1; /* Here we deal with memory allocation failures. */ if (0) { failed_codeset: if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; } } /* If we modified any binding, we flush the caches. */ if (modified) ++_nl_msg_cat_cntr; __libc_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (domainname, dirname) const char *domainname; const char *dirname; { set_binding_values (domainname, &dirname, NULL); return (char *) dirname; } /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * BIND_TEXTDOMAIN_CODESET (domainname, codeset) const char *domainname; const char *codeset; { set_binding_values (domainname, NULL, &codeset); return (char *) codeset; } #ifdef _LIBC /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif mutt-1.5.21/intl/dcgettext.c0000644000175000017500000000343710770271152012630 00000000000000/* Implementation of the dcgettext(3) function. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext # define DCIGETTEXT __dcigettext #else # define DCGETTEXT dcgettext__ # define DCIGETTEXT dcigettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcgettext, dcgettext); #endif mutt-1.5.21/intl/dgettext.c0000644000175000017500000000340310770271152012456 00000000000000/* Implementation of the dgettext(3) function. Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT __dcgettext #else # define DGETTEXT dgettext__ # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (domainname, msgid) const char *domainname; const char *msgid; { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif mutt-1.5.21/intl/gettext.c0000644000175000017500000000354610770271152012322 00000000000000/* Implementation of gettext(3) function. Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DCGETTEXT __dcgettext #else # define GETTEXT gettext__ # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (msgid) const char *msgid; { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif mutt-1.5.21/intl/finddomain.c0000644000175000017500000001315310770271152012741 00000000000000/* Handle list of needed message catalogs Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (dirname, locale, domainname, domainbinding) const char *dirname; char *locale; const char *domainname; struct binding *domainbinding; { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *special; const char *sponsor; const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory[.codeset]][@modifier] and six parts for the CEN syntax: language[_territory][+audience][+special][,[sponsor][_revision]] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) revision (2) sponsor (3) special (4) codeset (5) normalized codeset (6) territory (7) audience/modifier */ /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset, &special, &sponsor, &revision); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); return retval; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free ((char *) here->filename); free (here); } } text_set_element (__libc_subfreeres, free_mem); #endif mutt-1.5.21/intl/loadmsgcat.c0000644000175000017500000003520610770271152012752 00000000000000/* Load needed message catalogs. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #ifdef _LIBC # include # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #endif #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include "../locale/localeinfo.h" #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open __open # define close __close # define read __read # define mmap __mmap # define munmap __munmap #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define PLURAL_PARSE __gettextparse #else # define PLURAL_PARSE gettextparse__ #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in . */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif /* On reasonable systems, binary I/O is the default. */ #ifndef O_BINARY # define O_BINARY 0 #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr; #if (defined __GNUC__ && !defined __APPLE_CC__) \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ static const struct expression plvar = { .nargs = 0, .operation = var, }; static const struct expression plone = { .nargs = 0, .operation = num, .val = { .num = 1 } }; static struct expression germanic_plural = { .nargs = 2, .operation = not_equal, .val = { .args = { [0] = (struct expression *) &plvar, [1] = (struct expression *) &plone } } }; # define INIT_GERMANIC_PLURAL() #else /* For compilers without support for ISO C 99 struct/union initializers: Initialization at run-time. */ static struct expression plvar; static struct expression plone; static struct expression germanic_plural; static void init_germanic_plural () { if (plone.val.num == 0) { plvar.nargs = 0; plvar.operation = var; plone.nargs = 0; plone.operation = num; plone.val.num = 1; germanic_plural.nargs = 2; germanic_plural.operation = not_equal; germanic_plural.val.args[0] = &plvar; germanic_plural.val.args[1] = &plone; } } # define INIT_GERMANIC_PLURAL() init_germanic_plural () #endif /* Initialize the codeset dependent parts of an opened message catalog. Return the header entry. */ const char * internal_function _nl_init_domain_conv (domain_file, domain, domainbinding) struct loaded_l10nfile *domain_file; struct loaded_domain *domain; struct binding *domainbinding; { /* Find out about the character set the file is encoded with. This can be found (in textual form) in the entry "". If this entry does not exist or if this does not contain the `charset=' information, we will assume the charset matches the one the current locale and we don't have to perform any conversion. */ char *nullentry; size_t nullentrylen; /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ domain->codeset_cntr = (domainbinding != NULL ? domainbinding->codeset_cntr : 0); #ifdef _LIBC domain->conv = (__gconv_t) -1; #else # if HAVE_ICONV domain->conv = (iconv_t) -1; # endif #endif domain->conv_tab = NULL; /* Get the header entry. */ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); if (nullentry != NULL) { #if defined _LIBC || HAVE_ICONV const char *charsetstr; charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; char *charset; const char *outcharset; charsetstr += strlen ("charset="); len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); # if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; # else memcpy (charset, charsetstr, len); charset[len] = '\0'; # endif /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly set up, so we provide a possibility for the user to override this. Moreover, the value specified through bind_textdomain_codeset overrides both. */ if (domainbinding != NULL && domainbinding->codeset != NULL) outcharset = domainbinding->codeset; else { outcharset = getenv ("OUTPUT_CHARSET"); if (outcharset == NULL || outcharset[0] == '\0') { # ifdef _LIBC outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; # else # if HAVE_ICONV extern const char *locale_charset (void); outcharset = locale_charset (); # endif # endif } } # ifdef _LIBC /* We always want to use transliteration. */ outcharset = norm_add_slashes (outcharset, "TRANSLIT"); charset = norm_add_slashes (charset, NULL); if (__gconv_open (outcharset, charset, &domain->conv, GCONV_AVOID_NOCONV) != __GCONV_OK) domain->conv = (__gconv_t) -1; # else # if HAVE_ICONV /* When using GNU libiconv, we want to use transliteration. */ # if _LIBICONV_VERSION >= 0x0105 len = strlen (outcharset); { char *tmp = (char *) alloca (len + 10 + 1); memcpy (tmp, outcharset, len); memcpy (tmp + len, "//TRANSLIT", 10 + 1); outcharset = tmp; } # endif domain->conv = iconv_open (outcharset, charset); # if _LIBICONV_VERSION >= 0x0105 freea (outcharset); # endif # endif # endif freea (charset); } #endif /* _LIBC || HAVE_ICONV */ } return nullentry; } /* Frees the codeset dependent parts of an opened message catalog. */ void internal_function _nl_free_domain_conv (domain) struct loaded_domain *domain; { if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) free (domain->conv_tab); #ifdef _LIBC if (domain->conv != (__gconv_t) -1) __gconv_close (domain->conv); #else # if HAVE_ICONV if (domain->conv != (iconv_t) -1) iconv_close (domain->conv); # endif #endif } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (domain_file, domainbinding) struct loaded_l10nfile *domain_file; struct binding *domainbinding; { int fd; size_t size; #ifdef _LIBC struct stat64 st; #else struct stat st; #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file because domainbinding might be == NULL now but != NULL later (after a call to bind_textdomain_codeset). */ /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) return; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) return; /* We must know about the size of the file. */ if ( #ifdef _LIBC __builtin_expect (fstat64 (fd, &st) != 0, 0) #else __builtin_expect (fstat (fd, &st) != 0, 0) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) { /* Something went wrong. */ close (fd); return; } #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) { /* mmap() call was successful. */ close (fd); use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) return; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb <= 0) { #ifdef EINTR if (nb == -1 && errno == EINTR) continue; #endif close (fd); return; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); } /* Using the magic number we can test whether it really is a message catalog file. */ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, 0)) { /* The magic number is wrong: not a message catalog file. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); return; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain == NULL) return; domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; /* Fill in the information about the available tables. */ switch (W (domain->must_swap, data->revision)) { case 0: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)); break; default: /* This is an invalid revision. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; return; } /* Now initialize the character set converter from the character set the file is encoded with (found in the header entry) to the domain's specified character set or the locale's character set. */ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); /* Also look for a plural specification. */ if (nullentry != NULL) { const char *plural; const char *nplurals; plural = strstr (nullentry, "plural="); nplurals = strstr (nullentry, "nplurals="); if (plural == NULL || nplurals == NULL) goto no_plural; else { /* First get the number. */ char *endp; unsigned long int n; struct parse_args args; nplurals += 9; while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) ++nplurals; #if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); #else for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) n = n * 10 + (*endp - '0'); #endif domain->nplurals = n; if (nplurals == endp) goto no_plural; /* Due to the restrictions bison imposes onto the interface of the scanner function we have to put the input string and the result passed up from the parser into the same structure which address is passed down to the parser. */ plural += 7; args.cp = plural; if (PLURAL_PARSE (&args) != 0) goto no_plural; domain->plural = args.res; } } else { /* By default we are using the Germanic form: singular form only for `one', the plural form otherwise. Yes, this is also what English is using since English is a Germanic language. */ no_plural: INIT_GERMANIC_PLURAL (); domain->plural = &germanic_plural; domain->nplurals = 2; } } #ifdef _LIBC void internal_function _nl_unload_domain (domain) struct loaded_domain *domain; { if (domain->plural != &germanic_plural) __gettext_free_exp (domain->plural); _nl_free_domain_conv (domain); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif mutt-1.5.21/intl/localealias.c0000644000175000017500000002245110770271152013103 00000000000000/* Handle aliases for locale names. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #include #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 /* We need locking here since we can be called from different places. */ # include __libc_lock_define_initialized (static, lock); #endif #ifndef internal_function # define internal_function #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif struct alias_map { const char *alias; const char *value; }; static char *string_space; static size_t string_space_act; static size_t string_space_max; static struct alias_map *map; static size_t nmap; static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) internal_function; static int extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); const char * _nl_expand_alias (name) const char *name; { static const char *locale_alias_path = LOCALE_ALIAS_PATH; struct alias_map *retval; const char *result = NULL; size_t added; #ifdef _LIBC __libc_lock_lock (lock); #endif do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *)) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); #ifdef _LIBC __libc_lock_unlock (lock); #endif return result; } static size_t internal_function read_alias_file (fname, fname_len) const char *fname; int fname_len; { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif fp = fopen (full_fname, "r"); freea (full_fname); if (fp == NULL) return 0; added = 0; while (!feof (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long */ char buf[BUFSIZ]; char *alias; char *value; char *cp; if (fgets (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (strchr (buf, '\n') == NULL) { char altbuf[BUFSIZ]; do if (fgets (altbuf, sizeof altbuf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (altbuf, '\n') == NULL); } cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace ((unsigned char) cp[0])) ++cp; if (cp[0] != '\0') { size_t alias_len; size_t value_len; value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) return added; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) return added; if (__builtin_expect (string_space != new_pool, 0)) { size_t i; for (i = 0; i < nmap; i++) { map[i].alias += new_pool - string_space; map[i].value += new_pool - string_space; } } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); return added; } static int extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return -1; map = new_map; maxmap = new_size; return 0; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { if (string_space != NULL) free (string_space); if (map != NULL) free (map); } text_set_element (__libc_subfreeres, free_mem); #endif static int alias_compare (map1, map2) const struct alias_map *map1; const struct alias_map *map2; { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } mutt-1.5.21/intl/textdomain.c0000644000175000017500000001060410770271152013003 00000000000000/* Implementation of the textdomain(3) function. Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain _nl_default_default_domain__ # define _nl_current_default_domain _nl_current_default_domain__ #endif /* @@ end of prolog @@ */ /* Name of the default text domain. */ extern const char _nl_default_default_domain[]; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN textdomain__ #endif /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (domainname) const char *domainname; { char *new_domain; char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; __libc_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) { _nl_current_default_domain = _nl_default_default_domain; new_domain = (char *) _nl_current_default_domain; } else if (strcmp (domainname, old_domain) == 0) /* This can happen and people will use it to signal that some environment variable changed. */ new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; new_domain = (char *) malloc (len); if (new_domain != NULL) memcpy (new_domain, domainname, len); #endif if (new_domain != NULL) _nl_current_default_domain = new_domain; } /* We use this possibility to signal a change of the loaded catalogs since this is most likely the case and there is no other easy we to do it. Do it only when the call was successful. */ if (new_domain != NULL) { ++_nl_msg_cat_cntr; if (old_domain != new_domain && old_domain != _nl_default_default_domain) free (old_domain); } __libc_rwlock_unlock (_nl_state_lock); return new_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif mutt-1.5.21/intl/l10nflist.c0000644000175000017500000002447710770271152012460 00000000000000/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for stpcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Define function which are usually not available. */ #if !defined _LIBC && !defined HAVE___ARGZ_COUNT /* Returns the number of strings in ARGZ. */ static size_t argz_count__ PARAMS ((const char *argz, size_t len)); static size_t argz_count__ (argz, len) const char *argz; size_t len; { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #endif /* !_LIBC && !HAVE___ARGZ_COUNT */ #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); static void argz_stringify__ (argz, len, sep) char *argz; size_t len; int sep; { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ #if !defined _LIBC && !defined HAVE___ARGZ_NEXT static char *argz_next__ PARAMS ((char *argz, size_t argz_len, const char *entry)); static char * argz_next__ (argz, argz_len, entry) char *argz; size_t argz_len; const char *entry; { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE___ARGZ_NEXT */ /* Return number of bits set in X. */ static int pop PARAMS ((int x)); static inline int pop (x) int x; { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; int mask; const char *language; const char *territory; const char *codeset; const char *normalized_codeset; const char *modifier; const char *special; const char *sponsor; const char *revision; const char *filename; int do_allocate; { char *abs_filename; struct loaded_l10nfile *last = NULL; struct loaded_l10nfile *retval; char *cp; size_t entries; int cnt; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + (((mask & XPG_MODIFIER) != 0 || (mask & CEN_AUDIENCE) != 0) ? strlen (modifier) + 1 : 0) + ((mask & CEN_SPECIAL) != 0 ? strlen (special) + 1 : 0) + (((mask & CEN_SPONSOR) != 0 || (mask & CEN_REVISION) != 0) ? (1 + ((mask & CEN_SPONSOR) != 0 ? strlen (sponsor) + 1 : 0) + ((mask & CEN_REVISION) != 0 ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; retval = NULL; last = NULL; /* Construct file name. */ memcpy (abs_filename, dirlist, dirlist_len); __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR); cp = abs_filename + (dirlist_len - 1); *cp++ = '/'; cp = stpcpy (cp, language); if ((mask & TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) { /* This component can be part of both syntaces but has different leading characters. For CEN we use `+', else `@'. */ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; cp = stpcpy (cp, modifier); } if ((mask & CEN_SPECIAL) != 0) { *cp++ = '+'; cp = stpcpy (cp, special); } if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) { *cp++ = ','; if ((mask & CEN_SPONSOR) != 0) cp = stpcpy (cp, sponsor); if ((mask & CEN_REVISION) != 0) { *cp++ = '_'; cp = stpcpy (cp, revision); } } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ last = NULL; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } last = retval; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) * (1 << pop (mask)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) return NULL; retval->filename = abs_filename; retval->decided = (__argz_count (dirlist, dirlist_len) != 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; if (last == NULL) { retval->next = *l10nfile_list; *l10nfile_list = retval; } else { retval->next = last->next; last->next = retval; } entries = 0; /* If the DIRLIST is a real list the RETVAL entry corresponds not to a real file. So we have to use the DIRLIST separation mechanism of the inner loop. */ cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; for (; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ const char * _nl_normalize_codeset (codeset, name_len) const char *codeset; size_t name_len; { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum ((unsigned char) codeset[cnt])) { ++len; if (isalpha ((unsigned char) codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha ((unsigned char) codeset[cnt])) *wp++ = tolower ((unsigned char) codeset[cnt]); else if (isdigit ((unsigned char) codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif mutt-1.5.21/intl/explodename.c0000644000175000017500000001105510770271152013131 00000000000000/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ char * _nl_find_language (name) const char *name; { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') ++name; return (char *) name; } int _nl_explode_name (name, language, modifier, territory, codeset, normalized_codeset, special, sponsor, revision) char *name; const char **language; const char **modifier; const char **territory; const char **codeset; const char **normalized_codeset; const char **special; const char **sponsor; const char **revision; { enum { undecided, xpg, cen } syntax; char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; *special = NULL; *sponsor = NULL; *revision = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = 0; syntax = undecided; *language = cp = name; cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= TERRITORY; if (cp[0] == '.') { /* Next is the codeset. */ syntax = xpg; cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) { /* Next is the modifier. */ syntax = cp[0] == '@' ? xpg : cen; cp[0] = '\0'; *modifier = ++cp; while (syntax == cen && cp[0] != '\0' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= XPG_MODIFIER | CEN_AUDIENCE; } if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) { syntax = cen; if (cp[0] == '+') { /* Next is special application (CEN syntax). */ cp[0] = '\0'; *special = ++cp; while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= CEN_SPECIAL; } if (cp[0] == ',') { /* Next is sponsor (CEN syntax). */ cp[0] = '\0'; *sponsor = ++cp; while (cp[0] != '\0' && cp[0] != '_') ++cp; mask |= CEN_SPONSOR; } if (cp[0] == '_') { /* Next is revision (CEN syntax). */ cp[0] = '\0'; *revision = ++cp; mask |= CEN_REVISION; } } /* For CEN syntax values it might be important to have the separator character in the file name, not for XPG syntax. */ if (syntax == xpg) { if (*territory != NULL && (*territory)[0] == '\0') mask &= ~TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; if (*modifier != NULL && (*modifier)[0] == '\0') mask &= ~XPG_MODIFIER; } return mask; } mutt-1.5.21/intl/dcigettext.c0000644000175000017500000010236510770271152013001 00000000000000/* Implementation of the internal dcigettext function. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include #include #include #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include #if defined HAVE_SYS_PARAM_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "hash-string.h" /* Thread safetyness. */ #ifdef _LIBC # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_lock_define_initialized(CLASS, NAME) # define __libc_lock_lock(NAME) # define __libc_lock_unlock(NAME) # define __libc_rwlock_define_initialized(CLASS, NAME) # define __libc_rwlock_rdlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* Alignment of types. */ #if defined __GNUC__ && __GNUC__ >= 2 # define alignof(TYPE) __alignof__ (TYPE) #else # define alignof(TYPE) \ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain _nl_default_default_domain__ # define _nl_current_default_domain _nl_current_default_domain__ # define _nl_default_dirname _nl_default_dirname__ # define _nl_domain_bindings _nl_domain_bindings__ #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif # define tfind __tfind #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else char *getcwd (); # endif # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif # ifndef HAVE_MEMPCPY static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); # endif #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) #endif /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) # define HAVE_LOCALE_NULL #endif /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t { /* Domain in which to search. */ char *domainname; /* The category. */ int category; /* State of the catalog counter at the point the string was found. */ int counter; /* Catalog where the string was found. */ struct loaded_l10nfile *domain; /* And finally the translation. */ const char *translation; size_t translation_length; /* Pointer to the string in question. */ char msgid[ZERO]; }; /* Root of the search tree with known translations. We can use this only if the system provides the `tsearch' function family. */ #if defined HAVE_TSEARCH || defined _LIBC # include static void *root; # ifdef _LIBC # define tsearch __tsearch # endif /* Function to compare two entries in the table of known translations. */ static int transcmp PARAMS ((const void *p1, const void *p2)); static int transcmp (p1, p2) const void *p1; const void *p2; { const struct known_translation_t *s1; const struct known_translation_t *s2; int result; s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; result = strcmp (s1->msgid, s2->msgid); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) /* We compare the category last (though this is the cheapest operation) since it is hopefully always the same (namely LC_MESSAGES). */ result = s1->category - s2->category; } return result; } #endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] = "messages"; /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ const char _nl_default_dirname[] = LOCALEDIR; /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len)) internal_function; static unsigned long int plural_eval PARAMS ((struct expression *pexp, unsigned long int n)) internal_function; static const char *category_to_name PARAMS ((int category)) internal_function; static const char *guess_category_value PARAMS ((int category, const char *categoryname)) internal_function; /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) #endif /* have alloca */ #ifdef _LIBC /* List of blocks allocated for translations. */ typedef struct transmem_list { struct transmem_list *next; char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else typedef unsigned char transmem_block_t; #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCIGETTEXT __dcigettext #else # define DCIGETTEXT dcigettext__ #endif /* Lock variable to protect the global data in the gettext implementation. */ #ifdef _LIBC __libc_rwlock_define_initialized (, _nl_state_lock) #endif /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else # ifndef HAVE_GETUID # define getuid() 0 # endif # ifndef HAVE_GETGID # define getgid() 0 # endif # ifndef HAVE_GETEUID # define geteuid() getuid() # endif # ifndef HAVE_GETEGID # define getegid() getgid() # endif static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ char * DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) const char *domainname; const char *msgid1; const char *msgid2; int plural; unsigned long int n; int category; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; char *dirname, *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; #if defined HAVE_TSEARCH || defined _LIBC struct known_translation_t *search; struct known_translation_t **foundp = NULL; size_t msgid_len; #endif size_t domainname_len; /* If no real MSGID is given return NULL. */ if (msgid1 == NULL) return NULL; __libc_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the definition left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; #if defined HAVE_TSEARCH || defined _LIBC msgid_len = strlen (msgid1) + 1; /* Try to find the translation among those which we found at some time. */ search = (struct known_translation_t *) alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = (char *) domainname; search->category = category; foundp = (struct known_translation_t **) tfind (search, &root, transcmp); if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ if (plural) retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, (*foundp)->translation_length); else retval = (char *) (*foundp)->translation; __libc_rwlock_unlock (_nl_state_lock); return retval; } #endif /* Preserve the `errno' value. */ saved_errno = errno; /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = (char *) _nl_default_dirname; else if (IS_ABSOLUTE_PATH (binding->dirname)) dirname = binding->dirname; else { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (binding->dirname) + 1; size_t path_max; char *ret; path_max = (unsigned int) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ for (;;) { dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); ret = getcwd (dirname, path_max); if (ret != NULL || errno != ERANGE) break; path_max += path_max / 2; path_max += PATH_INCR; } if (ret == NULL) { /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ FREE_BLOCKS (block_list); __libc_rwlock_unlock (_nl_state_lock); __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); categoryvalue = guess_category_value (category, categoryname); domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname, domainname_len), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for the translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) { FREE_BLOCKS (block_list); __libc_rwlock_unlock (_nl_state_lock); __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); if (domain != NULL) { retval = _nl_find_msg (domain, binding, msgid1, &retlen); if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = _nl_find_msg (domain->successor[cnt], binding, msgid1, &retlen); if (retval != NULL) { domain = domain->successor[cnt]; break; } } } if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); __set_errno (saved_errno); #if defined HAVE_TSEARCH || defined _LIBC if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ struct known_translation_t *newp; newp = (struct known_translation_t *) malloc (offsetof (struct known_translation_t, msgid) + msgid_len + domainname_len + 1); if (newp != NULL) { newp->domainname = mempcpy (newp->msgid, msgid1, msgid_len); memcpy (newp->domainname, domainname, domainname_len + 1); newp->category = category; newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ free (newp); } } else { /* We can update the existing entry. */ (*foundp)->counter = _nl_msg_cat_cntr; (*foundp)->domain = domain; (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } #endif /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); __libc_rwlock_unlock (_nl_state_lock); return retval; } } } /* NOTREACHED */ } char * internal_function _nl_find_msg (domain_file, domainbinding, msgid, lengthp) struct loaded_l10nfile *domain_file; struct binding *domainbinding; const char *msgid; size_t *lengthp; { struct loaded_domain *domain; size_t act; char *result; size_t resultlen; if (domain_file->decided == 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; /* Locate the MSGID and its translation. */ if (domain->hash_size > 2 && domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); while (1) { nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; /* Compare msgid with the original string at index nstr-1. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len && (strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0)) { act = nstr - 1; goto found; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } /* NOTREACHED */ } else { /* Try the default method: binary search in the sorted array of messages. */ size_t top, bottom; bottom = 0; top = domain->nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, (domain->data + W (domain->must_swap, domain->orig_tab[act].offset))); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else goto found; } /* No translation was found. */ return NULL; } found: /* The translation was found at index ACT. If we have to convert the string to use a different character set, this is the time. */ result = ((char *) domain->data + W (domain->must_swap, domain->trans_tab[act].offset)); resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; #if defined _LIBC || HAVE_ICONV if (domain->codeset_cntr != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) { /* The domain's codeset has changed through bind_textdomain_codeset() since the message catalog was initialized or last accessed. We have to reinitialize the converter. */ _nl_free_domain_conv (domain); _nl_init_domain_conv (domain_file, domain, domainbinding); } if ( # ifdef _LIBC domain->conv != (__gconv_t) -1 # else # if HAVE_ICONV domain->conv != (iconv_t) -1 # endif # endif ) { /* We are supposed to do a conversion. First allocate an appropriate table with the same structure as the table of translations in the file, where we can put the pointers to the converted strings in. There is a slight complication with plural entries. They are represented by consecutive NUL terminated strings. We handle this case by converting RESULTLEN bytes, including NULs. */ if (domain->conv_tab == NULL && ((domain->conv_tab = (char **) calloc (domain->nstrings, sizeof (char *))) == NULL)) /* Mark that we didn't succeed allocating a table. */ domain->conv_tab = (char **) -1; if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) /* Nothing we can do, no more memory. */ goto converted; if (domain->conv_tab[act] == NULL) { /* We haven't used this string so far, so it is not translated yet. Do this now. */ /* We use a bit more efficient memory handling. We allocate always larger blocks which get used over time. This is faster than many small allocations. */ __libc_lock_define_initialized (static, lock) # define INITIAL_BLOCK_SIZE 4080 static unsigned char *freemem; static size_t freemem_size; const unsigned char *inbuf; unsigned char *outbuf; int malloc_count; # ifndef _LIBC transmem_block_t *transmem_list = NULL; # endif __libc_lock_lock (lock); inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; while (1) { transmem_block_t *newmem; # ifdef _LIBC size_t non_reversible; int res; if (freemem_size < sizeof (size_t)) goto resize_freemem; res = __gconv (domain->conv, &inbuf, inbuf + resultlen, &outbuf, outbuf + freemem_size - sizeof (size_t), &non_reversible); if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) break; if (res != __GCONV_FULL_OUTPUT) { __libc_lock_unlock (lock); goto converted; } inbuf = result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; size_t inleft = resultlen; char *outptr = (char *) outbuf; size_t outleft; if (freemem_size < sizeof (size_t)) goto resize_freemem; outleft = freemem_size - sizeof (size_t); if (iconv (domain->conv, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; break; } if (errno != E2BIG) { __libc_lock_unlock (lock); goto converted; } # endif # endif resize_freemem: /* We must allocate a new buffer or resize the old one. */ if (malloc_count > 0) { ++malloc_count; freemem_size = malloc_count * INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) realloc (transmem_list, freemem_size); # ifdef _LIBC if (newmem != NULL) transmem_list = transmem_list->next; else { struct transmem_list *old = transmem_list; transmem_list = transmem_list->next; free (old); } # endif } else { malloc_count = 1; freemem_size = INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) malloc (freemem_size); } if (__builtin_expect (newmem == NULL, 0)) { freemem = NULL; freemem_size = 0; __libc_lock_unlock (lock); goto converted; } # ifdef _LIBC /* Add the block to the list of blocks we have to free at some point. */ newmem->next = transmem_list; transmem_list = newmem; freemem = newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; freemem = newmem; # endif outbuf = freemem + sizeof (size_t); } /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); domain->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; freemem += freemem_size & (alignof (size_t) - 1); freemem_size = freemem_size & ~ (alignof (size_t) - 1); __libc_lock_unlock (lock); } /* Now domain->conv_tab[act] contains the translation of all the plural variants. */ result = domain->conv_tab[act] + sizeof (size_t); resultlen = *(size_t *) domain->conv_tab[act]; } converted: /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ *lengthp = resultlen; return result; } /* Look up a plural variant. */ static char * internal_function plural_lookup (domain, n, translation, translation_len) struct loaded_l10nfile *domain; unsigned long int n; const char *translation; size_t translation_len; { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; const char *p; index = plural_eval (domaindata->plural, n); if (index >= domaindata->nplurals) /* This should never happen. It means the plural expression and the given maximum value do not match. */ index = 0; /* Skip INDEX strings at TRANSLATION. */ p = translation; while (index-- > 0) { #ifdef _LIBC p = __rawmemchr (p, '\0'); #else p = strchr (p, '\0'); #endif /* And skip over the NUL byte. */ p++; if (p >= translation + translation_len) /* This should never happen. It means the plural expression evaluated to a value larger than the number of variants available for MSGID1. */ return (char *) translation; } return (char *) p; } /* Function to evaluate the plural expression and return an index value. */ static unsigned long int internal_function plural_eval (pexp, n) struct expression *pexp; unsigned long int n; { switch (pexp->nargs) { case 0: switch (pexp->operation) { case var: return n; case num: return pexp->val.num; default: break; } /* NOTREACHED */ break; case 1: { /* pexp->operation must be lnot. */ unsigned long int arg = plural_eval (pexp->val.args[0], n); return ! arg; } case 2: { unsigned long int leftarg = plural_eval (pexp->val.args[0], n); if (pexp->operation == lor) return leftarg || plural_eval (pexp->val.args[1], n); else if (pexp->operation == land) return leftarg && plural_eval (pexp->val.args[1], n); else { unsigned long int rightarg = plural_eval (pexp->val.args[1], n); switch (pexp->operation) { case mult: return leftarg * rightarg; case divide: return leftarg / rightarg; case module: return leftarg % rightarg; case plus: return leftarg + rightarg; case minus: return leftarg - rightarg; case less_than: return leftarg < rightarg; case greater_than: return leftarg > rightarg; case less_or_equal: return leftarg <= rightarg; case greater_or_equal: return leftarg >= rightarg; case equal: return leftarg == rightarg; case not_equal: return leftarg != rightarg; default: break; } } /* NOTREACHED */ break; } case 3: { /* pexp->operation must be qmop. */ unsigned long int boolarg = plural_eval (pexp->val.args[0], n); return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); } } /* NOTREACHED */ return 0; } /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (category) int category; { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } /* Guess value of current locale from value of the environment variables. */ static const char * internal_function guess_category_value (category, categoryname) int category; const char *categoryname; { const char *language; const char *retval; /* The highest priority value is the `LANGUAGE' environment variable. But we don't use the value if the currently selected locale is the C locale. This is a GNU extension. */ language = getenv ("LANGUAGE"); if (language != NULL && language[0] == '\0') language = NULL; /* We have to proceed with the POSIX methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ #if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL) retval = setlocale (category, NULL); #else /* Setting of LC_ALL overwrites all other. */ retval = getenv ("LC_ALL"); if (retval == NULL || retval[0] == '\0') { /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval == NULL || retval[0] == '\0') { /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval == NULL || retval[0] == '\0') /* We use C as the default domain. POSIX says this is implementation defined. */ return "C"; } } #endif return language != NULL && strcmp (retval, "C") != 0 ? language : retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #if !_LIBC && !HAVE_MEMPCPY static void * mempcpy (dest, src, n) void *dest; const void *src; size_t n; { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ static void __attribute__ ((unused)) free_mem (void) { void *old; while (_nl_domain_bindings != NULL) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); free (oldp); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); /* Remove the search tree with the known translations. */ __tdestroy (root, free); root = NULL; while (transmem_list != NULL) { old = transmem_list; transmem_list = transmem_list->next; free (old); } } text_set_element (__libc_subfreeres, free_mem); #endif mutt-1.5.21/intl/dcngettext.c0000644000175000017500000000355210770271152013004 00000000000000/* Implementation of the dcngettext(3) function. Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCNGETTEXT __dcngettext # define DCIGETTEXT __dcigettext #else # define DCNGETTEXT dcngettext__ # define DCIGETTEXT dcigettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCNGETTEXT (domainname, msgid1, msgid2, n, category) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; int category; { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcngettext, dcngettext); #endif mutt-1.5.21/intl/dngettext.c0000644000175000017500000000361210770271152012636 00000000000000/* Implementation of the dngettext(3) function. Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DNGETTEXT __dngettext # define DCNGETTEXT __dcngettext #else # define DNGETTEXT dngettext__ # define DCNGETTEXT dcngettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * DNGETTEXT (domainname, msgid1, msgid2, n) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dngettext, dngettext); #endif mutt-1.5.21/intl/ngettext.c0000644000175000017500000000372410770271152012476 00000000000000/* Implementation of ngettext(3) function. Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define NGETTEXT __ngettext # define DCNGETTEXT __dcngettext #else # define NGETTEXT ngettext__ # define DCNGETTEXT dcngettext__ #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * NGETTEXT (msgid1, msgid2, n) const char *msgid1; const char *msgid2; unsigned long int n; { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__ngettext, ngettext); #endif mutt-1.5.21/intl/plural.y0000644000175000017500000002026710770271152012162 00000000000000%{ /* Expression parsing for plural form selection. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp #else # define FREE_EXPRESSION gettext_free_exp__ # define __gettextparse gettextparse__ #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} %pure_parser %expect 10 %union { unsigned long int num; enum operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ static struct expression *new_exp PARAMS ((int nargs, enum operator op, struct expression * const *args)); static inline struct expression *new_exp_0 PARAMS ((enum operator op)); static inline struct expression *new_exp_1 PARAMS ((enum operator op, struct expression *right)); static struct expression *new_exp_2 PARAMS ((enum operator op, struct expression *left, struct expression *right)); static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); /* Allocation of expressions. */ static struct expression * new_exp (nargs, op, args) int nargs; enum operator op; struct expression * const *args; { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (op) enum operator op; { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (op, right) enum operator op; struct expression *right; { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (op, left, right) enum operator op; struct expression *left; struct expression *right; { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (op, bexp, tbranch, fbranch) enum operator op; struct expression *bexp; struct expression *tbranch; struct expression *fbranch; { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } %} /* This declares that all operators have the same associativity and the precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ %right '?' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ %right '!' /* ! */ %token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp %% start: exp { if ($1 == NULL) YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { $$ = new_exp_2 (land, $1, $3); } | exp EQUOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp CMPOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp ADDOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp MULOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | '!' exp { $$ = new_exp_1 (lnot, $2); } | 'n' { $$ = new_exp_0 (var); } | NUMBER { if (($$ = new_exp_0 (num)) != NULL) $$->val.num = $1; } | '(' exp ')' { $$ = $2; } ; %% void internal_function FREE_EXPRESSION (exp) struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (str) const char *str; { /* Do nothing. We don't print error messages here. */ } mutt-1.5.21/intl/localcharset.c0000644000175000017500000001536410770271152013303 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #if HAVE_STDDEF_H # include #endif #include #if HAVE_STRING_H # include #else # include #endif #if HAVE_STDLIB_H # include #endif #if defined _WIN32 || defined __WIN32__ # undef WIN32 /* avoid warning on mingw32 */ # define WIN32 #endif #ifndef WIN32 # if HAVE_LANGINFO_CODESET # include # else # if HAVE_SETLOCALE # include # endif # endif #else /* WIN32 */ # define WIN32_LEAN_AND_MEAN # include #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases () { const char *cp; cp = charset_aliases; if (cp == NULL) { #ifndef WIN32 FILE *fp; const char *dir = LIBDIR; const char *base = "charset.alias"; char *file_name; /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) /* Out of memory or file not found, treat it as empty. */ cp = ""; else { /* Parse the file's contents. */ int c; char buf1[50+1]; char buf2[50+1]; char *res_ptr = NULL; size_t res_size = 0; size_t l1, l2; for (;;) { c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } if (file_name != NULL) free (file_name); #else /* WIN32 */ /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0"; #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset () { const char *codeset; const char *aliases; #ifndef WIN32 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if HAVE_SETLOCALE && 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #else /* WIN32 */ static char buf[2 + 10 + 1]; /* Win32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } return codeset; } mutt-1.5.21/intl/intl-compat.c0000644000175000017500000001123610770271152013060 00000000000000/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995, 2000, 2001 Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "libgnuintl.h" #include "gettextP.h" /* @@ end of prolog @@ */ /* This file redirects the gettext functions (without prefix or suffix) to those defined in the included GNU gettext library (with "__" suffix). It is compiled into libintl when the included GNU gettext library is configured --with-included-gettext. This redirection works also in the case that the system C library or the system libintl library contain gettext/textdomain/... functions. If it didn't, we would need to add preprocessor level redirections to libgnuintl.h of the following form: # define gettext gettext__ # define dgettext dgettext__ # define dcgettext dcgettext__ # define ngettext ngettext__ # define dngettext dngettext__ # define dcngettext dcngettext__ # define textdomain textdomain__ # define bindtextdomain bindtextdomain__ # define bind_textdomain_codeset bind_textdomain_codeset__ How does this redirection work? There are two cases. A. When libintl.a is linked into an executable, it works because functions defined in the executable always override functions in the shared libraries. B. When libintl.so is used, it works because 1. those systems defining gettext/textdomain/... in the C library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are ELF systems and define these symbols as weak, thus explicitly letting other shared libraries override it. 2. those systems defining gettext/textdomain/... in a standalone libintl.so library (namely, Solaris 2.3 and newer) have this shared library in /usr/lib, and the linker will search /usr/lib *after* the directory where the GNU gettext library is installed. A third case, namely when libintl.a is linked into a shared library whose name is not libintl.so, is not supported. In this case, on Solaris, when -lintl precedes the linker option for the shared library containing GNU gettext, the system's gettext would indeed override the GNU gettext. Anyone doing this kind of stuff must be clever enough to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker command line. */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset char * gettext (msgid) const char *msgid; { return gettext__ (msgid); } char * dgettext (domainname, msgid) const char *domainname; const char *msgid; { return dgettext__ (domainname, msgid); } char * dcgettext (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return dcgettext__ (domainname, msgid, category); } char * ngettext (msgid1, msgid2, n) const char *msgid1; const char *msgid2; unsigned long int n; { return ngettext__ (msgid1, msgid2, n); } char * dngettext (domainname, msgid1, msgid2, n) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; { return dngettext__ (domainname, msgid1, msgid2, n); } char * dcngettext (domainname, msgid1, msgid2, n, category) const char *domainname; const char *msgid1; const char *msgid2; unsigned long int n; int category; { return dcngettext__ (domainname, msgid1, msgid2, n, category); } char * textdomain (domainname) const char *domainname; { return textdomain__ (domainname); } char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { return bindtextdomain__ (domainname, dirname); } char * bind_textdomain_codeset (domainname, codeset) const char *domainname; const char *codeset; { return bind_textdomain_codeset__ (domainname, codeset); } mutt-1.5.21/intl/plural.c0000644000175000017500000010013110770271152012121 00000000000000 /* A Bison parser, made from plural.y by GNU Bison version 1.28 */ #define YYBISON 1 /* Identify Bison output. */ #define yyparse __gettextparse #define yylex __gettextlex #define yyerror __gettexterror #define yylval __gettextlval #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs #define EQUOP2 257 #define CMPOP2 258 #define ADDOP2 259 #define MULOP2 260 #define NUMBER 261 #line 1 "plural.y" /* Expression parsing for plural form selection. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include "gettextP.h" /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp #else # define FREE_EXPRESSION gettext_free_exp__ # define __gettextparse gettextparse__ #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg #line 53 "plural.y" typedef union { unsigned long int num; enum operator op; struct expression *exp; } YYSTYPE; #line 59 "plural.y" /* Prototypes for local functions. */ static struct expression *new_exp PARAMS ((int nargs, enum operator op, struct expression * const *args)); static inline struct expression *new_exp_0 PARAMS ((enum operator op)); static inline struct expression *new_exp_1 PARAMS ((enum operator op, struct expression *right)); static struct expression *new_exp_2 PARAMS ((enum operator op, struct expression *left, struct expression *right)); static inline struct expression *new_exp_3 PARAMS ((enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch)); static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); static void yyerror PARAMS ((const char *str)); /* Allocation of expressions. */ static struct expression * new_exp (nargs, op, args) int nargs; enum operator op; struct expression * const *args; { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (op) enum operator op; { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (op, right) enum operator op; struct expression *right; { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (op, left, right) enum operator op; struct expression *left; struct expression *right; { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (op, bexp, tbranch, fbranch) enum operator op; struct expression *bexp; struct expression *tbranch; struct expression *fbranch; { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } #include #ifndef __cplusplus #ifndef __STDC__ #define const #endif #endif #define YYFINAL 27 #define YYFLAG -32768 #define YYNTBASE 16 #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, 11 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, 37, 39 }; static const short yyrhs[] = { 17, 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, 15, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, 178, 186, 190, 194, 198, 202, 206, 210, 214, 218, 222, 227 }; #endif #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", "'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", "start","exp", NULL }; #endif static const short yyr1[] = { 0, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 }; static const short yyr2[] = { 0, 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3 }; static const short yydefact[] = { 0, 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, 7, 8, 0, 2, 0, 0, 0 }; static const short yydefgoto[] = { 25, 5 }; static const short yypact[] = { -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, -3,-32768, -9, 34, 21, 53,-32768 }; static const short yypgoto[] = {-32768, -1 }; #define YYLAST 53 static const short yytable[] = { 6, 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, 13, 14, 27 }; static const short yycheck[] = { 1, 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, 8, 9, 0 }; #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" /* This file comes from bison-1.28. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 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 2, 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* This is the parser code that is written into each bison parser when the %semantic_parser declaration is not specified in the grammar. It was written by Richard Stallman by simplifying the hairy parser used when %semantic_parser is specified. */ #ifndef YYSTACK_USE_ALLOCA #ifdef alloca #define YYSTACK_USE_ALLOCA #else /* alloca not defined */ #ifdef __GNUC__ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #else /* not GNU C. */ #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) #define YYSTACK_USE_ALLOCA #include #else /* not sparc */ /* We think this test detects Watcom and Microsoft C. */ /* This used to test MSDOS, but that is a bad idea since that symbol is in the user namespace. */ #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) #if 0 /* No need for malloc.h, which pollutes the namespace; instead, just don't use alloca. */ #include #endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) /* I don't know what this was needed for, but it pollutes the namespace. So I turned it off. rms, 2 May 1997. */ /* #include */ #pragma alloca #define YYSTACK_USE_ALLOCA #else /* not MSDOS, or __TURBOC__, or _AIX */ #if 0 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, and on HPUX 10. Eventually we can turn this on. */ #define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #endif /* __hpux */ #endif #endif /* not _AIX */ #endif /* not MSDOS, or __TURBOC__ */ #endif /* not sparc */ #endif /* not GNU C */ #endif /* alloca not defined */ #endif /* YYSTACK_USE_ALLOCA not defined */ #ifdef YYSTACK_USE_ALLOCA #define YYSTACK_ALLOC alloca #else #define YYSTACK_ALLOC malloc #endif /* Note: there must be only one dollar sign in this file. It is replaced by the list of actions, each action as one case of the switch. */ #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrlab1 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(token, value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { yychar = (token), yylval = (value); \ yychar1 = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 #ifndef YYPURE #define YYLEX yylex() #endif #ifdef YYPURE #ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else #define YYLEX yylex(&yylval, &yylloc) #endif #else /* not YYLSP_NEEDED */ #ifdef YYLEX_PARAM #define YYLEX yylex(&yylval, YYLEX_PARAM) #else #define YYLEX yylex(&yylval) #endif #endif /* not YYLSP_NEEDED */ #endif /* If nonreentrant, generate the variables here */ #ifndef YYPURE int yychar; /* the lookahead symbol */ YYSTYPE yylval; /* the semantic value of the */ /* lookahead symbol */ #ifdef YYLSP_NEEDED YYLTYPE yylloc; /* location data for the lookahead */ /* symbol */ #endif int yynerrs; /* number of parse errors so far */ #endif /* not YYPURE */ #if YYDEBUG != 0 int yydebug; /* nonzero means print parse trace */ /* Since this is uninitialized, it does not stop multiple parsers from coexisting. */ #endif /* YYINITDEPTH indicates the initial size of the parser's stacks */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH is the maximum size the stacks can grow to (effective only if the built-in stack extension method is used). */ #if YYMAXDEPTH == 0 #undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif /* Define __yy_memcpy. Note that the size argument should be passed with type unsigned int, because that is what the non-GCC definitions require. With GCC, __builtin_memcpy takes an arg of type size_t, but it can handle unsigned int. */ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) #else /* not GNU C or C++ */ #ifndef __cplusplus /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (to, from, count) char *to; char *from; unsigned int count; { register char *f = from; register char *t = to; register int i = count; while (i-- > 0) *t++ = *f++; } #else /* __cplusplus */ /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void __yy_memcpy (char *to, char *from, unsigned int count) { register char *t = to; register char *f = from; register int i = count; while (i-- > 0) *t++ = *f++; } #endif #endif #line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. It should actually point to an object. Grammar actions can access the variable by casting it to the proper pointer type. */ #ifdef YYPARSE_PARAM #ifdef __cplusplus #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM #define YYPARSE_PARAM_DECL #else /* not __cplusplus */ #define YYPARSE_PARAM_ARG YYPARSE_PARAM #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; #endif /* not __cplusplus */ #else /* not YYPARSE_PARAM */ #define YYPARSE_PARAM_ARG #define YYPARSE_PARAM_DECL #endif /* not YYPARSE_PARAM */ /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ #ifdef YYPARSE_PARAM int yyparse (void *); #else int yyparse (void); #endif #endif int yyparse(YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { register int yystate; register int yyn; register short *yyssp; register YYSTYPE *yyvsp; int yyerrstatus; /* number of tokens to shift before error messages enabled */ int yychar1 = 0; /* lookahead token as an internal (translated) token number */ short yyssa[YYINITDEPTH]; /* the state stack */ YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ short *yyss = yyssa; /* refer to the stacks thru separate pointers */ YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ #ifdef YYLSP_NEEDED YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ YYLTYPE *yyls = yylsa; YYLTYPE *yylsp; #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) #else #define YYPOPSTACK (yyvsp--, yyssp--) #endif int yystacksize = YYINITDEPTH; int yyfree_stacks = 0; #ifdef YYPURE int yychar; YYSTYPE yylval; int yynerrs; #ifdef YYLSP_NEEDED YYLTYPE yylloc; #endif #endif YYSTYPE yyval; /* the variable used to return */ /* semantic values from the action */ /* routines */ int yylen; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Starting parse\n"); #endif yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss - 1; yyvsp = yyvs; #ifdef YYLSP_NEEDED yylsp = yyls; #endif /* Push a new state, which is found in yystate . */ /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yynewstate: *++yyssp = yystate; if (yyssp >= yyss + yystacksize - 1) { /* Give user a chance to reallocate the stack */ /* Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; #ifdef YYLSP_NEEDED YYLTYPE *yyls1 = yyls; #endif /* Get the current used size of the three stacks, in elements. */ int size = yyssp - yyss + 1; #ifdef yyoverflow /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. */ #ifdef YYLSP_NEEDED /* This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yyls1, size * sizeof (*yylsp), &yystacksize); #else yyoverflow("parser stack overflow", &yyss1, size * sizeof (*yyssp), &yyvs1, size * sizeof (*yyvsp), &yystacksize); #endif yyss = yyss1; yyvs = yyvs1; #ifdef YYLSP_NEEDED yyls = yyls1; #endif #else /* no yyoverflow */ /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) { yyerror("parser stack overflow"); if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 2; } yystacksize *= 2; if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; #ifndef YYSTACK_USE_ALLOCA yyfree_stacks = 1; #endif yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); __yy_memcpy ((char *)yyss, (char *)yyss1, size * (unsigned int) sizeof (*yyssp)); yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * (unsigned int) sizeof (*yyvsp)); #ifdef YYLSP_NEEDED yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); __yy_memcpy ((char *)yyls, (char *)yyls1, size * (unsigned int) sizeof (*yylsp)); #endif #endif /* no yyoverflow */ yyssp = yyss + size - 1; yyvsp = yyvs + size - 1; #ifdef YYLSP_NEEDED yylsp = yyls + size - 1; #endif #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Stack size increased to %d\n", yystacksize); #endif if (yyssp >= yyss + yystacksize - 1) YYABORT; } #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Entering state %d\n", yystate); #endif goto yybackup; yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* yychar is either YYEMPTY or YYEOF or a valid token in external form. */ if (yychar == YYEMPTY) { #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Reading a token: "); #endif yychar = YYLEX; } /* Convert token to internal form (in yychar1) for indexing tables with */ if (yychar <= 0) /* This means end of input. */ { yychar1 = 0; yychar = YYEOF; /* Don't call YYLEX any more */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Now at end of input.\n"); #endif } else { yychar1 = YYTRANSLATE(yychar); #if YYDEBUG != 0 if (yydebug) { fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); /* Give the individual parser a way to print the precise meaning of a token, for further debugging info. */ #ifdef YYPRINT YYPRINT (stderr, yychar, yylval); #endif fprintf (stderr, ")\n"); } #endif } yyn += yychar1; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; yyn = yytable[yyn]; /* yyn is what to do for this token type in this state. Negative => reduce, -yyn is rule number. Positive => shift, yyn is new state. New state is final state => don't bother to shift, just return success. 0, or most negative number => error. */ if (yyn < 0) { if (yyn == YYFLAG) goto yyerrlab; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); #endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif /* count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /* Do the default action for the current state. */ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; /* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: yylen = yyr2[yyn]; if (yylen > 0) yyval = yyvsp[1-yylen]; /* implement default value of the action */ #if YYDEBUG != 0 if (yydebug) { int i; fprintf (stderr, "Reducing via rule %d (line %d), ", yyn, yyrline[yyn]); /* Print the symbols being reduced, and their result. */ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) fprintf (stderr, "%s ", yytname[yyrhs[i]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); } #endif switch (yyn) { case 1: #line 179 "plural.y" { if (yyvsp[0].exp == NULL) YYABORT; ((struct parse_args *) arg)->res = yyvsp[0].exp; ; break;} case 2: #line 187 "plural.y" { yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 3: #line 191 "plural.y" { yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 4: #line 195 "plural.y" { yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 5: #line 199 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 6: #line 203 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 7: #line 207 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 8: #line 211 "plural.y" { yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 9: #line 215 "plural.y" { yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); ; break;} case 10: #line 219 "plural.y" { yyval.exp = new_exp_0 (var); ; break;} case 11: #line 223 "plural.y" { if ((yyval.exp = new_exp_0 (num)) != NULL) yyval.exp->val.num = yyvsp[0].num; ; break;} case 12: #line 228 "plural.y" { yyval.exp = yyvsp[-1].exp; ; break;} } /* the action file gets copied in in place of this dollarsign */ #line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; #ifdef YYLSP_NEEDED yylsp -= yylen; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif *++yyvsp = yyval; #ifdef YYLSP_NEEDED yylsp++; if (yylen == 0) { yylsp->first_line = yylloc.first_line; yylsp->first_column = yylloc.first_column; yylsp->last_line = (yylsp-1)->last_line; yylsp->last_column = (yylsp-1)->last_column; yylsp->text = 0; } else { yylsp->last_line = (yylsp+yylen-1)->last_line; yylsp->last_column = (yylsp+yylen-1)->last_column; } #endif /* Now "shift" the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTBASE] + *yyssp; if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; yyerrlab: /* here on detecting error */ if (! yyerrstatus) /* If not already recovering from an error, report this error. */ { ++yynerrs; #ifdef YYERROR_VERBOSE yyn = yypact[yystate]; if (yyn > YYFLAG && yyn < YYLAST) { int size = 0; char *msg; int x, count; count = 0; /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) size += strlen(yytname[x]) + 15, count++; msg = (char *) malloc(size + 15); if (msg != 0) { strcpy(msg, "parse error"); if (count < 5) { count = 0; for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) { strcat(msg, count == 0 ? ", expecting `" : " or `"); strcat(msg, yytname[x]); strcat(msg, "'"); count++; } } yyerror(msg); free(msg); } else yyerror ("parse error; also virtual memory exceeded"); } else #endif /* YYERROR_VERBOSE */ yyerror("parse error"); } goto yyerrlab1; yyerrlab1: /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { /* if just tried and failed to reuse lookahead token after an error, discard it. */ /* return failure if at end of input */ if (yychar == YYEOF) YYABORT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); #endif yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ yyerrstatus = 3; /* Each real token shifted decrements this */ goto yyerrhandle; yyerrdefault: /* current state does not do anything special for the error token. */ #if 0 /* This is wrong; only states that explicitly want error tokens should shift them. */ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ if (yyn) goto yydefault; #endif yyerrpop: /* pop the current state because it cannot handle the error token */ if (yyssp == yyss) YYABORT; yyvsp--; yystate = *--yyssp; #ifdef YYLSP_NEEDED yylsp--; #endif #if YYDEBUG != 0 if (yydebug) { short *ssp1 = yyss - 1; fprintf (stderr, "Error: state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); } #endif yyerrhandle: yyn = yypact[yystate]; if (yyn == YYFLAG) goto yyerrdefault; yyn += YYTERROR; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) goto yyerrdefault; yyn = yytable[yyn]; if (yyn < 0) { if (yyn == YYFLAG) goto yyerrpop; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; #if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting error token, "); #endif *++yyvsp = yylval; #ifdef YYLSP_NEEDED *++yylsp = yylloc; #endif yystate = yyn; goto yynewstate; yyacceptlab: /* YYACCEPT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 0; yyabortlab: /* YYABORT comes here. */ if (yyfree_stacks) { free (yyss); free (yyvs); #ifdef YYLSP_NEEDED free (yyls); #endif } return 1; } #line 233 "plural.y" void internal_function FREE_EXPRESSION (exp) struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (lval, pexp) YYSTYPE *lval; const char **pexp; { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (str) const char *str; { /* Do nothing. We don't print error messages here. */ } mutt-1.5.21/intl/VERSION0000644000175000017500000000005110770271152011526 00000000000000GNU gettext library from gettext-0.10.40 mutt-1.5.21/m4/0000755000175000017500000000000011444176761010125 500000000000000mutt-1.5.21/m4/codeset.m40000644000175000017500000000072111051345464011725 00000000000000#serial 1 dnl From Bruno Haible. AC_DEFUN([MUTT_AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) mutt-1.5.21/m4/curslib.m40000644000175000017500000000467110770271152011751 00000000000000dnl --------------------------------------------------------------------------- dnl Look for the curses libraries. Older curses implementations may require dnl termcap/termlib to be linked as well. AC_DEFUN([CF_CURSES_LIBS],[ AC_CHECK_FUNC(initscr,,[ case $host_os in #(vi freebsd*) #(vi AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"]) ;; hpux10.*|hpux11.*) AC_CHECK_LIB(cur_colr,initscr,[ LIBS="-lcur_colr $LIBS" CFLAGS="-I/usr/include/curses_colr $CFLAGS" ac_cv_func_initscr=yes ],[ AC_CHECK_LIB(Hcurses,initscr,[ # HP's header uses __HP_CURSES, but user claims _HP_CURSES. LIBS="-lHcurses $LIBS" CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS" ac_cv_func_initscr=yes ])]) ;; linux*) # Suse Linux does not follow /usr/lib convention LIBS="$LIBS -L/lib" ;; esac if test ".$With5lib" != ".no" ; then if test -d /usr/5lib ; then # SunOS 3.x or 4.x CPPFLAGS="$CPPFLAGS -I/usr/5include" LIBS="$LIBS -L/usr/5lib" fi fi if test ".$ac_cv_func_initscr" != .yes ; then cf_save_LIBS="$LIBS" cf_term_lib="" cf_curs_lib="" # Check for library containing tgoto. Do this before curses library # because it may be needed to link the test-case for initscr. AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ for cf_term_lib in termcap termlib unknown do AC_CHECK_LIB($cf_term_lib,tgoto,[break]) done ]) # Check for library containing initscr test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown do AC_CHECK_LIB($cf_curs_lib,initscr,[break]) done test $cf_curs_lib = unknown && AC_ERROR(no curses library found) LIBS="-l$cf_curs_lib $cf_save_LIBS" if test "$cf_term_lib" = unknown ; then AC_MSG_CHECKING(if we can link with $cf_curs_lib library) AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], [initscr()], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) test $cf_result = no && AC_ERROR(Cannot link curses library) elif test "$cf_term_lib" != predefined ; then AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], [initscr(); tgoto((char *)0, 0, 0);], [cf_result=no], [ LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], [initscr()], [cf_result=yes], [cf_result=error]) ]) AC_MSG_RESULT($cf_result) fi fi ])]) mutt-1.5.21/m4/funcdecl.m40000644000175000017500000000356710770271152012074 00000000000000dnl --------------------------------------------------------------------------- dnl Check if a function is declared by including a set of include files. dnl Invoke the corresponding actions according to whether it is found or not. dnl dnl Gcc (unlike other compilers) will only warn about the miscast assignment dnl in the first test, but most compilers will oblige with an error in the dnl second test. dnl dnl CF_CHECK_FUNCDECL(INCLUDES, FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN([CF_CHECK_FUNCDECL], [ AC_MSG_CHECKING([for $2 declaration]) AC_CACHE_VAL(ac_cv_func_decl_$2, [AC_TRY_COMPILE([$1], [#ifndef ${ac_func} extern int ${ac_func}(); #endif],[ AC_TRY_COMPILE([$1], [#ifndef ${ac_func} int (*p)() = ${ac_func}; #endif],[ eval "ac_cv_func_decl_$2=yes"],[ eval "ac_cv_func_decl_$2=no"])],[ eval "ac_cv_func_decl_$2=yes"])]) if eval "test \"`echo '$ac_cv_func_'decl_$2`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$3], , :, [$3]) else AC_MSG_RESULT(no) ifelse([$4], , , [$4 ])dnl fi ])dnl dnl --------------------------------------------------------------------------- dnl Check if functions are declared by including a set of include files. dnl and define DECL_XXX if not. dnl dnl CF_CHECK_FUNCDECLS(INCLUDES, FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) AC_DEFUN([CF_CHECK_FUNCDECLS], [for ac_func in $2 do CF_CHECK_FUNCDECL([$1], $ac_func, [ CF_UPPER(ac_tr_func,HAVE_$ac_func) AC_DEFINE_UNQUOTED($ac_tr_func) $3], [$4])dnl dnl [$3], dnl [ dnl CF_UPPER(ac_tr_func,DECL_$ac_func) dnl AC_DEFINE_UNQUOTED($ac_tr_func) $4])dnl done ])dnl dnl --------------------------------------------------------------------------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ changequote(,)dnl $1=`echo $2 | tr '[a-z]' '[A-Z]'` changequote([,])dnl ])dnl dnl --------------------------------------------------------------------------- mutt-1.5.21/m4/funcs.m40000644000175000017500000000131010770271152011407 00000000000000dnl XIPH_ macros are GPL, from http://svn.xiph.org/icecast/trunk/m4 dnl # XIPH_FUNC_VA_COPY # Test for implementation of va_copy, or define appropriately if missing AC_DEFUN([XIPH_FUNC_VA_COPY], [dnl AC_MSG_CHECKING([for va_copy]) AC_TRY_LINK([#include ], [va_list ap1, ap2; va_copy(ap1, ap2);], AC_MSG_RESULT([va_copy]), [dnl AH_TEMPLATE([va_copy], [define if va_copy is not available]) AC_TRY_LINK([#include ], [va_list ap1, ap2; __va_copy(ap1, ap2);], [dnl AC_DEFINE([va_copy], [__va_copy]) AC_MSG_RESULT([__va_copy])], [dnl AC_DEFINE([va_copy(dest,src)], [memcpy(&dest,&src,sizeof(va_list))]) AC_MSG_RESULT([memcpy]) ]) ]) ]) ])dnl XIPH_FUNC_VA_COPY mutt-1.5.21/m4/gettext.m40000644000175000017500000003506310770271152011771 00000000000000# Macro to add for using GNU gettext. # Ulrich Drepper , 1995. # # Slightly modified by Thomas Roessler # Updated to gettext-0.10.38 by Edmund Grimley Evans # Updated to gettext-0.10.40 by Andrew W. Nosenko # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License or the GNU Library General Public License but which still want # to provide support for the GNU gettext functionality. # Please note that the actual code of the GNU gettext library is covered # by the GNU Library General Public License, and the rest of the GNU # gettext package package is covered by the GNU General Public License. # They are *not* in the public domain. # serial 10 dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]). dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). Otherwise, a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. dnl LIBDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([MUTT_AM_WITH_NLS], [AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, AC_HELP_STRING([--disable-nls], [Do not use Native Language Support]), USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no INTLLIBS= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, AC_HELP_STRING([--with-included-gettext], [Use the GNU gettext library included here]), nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. CATOBJEXT=NONE dnl Add a version number to the cache macros. define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc]) define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl]) AC_CHECK_HEADER(libintl.h, [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include extern int _nl_msg_cat_cntr;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_LIBS="$LIBS" LIBS="$LIBS -lintl $LIBICONV" AC_TRY_LINK([#include extern int _nl_msg_cat_cntr;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) if test "$gt_cv_func_gnugettext_libintl" = "yes"; then dnl If iconv() is in a separate libiconv library, then anyone dnl linking with libintl{.a,.so} also needs to link with dnl libiconv. INTLLIBS="-lintl $LIBICONV" fi gt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) LIBS="$gt_save_LIBS" dnl Search for GNU msgfmt in the PATH. MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext in the PATH. MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) CATOBJEXT=.gmo fi ]) if test "$CATOBJEXT" = "NONE"; then dnl GNU gettext is not found in the C library. dnl Fall back on GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. INTLOBJS="\$(GETTOBJS)" MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) AC_SUBST(MSGFMT) BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes CATOBJEXT=.gmo INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then : ; else AC_MSG_RESULT( [found msgfmt program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi dnl We need to process the po/ directory. POSUB=po fi AC_OUTPUT_COMMANDS( [for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" fi ;; esac done]) dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(GMOFILES) AC_SUBST(INTLLIBS) AC_SUBST(INTLOBJS) AC_SUBST(POFILES) AC_SUBST(POSUB) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) ]) dnl Usage: Just like MUTT_AM_WITH_NLS, which see. AC_DEFUN([MUTT_AM_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([MUTT_jm_GLIBC21])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) MUTT_AM_ICONV MUTT_AM_LANGINFO_CODESET MUTT_AM_LC_MESSAGES MUTT_AM_WITH_NLS([$1],[$2],[$3]) if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) mutt-1.5.21/m4/glibc21.m40000644000175000017500000000103310770271152011516 00000000000000#serial 2 # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([MUTT_jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) mutt-1.5.21/m4/gpgme.m40000644000175000017500000002406410770271152011403 00000000000000# gpgme.m4 - autoconf macro to detect GPGME. # Copyright (C) 2002, 2003, 2004 g10 Code GmbH # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. AC_DEFUN([_AM_PATH_GPGME_CONFIG], [ AC_ARG_WITH(gpgme-prefix, AC_HELP_STRING([--with-gpgme-prefix=PFX], [prefix where GPGME is installed (optional)]), gpgme_config_prefix="$withval", gpgme_config_prefix="") if test "x$gpgme_config_prefix" != x ; then GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config" fi AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no) if test "$GPGME_CONFIG" != "no" ; then gpgme_version=`$GPGME_CONFIG --version` fi gpgme_version_major=`echo $gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` gpgme_version_minor=`echo $gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` gpgme_version_micro=`echo $gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` ]) dnl AM_PATH_GPGME([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS. dnl AC_DEFUN([AM_PATH_GPGME], [ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl tmp=ifelse([$1], ,1:0.4.2,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version) ok=no if test "$GPGME_CONFIG" != "no" ; then req_major=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_CFLAGS=`$GPGME_CONFIG --cflags` GPGME_LIBS=`$GPGME_CONFIG --libs` AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else GPGME_CFLAGS="" GPGME_LIBS="" AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi AC_SUBST(GPGME_CFLAGS) AC_SUBST(GPGME_LIBS) ]) dnl AM_PATH_GPGME_PTH([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgpgme and define GPGME_PTH_CFLAGS and GPGME_PTH_LIBS. dnl AC_DEFUN([AM_PATH_GPGME_PTH], [ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl tmp=ifelse([$1], ,1:0.4.2,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi AC_MSG_CHECKING(for GPGME Pth - version >= $min_gpgme_version) ok=no if test "$GPGME_CONFIG" != "no" ; then if `$GPGME_CONFIG --thread=pth 2> /dev/null` ; then req_major=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_PTH_CFLAGS=`$GPGME_CONFIG --thread=pth --cflags` GPGME_PTH_LIBS=`$GPGME_CONFIG --thread=pth --libs` AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else GPGME_PTH_CFLAGS="" GPGME_PTH_LIBS="" AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi AC_SUBST(GPGME_PTH_CFLAGS) AC_SUBST(GPGME_PTH_LIBS) ]) dnl AM_PATH_GPGME_PTHREAD([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS dnl and GPGME_PTHREAD_LIBS. dnl AC_DEFUN([AM_PATH_GPGME_PTHREAD], [ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl tmp=ifelse([$1], ,1:0.4.2,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi AC_MSG_CHECKING(for GPGME pthread - version >= $min_gpgme_version) ok=no if test "$GPGME_CONFIG" != "no" ; then if `$GPGME_CONFIG --thread=pthread 2> /dev/null` ; then req_major=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --thread=pthread --cflags` GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --thread=pthread --libs` AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else GPGME_PTHREAD_CFLAGS="" GPGME_PTHREAD_LIBS="" AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi AC_SUBST(GPGME_PTHREAD_CFLAGS) AC_SUBST(GPGME_PTHREAD_LIBS) ]) dnl AM_PATH_GPGME_GLIB([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgpgme-glib and define GPGME_GLIB_CFLAGS and GPGME_GLIB_LIBS. dnl AC_DEFUN([AM_PATH_GPGME_GLIB], [ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl tmp=ifelse([$1], ,1:0.4.2,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version) ok=no if test "$GPGME_CONFIG" != "no" ; then req_major=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_GLIB_CFLAGS=`$GPGME_CONFIG --glib --cflags` GPGME_GLIB_LIBS=`$GPGME_CONFIG --glib --libs` AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else GPGME_GLIB_CFLAGS="" GPGME_GLIB_LIBS="" AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi AC_SUBST(GPGME_GLIB_CFLAGS) AC_SUBST(GPGME_GLIB_LIBS) ]) mutt-1.5.21/m4/gssapi.m40000644000175000017500000000507310770271152011571 00000000000000# gssapi.m4: Find GSSAPI libraries in either Heimdal or MIT implementations # Brendan Cully 20010529 dnl MUTT_AM_PATH_GSSAPI(PREFIX) dnl Search for a GSSAPI implementation in the standard locations plus PREFIX, dnl if it is set and not "yes". dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found. dnl Defines GSSAPI_IMPL to "Heimdal", "MIT", or "OldMIT", or "none" if not found AC_DEFUN([MUTT_AM_PATH_GSSAPI], [ GSSAPI_PREFIX=[$]$1 GSSAPI_IMPL="none" saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" saved_LIBS="$LIBS" dnl First try krb5-config if test "$GSSAPI_PREFIX" != "yes" then krb5_path="$GSSAPI_PREFIX/bin" else krb5_path="$PATH" fi AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path) if test "$KRB5CFGPATH" != "none" then GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`" case "`$KRB5CFGPATH --version`" in "Kerberos 5 "*) GSSAPI_IMPL="MIT";; ?eimdal*) GSSAPI_IMPL="Heimdal";; *) GSSAPI_IMPL="Unknown";; esac else dnl No krb5-config, run the old code if test "$GSSAPI_PREFIX" != "yes" then GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" fi dnl New MIT kerberos V support AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [ GSSAPI_IMPL="MIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" ],, -lkrb5 -lk5crypto -lcom_err) dnl Heimdal kerberos V support if test "$GSSAPI_IMPL" = "none" then AC_CHECK_LIB(gssapi, gss_init_sec_context, [ GSSAPI_IMPL="Heimdal" GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err" ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err) fi dnl Old MIT Kerberos V dnl Note: older krb5 distributions use -lcrypto instead of dnl -lk5crypto, which collides with OpenSSL. One way of dealing dnl with that is to extract all objects from krb5's libcrypto dnl and from openssl's libcrypto into the same directory, then dnl to create a new libcrypto from these. if test "$GSSAPI_IMPL" = "none" then AC_CHECK_LIB(gssapi_krb5, g_order_init, [ GSSAPI_IMPL="OldMIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" ],, -lkrb5 -lcrypto -lcom_err) fi fi CPPFLAGS="$saved_CPPFLAGS" LDFLAGS="$saved_LDFLAGS" LIBS="$saved_LIBS" ]) mutt-1.5.21/m4/iconv.m40000644000175000017500000000441511051345464011421 00000000000000#serial 2 dnl From Bruno Haible. AC_DEFUN([MUTT_AM_ICONV], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_ARG_WITH([libiconv-prefix], AC_HELP_STRING([--with-libiconv-prefix@<:@=DIR@:>@], [Search for libiconv in DIR/include and DIR/lib]), [ for dir in `echo "$withval" | tr : ' '`; do if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi done ]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS -liconv" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi LIBICONV= if test "$am_cv_lib_iconv" = yes; then LIBICONV="-liconv" fi AC_SUBST(LIBICONV) ]) mutt-1.5.21/m4/lcmessage.m40000644000175000017500000000205710770271152012245 00000000000000# Check whether LC_MESSAGES is available in . # Ulrich Drepper , 1995. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License or the GNU Library General Public License but which still want # to provide support for the GNU gettext functionality. # Please note that the actual code of the GNU gettext library is covered # by the GNU Library General Public License, and the rest of the GNU # gettext package package is covered by the GNU General Public License. # They are *not* in the public domain. # serial 2 AC_DEFUN([MUTT_AM_LC_MESSAGES], [if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) mutt-1.5.21/m4/progtest.m40000644000175000017500000000324610770271152012152 00000000000000# Search path for a program which passes the given test. # Ulrich Drepper , 1996. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License or the GNU Library General Public License but which still want # to provide support for the GNU gettext functionality. # Please note that the actual code of the GNU gettext library is covered # by the GNU Library General Public License, and the rest of the GNU # gettext package package is covered by the GNU General Public License. # They are *not* in the public domain. # serial 2 dnl MUTT_AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([MUTT_AM_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) mutt-1.5.21/m4/types.m40000644000175000017500000000160411015335220011431 00000000000000dnl types.m4 dnl macros for type checks not covered by autoconf dnl MUTT_C99_INTTYPES dnl Brendan Cully dnl # MUTT_C99_INTTYPES # Check for C99 integer type definitions, or define if missing AC_DEFUN([MUTT_C99_INTTYPES], [dnl AC_CHECK_HEADERS([inttypes.h]) AC_CHECK_TYPE([uint32_t], [AC_DEFINE(HAVE_C99_INTTYPES, 1, [Define if you have the C99 integer types])]) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long)]) AH_VERBATIM([X_HAVE_C99_INTTYPES], [#ifndef HAVE_C99_INTTYPES # if SIZEOF_SHORT == 4 typedef unsigned short uint32_t; # elif SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long uint32_t; # endif # if SIZEOF_INT == 8 typedef unsigned int uint64_t; # elif SIZEOF_LONG == 8 typedef unsigned long uint64_t; # elif SIZEOF_LONG_LONG == 8 typedef unsigned long long uint64_t; # endif #endif ]) mutt-1.5.21/m4/README0000644000175000017500000000036010770271152010713 00000000000000These files are used by a program called aclocal (part of the GNU automake package). aclocal uses these files to create aclocal.m4 which is in turn used by autoconf to create the configure script at the the top level in this distribution. mutt-1.5.21/m4/Makefile.am0000644000175000017500000000014410770271152012067 00000000000000EXTRA_DIST = README dist-hook: for i in $(srcdir)/*.m4 ; do \ cp -f -p $$i $(distdir) ; \ done mutt-1.5.21/m4/Makefile.in0000644000175000017500000002457511435242564012122 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/curslib.m4 $(top_srcdir)/m4/funcdecl.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpgme.m4 \ $(top_srcdir)/m4/gssapi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/types.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DBX = @DBX@ DEBUGGER = @DEBUGGER@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOTLOCK_GROUP = @DOTLOCK_GROUP@ DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ DOTLOCK_TARGET = @DOTLOCK_TARGET@ DSLROOT = @DSLROOT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDB = @GDB@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GPGME_CFLAGS = @GPGME_CFLAGS@ GPGME_CONFIG = @GPGME_CONFIG@ GPGME_LIBS = @GPGME_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ ISPELL = @ISPELL@ KRB5CFGPATH = @KRB5CFGPATH@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBIMAP = @LIBIMAP@ LIBIMAPDEPS = @LIBIMAPDEPS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MUTTLIBS = @MUTTLIBS@ MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ MUTT_MD5 = @MUTT_MD5@ OBJEXT = @OBJEXT@ OPS = @OPS@ OSPCAT = @OSPCAT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGPAUX_TARGET = @PGPAUX_TARGET@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDB = @SDB@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ STRIP = @STRIP@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign m4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am dist-hook: for i in $(srcdir)/*.m4 ; do \ cp -f -p $$i $(distdir) ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mutt-1.5.21/README0000644000175000017500000000173010770271235010377 00000000000000README for mutt-1.5 =================== When updating mutt from an earlier release or from Mercurial, please make sure to read the compatibility notes in ``UPDATING''. Older changes between mutt-1.2 and mutt-1.4 are listed in NEWS. If you got the mutt source code from the public Mercurial repository (http://dev.mutt.org/hg/mutt/), please read doc/devel-notes.txt to make sure that you have a complete development environment. Installation instructions are detailed in ``INSTALL''. The user manual is in doc/manual.txt. PGP users should read doc/PGP-Notes.txt. Before you start hacking on mutt, read doc/devel-notes.txt. Before applying patches to mutt, read doc/applying-patches.txt. Please, read these files, as they will save you from asking FAQs. For more information, see the Mutt home page: http://www.mutt.org/ The primary distribution points for Mutt is: ftp://ftp.mutt.org/pub/mutt A list of mirror sites can be found under . mutt-1.5.21/configure.ac0000644000175000017500000012560411434772215012016 00000000000000dnl Process this file with autoconf to produce a configure script. dnl !!! WHEN ADDING NEW CONFIGURE TESTS, PLEASE ADD CODE TO MAIN.C !!! dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED !!! AC_PREREQ([2.54]) AC_INIT([mutt.h]) AM_CONFIG_HEADER([config.h]) mutt_cv_version=`cat $srcdir/VERSION` AM_INIT_AUTOMAKE(mutt, $mutt_cv_version) AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/VERSION']) AC_GNU_SOURCE ALL_LINGUAS="de eu ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg ga" AC_CANONICAL_HOST AC_MSG_CHECKING([for prefix]) if test x$prefix = xNONE; then mutt_cv_prefix=$ac_default_prefix else mutt_cv_prefix=$prefix fi AC_MSG_RESULT($mutt_cv_prefix) AC_PROG_CC AC_ISC_POSIX AM_C_PROTOTYPES if test "x$U" != "x"; then AC_MSG_ERROR(Compiler not ANSI compliant) fi AC_PROG_CPP AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_TOOL(AR, ar, ar) AC_C_INLINE AC_C_CONST AC_C_BIGENDIAN AC_SYS_LARGEFILE AC_FUNC_FSEEKO AC_CHECK_SIZEOF(off_t) AC_PATH_PROG(DBX, dbx, no) AC_PATH_PROG(GDB, gdb, no) AC_PATH_PROG(SDB, sdb, no) if test $GDB != no ; then DEBUGGER=$GDB elif test $DBX != no ; then DEBUGGER=$DBX elif test $SDB != no ; then DEBUGGER=$SDB else DEBUGGER=no fi AC_SUBST([DEBUGGER]) AH_TEMPLATE([sig_atomic_t], [/* Define to `int' if doesn't define.]) AH_TEMPLATE([HAVE_START_COLOR], [Define if you have start_color, as a function or macro.]) AH_TEMPLATE([HAVE_TYPEAHEAD], [Define if you have typeahead, as a function or macro.]) AH_TEMPLATE([HAVE_BKGDSET], [Define if you have bkgdset, as a function or macro.]) AH_TEMPLATE([HAVE_CURS_SET], [Define if you have curs_set, as a function or macro.]) AH_TEMPLATE([HAVE_META], [Define if you have meta, as a function or macro.]) AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS], [Define if you have use_default_colors, as a function or macro.]) AH_TEMPLATE([HAVE_RESIZETERM], [Define if you have resizeterm, as a function or macro.]) AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T], [Some systems declare sig_atomic_t as volatile, some others -- no. This define will have value `sig_atomic_t' or `volatile sig_atomic_t' accordingly.]) AH_TEMPLATE([ICONV_NONTRANS], [Define as 1 if iconv() only converts exactly and we should treat all return values other than (size_t)(-1) as equivalent.]) AH_BOTTOM([/* fseeko portability defines */ #ifdef HAVE_FSEEKO # define LOFF_T off_t # if HAVE_C99_INTTYPES && HAVE_INTTYPES_H # if SIZEOF_OFF_T == 8 # define OFF_T_FMT "%" PRId64 # else # define OFF_T_FMT "%" PRId32 # endif # else # if (SIZEOF_OFF_T == 8) && (SIZEOF_LONG == 4) # define OFF_T_FMT "%lld" # else # define OFF_T_FMT "%ld" # endif # endif #else # define LOFF_T long # define fseeko fseek # define ftello ftell # define OFF_T_FMT "%ld" #endif ]) MUTT_C99_INTTYPES AC_TYPE_LONG_LONG_INT ac_aux_path_sendmail=/usr/sbin:/usr/lib AC_PATH_PROG(SENDMAIL, sendmail, /usr/sbin/sendmail, $PATH:$ac_aux_path_sendmail) AC_DEFINE_UNQUOTED(SENDMAIL,"$ac_cv_path_SENDMAIL", [Where to find sendmail on your system.]) OPS='$(srcdir)/OPS' AC_MSG_CHECKING([whether to build with GPGME support]) AC_ARG_ENABLE(gpgme, AC_HELP_STRING([--enable-gpgme], [Enable GPGME support]), [ if test x$enableval = xyes; then enable_gpgme=yes fi ]) if test x"$enable_gpgme" = xyes; then AC_MSG_RESULT(yes) AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1, [Defined, if GPGME support is enabled]), [gpgme_found=no]) if test x"$gpgme_found" = xno; then AC_MSG_ERROR([*** GPGME not found ***]) else AM_PATH_GPGME(1.1.1, AC_DEFINE(HAVE_GPGME_PKA_TRUST, 1, [Define if GPGME supports PKA])) #needed to get GPGME_LIBS and al correctly AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1, [Define if you use GPGME to support OpenPGP])) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS crypt-gpgme.o crypt-mod-pgp-gpgme.o crypt-mod-smime-gpgme.o" fi else AC_MSG_RESULT([no]) fi AC_ARG_ENABLE(pgp, AC_HELP_STRING([--disable-pgp], [Disable PGP support]), [ if test x$enableval = xno ; then have_pgp=no fi ]) if test x$have_pgp != xno ; then AC_DEFINE(CRYPT_BACKEND_CLASSIC_PGP,1, [Define if you want classic PGP support.]) PGPAUX_TARGET="pgpring\$(EXEEXT) pgpewrap\$(EXEEXT)" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o crypt-mod-pgp-classic.o" fi AC_ARG_ENABLE(smime, AC_HELP_STRING([--disable-smime], [Disable SMIME support]), [ if test x$enableval = xno ; then have_smime=no fi ]) if test x$have_smime != xno ; then AC_DEFINE(CRYPT_BACKEND_CLASSIC_SMIME, 1, [Define if you want clasic S/MIME support.]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o crypt-mod-smime-classic.o" SMIMEAUX_TARGET="smime_keys" fi AC_ARG_WITH(mixmaster, AC_HELP_STRING([--with-mixmaster@<:@=PATH@:>@], [Include Mixmaster support]), [if test "$withval" != no then if test -x "$withval" then MIXMASTER="$withval" else MIXMASTER="mixmaster" fi OPS="$OPS \$(srcdir)/OPS.MIX" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o" AC_DEFINE_UNQUOTED(MIXMASTER,"$MIXMASTER", [Where to find mixmaster on your system.]) fi]) # We now require all OPS OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT " AC_SUBST([OPS]) AC_SUBST(PGPAUX_TARGET) AC_SUBST(SMIMEAUX_TARGET) AC_PATH_PROG(ISPELL, ispell, no) if test $ISPELL != no; then AC_DEFINE_UNQUOTED(ISPELL,"$ISPELL",[ Where to find ispell on your system. ]) fi AC_ARG_WITH(slang, AC_HELP_STRING([--with-slang@<:@=DIR@:>@], [Use S-Lang instead of ncurses]), [AC_CACHE_CHECK([if this is a BSD system], mutt_cv_bsdish, [AC_TRY_RUN([#include #include main () { #ifdef BSD exit (0); #else exit (1); #endif }], mutt_cv_bsdish=yes, mutt_cv_bsdish=no, mutt_cv_bsdish=no)]) AC_MSG_CHECKING(for S-Lang) if test $withval = yes; then if test -d $srcdir/../slang; then mutt_cv_slang=$srcdir/../slang/src CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" else if test -d $mutt_cv_prefix/include/slang; then CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang" elif test -d /usr/include/slang; then CPPFLAGS="$CPPFLAGS -I/usr/include/slang" fi mutt_cv_slang=yes fi else dnl ---Check to see if $withval is a source directory if test -f $withval/src/slang.h; then mutt_cv_slang=$withval/src CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" else dnl ---Must be installed somewhere mutt_cv_slang=$withval if test -d $withval/include/slang; then CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" elif test -d $withval/include; then CPPFLAGS="$CPPFLAGS -I${withval}/include" fi LDFLAGS="$LDFLAGS -L${withval}/lib" fi fi AC_MSG_RESULT($mutt_cv_slang) if test $mutt_cv_bsdish = yes; then AC_CHECK_LIB(termlib, main) fi AC_DEFINE(USE_SLANG_CURSES,1, [ Define if you compile with SLang instead of curses/ncurses. ]) AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" dnl --- now that we've found it, check the link AC_CHECK_LIB(slang, SLtt_get_terminfo, [MUTTLIBS="$MUTTLIBS -lslang -lm"], [AC_MSG_ERROR(unable to compile. check config.log)], -lm) ], [mutt_cv_curses=/usr AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses=DIR], [Where ncurses is installed]), [if test $withval != yes; then mutt_cv_curses=$withval fi if test x$mutt_cv_curses != x/usr; then LDFLAGS="$LDFLAGS -L${mutt_cv_curses}/lib" CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include" fi]) AC_CHECK_FUNC(initscr,,[ cf_ncurses="ncurses" for lib in ncurses ncursesw do AC_CHECK_LIB($lib, waddnwstr, [cf_ncurses="$lib"; break]) done AC_CHECK_LIB($cf_ncurses, initscr, [MUTTLIBS="$MUTTLIBS -l$cf_ncurses" if test "$cf_ncurses" = ncursesw; then AC_CHECK_HEADERS(ncursesw/ncurses.h,[cf_cv_ncurses_header="ncursesw/ncurses.h"]) else AC_CHECK_HEADERS(ncurses/ncurses.h,[cf_cv_ncurses_header="ncurses/ncurses.h"], [AC_CHECK_HEADERS(ncurses.h,[cf_cv_ncurses_header="ncurses.h"])]) fi], [CF_CURSES_LIBS]) ]) old_LIBS="$LIBS" LIBS="$LIBS $MUTTLIBS" CF_CHECK_FUNCDECLS([#include <${cf_cv_ncurses_header-curses.h}>], [start_color typeahead bkgdset curs_set meta use_default_colors resizeterm]) if test "$ac_cv_func_decl_start_color" = yes; then AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ]) fi if test "$ac_cv_func_decl_resizeterm" = yes; then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" fi LIBS="$old_LIBS" ]) AC_HEADER_STDC AC_CHECK_HEADERS(stdarg.h sys/ioctl.h ioctl.h sysexits.h) AC_CHECK_HEADERS(sys/time.h sys/resource.h) AC_CHECK_HEADERS(unix.h) AC_CHECK_FUNCS(setrlimit getsid) AC_TYPE_SIGNAL AC_MSG_CHECKING(for sig_atomic_t in signal.h) AC_EGREP_HEADER(sig_atomic_t,signal.h, [ ac_cv_type_sig_atomic_t=yes; AC_EGREP_HEADER(volatile.*sig_atomic_t, signal.h, [ is_sig_atomic_t_volatile=yes; AC_MSG_RESULT([yes, volatile]) ], [ is_sig_atomic_t_volatile=no; AC_MSG_RESULT([yes, non volatile]) ]) ], [ AC_MSG_RESULT(no) AC_CHECK_TYPE(sig_atomic_t, int) is_sig_atomic_t_volatile=no ]) if test $is_sig_atomic_t_volatile = 'yes' then AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t) else AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t]) fi AC_DECL_SYS_SIGLIST AC_TYPE_PID_T AC_CHECK_TYPE(ssize_t, int) AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror) AC_REPLACE_FUNCS([setenv strcasecmp strdup strsep strtok_r wcscasecmp]) AC_REPLACE_FUNCS([strcasestr mkdtemp]) AC_CHECK_FUNC(getopt) if test $ac_cv_func_getopt = yes; then AC_CHECK_HEADERS(getopt.h) fi SNPRINTFOBJS="" AC_CHECK_FUNC(snprintf, [mutt_cv_func_snprintf=yes], [mutt_cv_func_snprintf=no]) AC_CHECK_FUNC(vsnprintf, [mutt_cv_func_vsnprintf=yes], [mutt_cv_func_vsnprintf=no]) if test $mutt_cv_func_snprintf = yes; then AC_CACHE_CHECK([whether your system's snprintf is C99 compliant], [mutt_cv_c99_snprintf], AC_TRY_RUN([ #include int main() { changequote(, )dnl char buf[8]; int len = snprintf(buf, 4, "1234567"); return (len != 7 || buf[3] != '\0'); changequote([, ])dnl } ], mutt_cv_c99_snprintf=yes, mutt_cv_c99_snprintf=no, mutt_cv_c99_snprintf=no)) else mutt_cv_c99_snprintf=no fi if test $mutt_cv_func_vsnprintf = yes; then AC_CACHE_CHECK([whether your system's vsnprintf is C99 compliant], [mutt_cv_c99_vsnprintf], AC_TRY_RUN([ #include #include int foo(const char *fmt, ...) { changequote(, )dnl char buf[8]; int len; va_list ap; va_start(ap, fmt); len = vsnprintf(buf, 4, fmt, ap); va_end(ap); return (len != 7 || buf[3] != '\0'); changequote([, ])dnl } int main() { return foo("%s", "1234567"); } ], mutt_cv_c99_vsnprintf=yes, mutt_cv_c99_vsnprintf=no, mutt_cv_c99_vsnprintf=no)) else mutt_cv_c99_vsnprintf=no fi if test $mutt_cv_c99_snprintf = yes; then AC_DEFINE(HAVE_SNPRINTF, 1, [ Define to 1 if you have a C99 compliant snprintf function. ]) fi if test $mutt_cv_c99_vsnprintf = yes; then AC_DEFINE(HAVE_VSNPRINTF, 1, [ Define to 1 if you have a C99 compliant vsnprintf function. ]) fi if test $mutt_cv_c99_snprintf = no -o $mutt_cv_c99_vsnprintf = no; then AC_LIBOBJ(snprintf) fi XIPH_FUNC_VA_COPY dnl SCO uses chsize() instead of ftruncate() AC_CHECK_FUNCS(ftruncate, , [AC_CHECK_LIB(x, chsize)]) dnl SCO has strftime() in libintl AC_CHECK_FUNCS(strftime, , [AC_CHECK_LIB(intl, strftime)]) dnl AIX may not have fchdir() AC_CHECK_FUNCS(fchdir, , [mutt_cv_fchdir=no]) AC_ARG_WITH(regex, AC_HELP_STRING([--with-regex], [Use the GNU regex library]), [mutt_cv_regex=yes], [AC_CHECK_FUNCS(regcomp, mutt_cv_regex=no, mutt_cv_regex=yes)]) if test $mutt_cv_regex = no ; then AC_CACHE_CHECK([whether your system's regexp library is completely broken], [mutt_cv_regex_broken], AC_TRY_RUN([ #include #include main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }], mutt_cv_regex_broken=no, mutt_cv_regex_broken=yes, mutt_cv_regex_broken=yes)) if test $mutt_cv_regex_broken = yes ; then echo "Using the included GNU regex instead." >&AC_FD_MSG mutt_cv_regex=yes fi fi if test $mutt_cv_regex = yes; then AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex.c. ]) AC_LIBOBJ(regex) fi AC_ARG_WITH(homespool, AC_HELP_STRING([--with-homespool@<:@=FILE@:>@], [File in user's directory where new mail is spooled]), with_homespool=${withval}) if test x$with_homespool != x; then if test $with_homespool = yes; then with_homespool=mailbox fi AC_DEFINE_UNQUOTED(MAILPATH,"$with_homespool",[ Where new mail is spooled. ]) AC_DEFINE(HOMESPOOL,1, [Is mail spooled to the user's home directory? If defined, MAILPATH should be set to the filename of the spool mailbox relative the the home directory. use: configure --with-homespool=FILE]) AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) mutt_cv_setgid=no else AC_ARG_WITH(mailpath, AC_HELP_STRING([--with-mailpath=DIR], [Directory where spool mailboxes are located]), [mutt_cv_mailpath=$withval], [ AC_CACHE_CHECK(where new mail is stored, mutt_cv_mailpath, [mutt_cv_mailpath=no if test -d /var/mail; then mutt_cv_mailpath=/var/mail elif test -d /var/spool/mail; then mutt_cv_mailpath=/var/spool/mail elif test -d /usr/spool/mail; then mutt_cv_mailpath=/usr/spool/mail elif test -d /usr/mail; then mutt_cv_mailpath=/usr/mail fi]) ]) if test "$mutt_cv_mailpath" = no; then AC_MSG_ERROR("Could not determine where new mail is stored.") fi AC_DEFINE_UNQUOTED(MAILPATH,"$mutt_cv_mailpath",[ Where new mail is spooled. ]) AC_CACHE_CHECK(if $mutt_cv_mailpath is world writable, mutt_cv_worldwrite, [AC_TRY_RUN([#include #include #include int main (int argc, char **argv) { struct stat s; stat ("$mutt_cv_mailpath", &s); if (s.st_mode & S_IWOTH) exit (0); exit (1); }], mutt_cv_worldwrite=yes, mutt_cv_worldwrite=no, mutt_cv_worldwrite=no)]) mutt_cv_setgid=no if test $mutt_cv_worldwrite = yes; then AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) else AC_CACHE_CHECK(if $mutt_cv_mailpath is group writable, mutt_cv_groupwrite, [AC_TRY_RUN([#include #include #include int main (int argc, char **argv) { struct stat s; stat ("$mutt_cv_mailpath", &s); if (s.st_mode & S_IWGRP) exit (0); exit (1); }], mutt_cv_groupwrite=yes, mutt_cv_groupwrite=no, mutt_cv_groupwrite=no)]) if test $mutt_cv_groupwrite = yes; then AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) AC_DEFINE(USE_SETGID,1,[ Define if mutt should run setgid "mail". ]) mutt_cv_setgid=yes fi fi fi AC_ARG_ENABLE(external_dotlock, AC_HELP_STRING([--enable-external-dotlock], [Force use of an external dotlock program]), [mutt_cv_external_dotlock="$enableval"]) if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \ || test "x$mutt_cv_external_dotlock" = "xyes" then AC_DEFINE(DL_STANDALONE,1,[ Define if you want to use an external dotlocking program. ]) DOTLOCK_TARGET="mutt_dotlock\$(EXEEXT)" else MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o" fi AC_SUBST(DOTLOCK_TARGET) dnl autoconf <2.60 compatibility if test -z "$datarootdir"; then datarootdir='${prefix}/share' fi AC_SUBST([datarootdir]) AC_MSG_CHECKING(where to put the documentation) AC_ARG_WITH(docdir, AC_HELP_STRING([--with-docdir=PATH], [Specify where to put the documentation]), [mutt_cv_docdir=$withval], [mutt_cv_docdir='${datarootdir}/doc/mutt']) AC_MSG_RESULT($mutt_cv_docdir) if test -z "$docdir" -o -n "$with_docdir" then docdir=$mutt_cv_docdir fi AC_SUBST(docdir) if test x$mutt_cv_setgid = xyes; then DOTLOCK_GROUP='mail' DOTLOCK_PERMISSION=2755 else DOTLOCK_GROUP='' DOTLOCK_PERMISSION=755 fi AC_SUBST(DOTLOCK_GROUP) AC_SUBST(DOTLOCK_PERMISSION) AC_ARG_WITH(domain, AC_HELP_STRING([--with-domain=DOMAIN], [Specify your DNS domain name]), [if test $withval != yes; then if test $withval != no; then AC_DEFINE_UNQUOTED(DOMAIN,"$withval",[ Define your domain name. ]) fi fi]) need_socket="no" dnl -- socket dependencies -- AC_ARG_ENABLE(pop, AC_HELP_STRING([--enable-pop], [Enable POP3 support]), [ if test x$enableval = xyes ; then AC_DEFINE(USE_POP,1,[ Define if you want support for the POP3 protocol. ]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o" need_pop="yes" need_socket="yes" need_md5="yes" fi ]) AC_ARG_ENABLE(imap, AC_HELP_STRING([--enable-imap], [Enable IMAP support]), [ if test x$enableval = xyes ; then AC_DEFINE(USE_IMAP,1,[ Define if you want support for the IMAP protocol. ]) LIBIMAP="-Limap -limap" LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a" need_imap="yes" need_socket="yes" need_md5="yes" fi ]) AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes) AC_ARG_ENABLE(smtp, AC_HELP_STRING([--enable-smtp], [include internal SMTP relay support]), [if test $enableval = yes; then AC_DEFINE(USE_SMTP, 1, [Include internal SMTP relay support]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smtp.o" need_socket="yes" fi]) if test x"$need_imap" = xyes -o x"$need_pop" = xyes ; then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS bcache.o" fi dnl -- end socket dependencies -- if test "$need_socket" = "yes" then AC_CHECK_HEADERS([sys/select.h]) AC_MSG_CHECKING([for socklen_t]) AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]) AC_DEFINE(socklen_t,int, [ Define to 'int' if doesn't have it. ])) AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent)) AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt)) AC_CHECK_FUNCS(getaddrinfo) AC_DEFINE(USE_SOCKET,1, [ Include code for socket support. Set automatically if you enable POP3 or IMAP ]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o" fi dnl -- imap dependencies -- AC_ARG_WITH(gss, AC_HELP_STRING([--with-gss@<:@=PFX@:>@], [Compile in GSSAPI authentication for IMAP]), gss_prefix="$withval", gss_prefix="no") if test "$gss_prefix" != "no" then if test "$need_imap" = "yes" then MUTT_AM_PATH_GSSAPI(gss_prefix) AC_MSG_CHECKING(GSSAPI implementation) AC_MSG_RESULT($GSSAPI_IMPL) if test "$GSSAPI_IMPL" = "none" then AC_CACHE_SAVE AC_MSG_RESULT([GSSAPI libraries not found]) fi if test "$GSSAPI_IMPL" = "Heimdal" then AC_DEFINE(HAVE_HEIMDAL,1,[ Define if your GSSAPI implementation is Heimdal ]) fi CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS" AC_DEFINE(USE_GSS,1,[ Define if you have GSSAPI libraries available ]) need_gss="yes" else AC_MSG_WARN([GSS was requested but IMAP is not enabled]) fi fi AM_CONDITIONAL(USE_GSS, test x$need_gss = xyes) dnl -- end imap dependencies -- AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl@<:@=PFX@:>@], [Enable TLS support using OpenSSL]), [ if test "$with_ssl" != "no" then if test "$need_socket" != "yes"; then AC_MSG_WARN([SSL support is only useful with POP, IMAP or SMTP support]) else if test "$with_ssl" != "yes" then LDFLAGS="$LDFLAGS -L$withval/lib" CPPFLAGS="$CPPFLAGS -I$withval/include" fi saved_LIBS="$LIBS" crypto_libs="" AC_CHECK_LIB(z, deflate, [crypto_libs=-lz]) AC_CHECK_LIB(crypto, X509_new, [crypto_libs="-lcrypto $crypto_libs"],, [$crypto_libs]) AC_CHECK_LIB(ssl, SSL_new,, AC_MSG_ERROR([Unable to find SSL library]), [$crypto_libs]) LIBS="$LIBS $crypto_libs" AC_CHECK_FUNCS(RAND_status RAND_egd) AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ]) AC_DEFINE(USE_SSL_OPENSSL,1,[ Define if you want support for SSL via OpenSSL. ]) LIBS="$saved_LIBS" MUTTLIBS="$MUTTLIBS -lssl $crypto_libs" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o" need_ssl=yes fi fi ]) AC_ARG_WITH([gnutls], AC_HELP_STRING([--with-gnutls@<:@=PFX@:>@], [enable TLS support using gnutls]), [gnutls_prefix="$withval"], [gnutls_prefix="no"]) if test "$gnutls_prefix" != "no" && test x"$need_ssl" != xyes then if test "$need_socket" != "yes" then AC_MSG_WARN([SSL support is only useful with POP, IMAP or SMTP support]) else if test "$gnutls_prefix" != "yes" then LDFLAGS="$LDFLAGS -L$gnutls_prefix/lib" CPPFLAGS="$CPPFLAGS -I$gnutls_prefix/include" fi saved_LIBS="$LIBS" AC_CHECK_LIB(gnutls, gnutls_check_version, [dnl GNUTLS found AC_CHECK_DECLS([GNUTLS_VERIFY_DISABLE_TIME_CHECKS], [], [], [[#include ]]) LIBS="$saved_LIBS" MUTTLIBS="$MUTTLIBS -lgnutls" AC_DEFINE(USE_SSL, 1, [ Define if you want support for SSL. ]) AC_DEFINE(USE_SSL_GNUTLS, 1, [ Define if you want support for SSL via GNUTLS. ]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_gnutls.o" need_ssl=yes], [AC_MSG_ERROR([could not find libgnutls])]) fi fi AM_CONDITIONAL(USE_SSL, test x$need_ssl = xyes) AC_ARG_WITH(sasl, AC_HELP_STRING([--with-sasl@<:@=PFX@:>@], [Use SASL network security library]), [ if test "$with_sasl" != "no" then if test "$need_socket" != "yes" then AC_MSG_ERROR([SASL support is only useful with POP or IMAP support]) fi if test "$with_sasl" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_sasl/include" LDFLAGS="$LDFLAGS -L$with_sasl/lib" fi saved_LIBS="$LIBS" LIBS= # OpenSolaris provides a SASL2 interface in libsasl sasl_libs="sasl2 sasl" AC_SEARCH_LIBS(sasl_encode64, [$sasl_libs],, AC_MSG_ERROR([could not find sasl lib]),) MUTTLIBS="$MUTTLIBS $LIBS" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" LIBS="$saved_LIBS" AC_DEFINE(USE_SASL,1, [ Define if want to use the SASL library for POP/IMAP authentication. ]) need_sasl=yes fi ]) AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes) dnl -- end socket -- AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [Enable debugging support]), [ if test x$enableval = xyes ; then AC_DEFINE(DEBUG,1,[ Define to enable debugging info. ]) fi ]) AC_ARG_ENABLE(flock, AC_HELP_STRING([--enable-flock], [Use flock() to lock files]), [if test $enableval = yes; then AC_DEFINE(USE_FLOCK,1, [ Define to use flock() to lock mailboxes. ]) fi]) mutt_cv_fcntl=yes AC_ARG_ENABLE(fcntl, AC_HELP_STRING([--disable-fcntl], [Do NOT use fcntl() to lock files]), [if test $enableval = no; then mutt_cv_fcntl=no; fi]) if test $mutt_cv_fcntl = yes; then AC_DEFINE(USE_FCNTL,1, [ Define to use fcntl() to lock folders. ]) fi AC_MSG_CHECKING(whether struct dirent defines d_ino) ac_cv_dirent_d_ino=no AC_TRY_LINK([#include ],[struct dirent dp; (void)dp.d_ino],[ac_cv_dirent_d_ino=yes]) if test x$ac_cv_dirent_d_ino = xyes ; then AC_DEFINE(HAVE_DIRENT_D_INO,1, [Define to 1 if your system has the dirent::d_ino member]) fi AC_MSG_RESULT($ac_cv_dirent_d_ino) mutt_cv_warnings=yes AC_ARG_ENABLE(warnings, AC_HELP_STRING([--disable-warnings], [Turn off compiler warnings (not recommended)]), [if test $enableval = no; then mutt_cv_warnings=no fi]) if test x$GCC = xyes && test $mutt_cv_warnings = yes; then CFLAGS="-Wall -pedantic -Wno-long-long $CFLAGS" fi AC_ARG_ENABLE(nfs-fix, AC_HELP_STRING([--enable-nfs-fix], [Work around an NFS with broken attributes caching]), [if test x$enableval = xyes; then AC_DEFINE(NFS_ATTRIBUTE_HACK,1, [Define if you have problems with mutt not detecting new/old mailboxes over NFS. Some NFS implementations incorrectly cache the attributes of small files.]) fi]) AC_ARG_ENABLE(mailtool, AC_HELP_STRING([--enable-mailtool], [Enable Sun mailtool attachments support]), [if test x$enableval = xyes; then AC_DEFINE(SUN_ATTACHMENT,1,[ Define to enable Sun mailtool attachments support. ]) fi]) AC_ARG_ENABLE(locales-fix, AC_HELP_STRING([--enable-locales-fix], [The result of isprint() is unreliable]), [if test x$enableval = xyes; then AC_DEFINE(LOCALES_HACK,1,[ Define if the result of isprint() is unreliable. ]) fi]) AC_ARG_WITH(exec-shell, AC_HELP_STRING([--with-exec-shell=SHELL], [Specify alternate shell (ONLY if /bin/sh is broken)]), [if test $withval != yes; then AC_DEFINE_UNQUOTED(EXECSHELL, "$withval", [program to use for shell commands]) else AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh") fi], [AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")]) AC_ARG_ENABLE(exact-address, AC_HELP_STRING([--enable-exact-address], [Enable regeneration of email addresses]), [if test $enableval = yes; then AC_DEFINE(EXACT_ADDRESS,1, [Enable exact regeneration of email addresses as parsed? NOTE: this requires significant more memory when defined.]) fi]) dnl -- start cache -- db_found=no db_requested=auto AC_ARG_ENABLE(hcache, AC_HELP_STRING([--enable-hcache], [Enable header caching])) AC_ARG_WITH(tokyocabinet, AC_HELP_STRING([--without-tokyocabinet], [Don't use tokyocabinet even if it is available])) AC_ARG_WITH(qdbm, AC_HELP_STRING([--without-qdbm], [Don't use qdbm even if it is available])) AC_ARG_WITH(gdbm, AC_HELP_STRING([--without-gdbm], [Don't use gdbm even if it is available])) AC_ARG_WITH(bdb, AC_HELP_STRING([--with-bdb@<:@=DIR@:>@], [Use BerkeleyDB4 if gdbm is not available])) db_found=no if test x$enable_hcache = xyes then AC_DEFINE(USE_HCACHE, 1, [Enable header caching]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache.o" OLDCPPFLAGS="$CPPFLAGS" OLDLDFLAGS="$LDFLAGS" OLDLIBS="$LIBS" need_md5="yes" if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "no" then db_requested=tc fi if test -n "$with_qdbm" && test "$with_qdbm" != "no" then if test "$db_requested" != "auto" then AC_MSG_ERROR([more than one header cache engine requested.]) else db_requested=qdbm fi fi if test -n "$with_gdbm" && test "$with_gdbm" != "no" then if test "$db_requested" != "auto" then AC_MSG_ERROR([more than one header cache engine requested.]) else db_requested=gdbm fi fi if test -n "$with_bdb" && test "$with_bdb" != "no" then if test "$db_requested" != "auto" then AC_MSG_ERROR([more than one header cache engine requested.]) else db_requested=bdb fi fi dnl -- Tokyo Cabinet -- if test "$with_tokyocabinet" != "no" \ && test "$db_requested" = auto -o "$db_requested" = tc then if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_tokyocabinet/include" LDFLAGS="$LDFLAGS -L$with_tokyocabinet/lib" fi AC_CHECK_HEADER(tcbdb.h, AC_CHECK_LIB(tokyocabinet, tcbdbopen, [MUTTLIBS="$MUTTLIBS -ltokyocabinet" AC_DEFINE(HAVE_TC, 1, [Tokyo Cabinet Support]) db_found=tc], [CPPFLAGS="$OLDCPPFLAGS" LDFLAGS="$OLDLDFLAGS"])) if test "$db_requested" != auto && test "$db_found" != "$db_requested" then AC_MSG_ERROR([Tokyo Cabinet could not be used. Check config.log for details.]) fi fi dnl -- QDBM -- if test "$with_qdbm" != "no" && test $db_found = no \ && test "$db_requested" = auto -o "$db_requested" = qdbm then if test -n "$with_qdbm" && test "$with_qdbm" != "yes" then if test -d $with_qdbm/include/qdbm; then CPPFLAGS="$CPPFLAGS -I$with_qdbm/include/qdbm" else CPPFLAGS="$CPPFLAGS -I$with_qdbm/include" fi LDFLAGS="$LDFLAGS -L$with_qdbm/lib" else if test -d /usr/include/qdbm; then CPPFLAGS="$CPPFLAGS -I/usr/include/qdbm" fi fi saved_LIBS="$LIBS" AC_CHECK_HEADERS(villa.h) AC_CHECK_LIB(qdbm, vlopen, [MUTTLIBS="$MUTTLIBS -lqdbm" AC_DEFINE(HAVE_QDBM, 1, [QDBM Support]) db_found=qdbm], [CPPFLAGS="$OLDCPPFLAGS" LDFLAGS="$OLDLDFLAGS"]) LIBS="$saved_LIBS" if test "$db_requested" != auto && test "$db_found" != "$db_requested" then AC_MSG_ERROR([QDBM could not be used. Check config.log for details.]) fi fi dnl -- GDBM -- if test x$with_gdbm != xno && test $db_found = no \ && test "$db_requested" = auto -o "$db_requested" = gdbm then if test "$with_gdbm" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_gdbm/include" LDFLAGS="$LDFLAGS -L$with_gdbm/lib" fi saved_LIBS="$LIBS" LIBS="$LIBS -lgdbm" AC_CACHE_CHECK(for gdbm_open, ac_cv_gdbmopen,[ ac_cv_gdbmopen=no AC_TRY_LINK([#include ],[gdbm_open(0,0,0,0,0);],[ac_cv_gdbmopen=yes]) ]) LIBS="$saved_LIBS" if test "$ac_cv_gdbmopen" = yes then AC_DEFINE(HAVE_GDBM, 1, [GDBM Support]) MUTTLIBS="$MUTTLIBS -lgdbm" db_found=gdbm fi if test "$db_requested" != auto && test "$db_found" != "$db_requested" then AC_MSG_ERROR([GDBM could not be used. Check config.log for details.]) fi fi dnl -- BDB -- ac_bdb_prefix="$with_bdb" if test x$ac_bdb_prefix != xno && test $db_found = no then if test x$ac_bdb_prefix = xyes || test x$ac_bdb_prefix = x then ac_bdb_prefix="$mutt_cv_prefix /opt/csw/bdb4 /opt /usr/local /usr" fi for d in $ac_bdb_prefix; do bdbpfx="$bdbpfx $d" for v in BerkeleyDB.4.3 BerkeleyDB.4.2 BerkeleyDB.4.1; do bdbpfx="$bdbpfx $d/$v" done done BDB_VERSIONS="db-4 db4 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db ''" AC_MSG_CHECKING([for BerkeleyDB > 4.0]) for d in $bdbpfx; do BDB_INCLUDE_DIR="" BDB_LIB_DIR="" for v in / $BDB_VERSIONS; do if test -r "$d/include/$v/db.h"; then BDB_INCLUDE_DIR="$d/include/$v" for bdblibdir in "$d/lib/$v" "$d/lib"; do test -d "$bdblibdir" || continue BDB_LIB_DIR="$bdblibdir" for l in `echo $BDB_VERSIONS`; do CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR" LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$l" AC_TRY_LINK([ #include #include ],[ DB *db = NULL; db->open(db,NULL,NULL,NULL,0,0,0); ],[ ac_cv_dbcreate=yes BDB_LIB="$l" break ]) done test x$ac_cv_dbcreate = xyes && break 2 done fi done test x$BDB_LIB != x && break done if test x$ac_cv_dbcreate = xyes then AC_MSG_RESULT(yes) CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR" LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$BDB_LIB" AC_DEFINE(HAVE_DB4, 1, [Berkeley DB4 Support]) db_found=bdb else AC_MSG_RESULT(no) fi fi if test $db_found = no then AC_MSG_ERROR([You need Tokyo Cabinet, QDBM, GDBM or Berkeley DB4 for hcache]) fi fi dnl -- end cache -- AM_CONDITIONAL(BUILD_HCACHE, test x$db_found != xno) if test "$need_md5" = "yes" then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5.o" fi if test x$db_found != xno ; then MUTT_MD5="mutt_md5$EXEEXT" fi AC_SUBST(MUTT_MD5) AC_SUBST(MUTTLIBS) AC_SUBST(MUTT_LIB_OBJECTS) AC_SUBST(LIBIMAP) AC_SUBST(LIBIMAPDEPS) dnl -- iconv/gettext -- AC_ARG_ENABLE(iconv, AC_HELP_STRING([--disable-iconv], [Disable iconv support]), [if test x$enableval = xno ; then am_cv_func_iconv=no fi ]) MUTT_AM_GNU_GETTEXT if test "$am_cv_func_iconv" != "yes" then AC_MSG_WARN([Configuring without iconv support. See INSTALL for details]) else AC_CHECK_HEADERS(iconv.h, [AC_MSG_CHECKING(whether iconv.h defines iconv_t) AC_EGREP_HEADER([typedef.*iconv_t],iconv.h, [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_ICONV_T_DEF, 1, [Define if defines iconv_t.])], AC_MSG_RESULT(no))]) dnl (1) Some implementations of iconv won't convert from UTF-8 to UTF-8. dnl (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and dnl obl when args 2 and 3 are 0 (fixed in glibc-2.1.3). AC_CACHE_CHECK([whether this iconv is good enough], mutt_cv_iconv_good, mutt_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_RUN([ #include int main() { iconv_t cd; changequote(, )dnl char buf[4]; changequote([, ])dnl char *ob; size_t obl; ob = buf, obl = sizeof(buf); return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) && (iconv(cd, 0, 0, &ob, &obl) || !(ob == buf && obl == sizeof(buf)) || iconv_close(cd))); } ], mutt_cv_iconv_good=yes, mutt_cv_iconv_good=no, mutt_cv_iconv_good=yes) LIBS="$mutt_save_LIBS") if test "$mutt_cv_iconv_good" = no; then AC_MSG_ERROR(Try using libiconv instead) fi dnl This is to detect implementations such as the one in glibc-2.1, dnl which always convert exactly but return the number of characters dnl converted instead of the number converted inexactly. AC_CACHE_CHECK([whether iconv is non-transcribing], mutt_cv_iconv_nontrans, mutt_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_RUN([ #include #include int main() { iconv_t cd; const char *ib; char *ob; size_t ibl, obl; const char *s = "\304\211"; changequote(, )dnl char t[3]; changequote([, ])dnl ib = s, ibl = 2, ob = t, obl = 3; return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) || iconv(cd, &ib, &ibl, &ob, &obl)); } ], mutt_cv_iconv_nontrans=no, mutt_cv_iconv_nontrans=yes, mutt_cv_iconv_nontrans=no) LIBS="$mutt_save_LIBS") if test "$mutt_cv_iconv_nontrans" = yes; then AC_DEFINE(ICONV_NONTRANS, 1) else AC_DEFINE(ICONV_NONTRANS, 0) fi CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl" if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET,1, [ Define if your gettext has bind_textdomain_codeset. ]) else mutt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$mutt_save_LIBS" fi fi # libiconv dnl -- IDN depends on iconv AC_ARG_WITH(idn, AC_HELP_STRING([--with-idn=@<:@PFX@:>@], [Use GNU libidn for domain names]), [ if test "$with_idn" != "no" ; then if test "$with_idn" != "yes" ; then CPPFLAGS="$CPPFLAGS -I$with_idn/include" LDFLAGS="$LDFLAGS -L$with_idn/lib" fi fi ] ) if test "x$with_idn" != "xno"; then if test "$am_cv_func_iconv" != "yes" then if test "x$with_idn" != "x" then AC_MSG_ERROR([IDN requested but iconv is disabled or unavailable]) fi else AC_SEARCH_LIBS([stringprep_check_version], [idn], [ AC_DEFINE([HAVE_LIBIDN], 1, [Define to 1 if you have the `idn' library]) MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_idna.o" ]) AC_CHECK_FUNCS(idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z) AC_CHECK_FUNCS(idna_to_ascii_from_utf8 idna_to_ascii_8z) AC_CHECK_FUNCS(idna_to_ascii_lz idna_to_ascii_from_locale) fi fi dnl -- locales -- AC_CHECK_HEADERS(wchar.h) AC_CACHE_CHECK([for wchar_t], mutt_cv_wchar_t, AC_TRY_COMPILE([ #include #include #ifdef HAVE_WCHAR_H #include #endif ], [ wchar_t wc; return 0; ], mutt_cv_wchar_t=yes, mutt_cv_wchar_t=no)) if test "$mutt_cv_wchar_t" = no; then AC_DEFINE(wchar_t,int,[ Define to 'int' if system headers don't define. ]) fi AC_CACHE_CHECK([for wint_t], mutt_cv_wint_t, AC_TRY_COMPILE([ #include #include #ifdef HAVE_WCHAR_H #include #endif ], [ wint_t wc; return 0; ], mutt_cv_wint_t=yes, mutt_cv_wint_t=no)) if test "$mutt_cv_wint_t" = no; then AC_DEFINE(wint_t,int,[ Define to 'int' if system headers don't define. ]) fi AC_CHECK_HEADERS(wctype.h) AC_CHECK_FUNCS(iswalnum iswalpha iswblank iswcntrl iswdigit) AC_CHECK_FUNCS(iswgraph iswlower iswprint iswpunct iswspace iswupper) AC_CHECK_FUNCS(iswxdigit towupper towlower) AC_CACHE_CHECK([for mbstate_t], mutt_cv_mbstate_t, AC_TRY_COMPILE([ #include #include #ifdef HAVE_WCHAR_H #include #endif ], [ mbstate_t s; return 0; ], mutt_cv_mbstate_t=yes, mutt_cv_mbstate_t=no)) if test "$mutt_cv_mbstate_t" = no; then AC_DEFINE(mbstate_t,int,[ Define to 'int' if system headers don't define. ]) fi wc_funcs=maybe AC_ARG_WITH(wc-funcs, AC_HELP_STRING([--without-wc-funcs], [Do not use the system's wchar_t functions]), wc_funcs=$withval) if test "$wc_funcs" != yes && test "$wc_funcs" != no; then AC_CACHE_CHECK([for wchar_t functions], mutt_cv_wc_funcs, mutt_cv_wc_funcs=no AC_TRY_LINK([ #define _XOPEN_SOURCE 600 #include #include #ifdef HAVE_WCHAR_H #include #endif #ifdef HAVE_WCTYPE_H #include #endif], [mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0); iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0)], mutt_cv_wc_funcs=yes)) wc_funcs=$mutt_cv_wc_funcs fi if test $wc_funcs = yes; then AC_DEFINE(HAVE_WC_FUNCS,1,[ Define if you are using the system's wchar_t functions. ]) else MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS utf8.o wcwidth.o" fi AC_CACHE_CHECK([for nl_langinfo and CODESET], mutt_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], mutt_cv_langinfo_codeset=yes, mutt_cv_langinfo_codeset=no)]) if test $mutt_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET,1,[ Define if you have and nl_langinfo(CODESET). ]) fi AC_CACHE_CHECK([for nl_langinfo and YESEXPR], mutt_cv_langinfo_yesexpr, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(YESEXPR);], mutt_cv_langinfo_yesexpr=yes, mutt_cv_langinfo_yesexpr=no)]) if test $mutt_cv_langinfo_yesexpr = yes; then AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have and nl_langinfo(YESEXPR). ]) fi dnl Documentation tools have_openjade="no" AC_PATH_PROG([OSPCAT], [ospcat], [none]) if test "$OSPCAT" != "none" then AC_MSG_CHECKING([for openjade docbook stylesheets]) dslosfile=`ospcat --public-id="-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN"` DSLROOT=`echo $dslosfile | sed -n -e "s/.*SOIBASE='\(@<:@^'@:>@*\)\/catalog'.*/\1/p"` # ospcat may spit out an absolute path without an SOIBASE if test -z "$DSLROOT" then DSLROOT=`echo $dslosfile | sed -e 's|\(.*\)/print/docbook.dsl|\1|'` fi if test -f $DSLROOT/print/docbook.dsl then AC_MSG_RESULT([in $DSLROOT]) have_openjade="yes" else AC_MSG_RESULT([not found: PDF documentation will not be built.]) fi fi AC_SUBST(DSLROOT) AC_ARG_ENABLE(full_doc, AC_HELP_STRING([--disable-full-doc], [Omit disabled variables]), [ if test x$enableval = xno ; then full_doc=no fi ]) if test x$full_doc != xno ; then AC_DEFINE(MAKEDOC_FULL,1, [Define if you want complete documentation.]) fi AC_OUTPUT(Makefile contrib/Makefile doc/Makefile imap/Makefile intl/Makefile m4/Makefile po/Makefile.in hcachever.sh muttbug.sh doc/instdoc.sh) mutt-1.5.21/aclocal.m40000644000175000017500000011637411435242562011372 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, [m4_warning([this file was generated for autoconf 2.65. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # longlong.m4 serial 13 dnl Copyright (C) 1999-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, but can be removed once we # assume 2.62 everywhere. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug isn't important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [ac_cv_type_long_long_int=yes], [ac_cv_type_long_long_int=no], [ac_cv_type_long_long_int=yes])], [ac_cv_type_long_long_int=no])]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], 1, [Define to 1 if the system has the type `long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.61, but can be removed once we # assume 2.62 everywhere. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [ac_cv_type_unsigned_long_long_int=yes], [ac_cv_type_unsigned_long_long_int=no])]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, [Define to 1 if the system has the type `unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* Test preprocessor. */ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) error in preprocessor; #endif #if ! (18446744073709551615ULL <= -1ull) error in preprocessor; #endif /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 AC_DEFUN([AM_C_PROTOTYPES], [AC_REQUIRE([AC_C_PROTOTYPES]) if test "$ac_cv_prog_cc_stdc" != no; then U= ANSI2KNR= else U=_ ANSI2KNR=./ansi2knr fi # Ensure some checks needed by ansi2knr itself. AC_REQUIRE([AC_HEADER_STDC]) AC_CHECK_HEADERS([string.h]) AC_SUBST([U])dnl AC_SUBST([ANSI2KNR])dnl _AM_SUBST_NOTMAKE([ANSI2KNR])dnl ]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/codeset.m4]) m4_include([m4/curslib.m4]) m4_include([m4/funcdecl.m4]) m4_include([m4/funcs.m4]) m4_include([m4/gettext.m4]) m4_include([m4/glibc21.m4]) m4_include([m4/gpgme.m4]) m4_include([m4/gssapi.m4]) m4_include([m4/iconv.m4]) m4_include([m4/lcmessage.m4]) m4_include([m4/progtest.m4]) m4_include([m4/types.m4]) mutt-1.5.21/Makefile.am0000644000175000017500000001407211434772215011560 00000000000000## Process this file with automake to produce Makefile.in ## Use aclocal -I m4; automake --foreign AUTOMAKE_OPTIONS = 1.6 foreign EXTRA_PROGRAMS = mutt_dotlock pgpring pgpewrap mutt_md5 if BUILD_IMAP IMAP_SUBDIR = imap IMAP_INCLUDES = -I$(top_srcdir)/imap endif SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR) bin_SCRIPTS = muttbug flea @SMIMEAUX_TARGET@ if BUILD_HCACHE HCVERSION = hcversion.h endif BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h $(HCVERSION) bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ mutt_SOURCES = \ addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \ crypt.c cryptglue.c \ commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \ edit.c enter.c flags.c init.c filter.c from.c \ getdomain.c group.c \ handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \ main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \ postpone.c query.c recvattach.c recvcmd.c \ rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \ score.c send.c sendlib.c signal.c sort.c \ status.c system.c thread.c charset.c history.c lib.c \ muttlib.c editmsg.c mbyte.c \ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c nodist_mutt_SOURCES = $(BUILT_SOURCES) mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS) mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) \ $(INTLDEPS) DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \ -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \ -DHAVE_CONFIG_H=1 AM_CPPFLAGS=-I. -I$(top_srcdir) $(IMAP_INCLUDES) $(GPGME_CFLAGS) -Iintl CPPFLAGS=@CPPFLAGS@ EXTRA_mutt_SOURCES = account.c bcache.c crypt-gpgme.c crypt-mod-pgp-classic.c \ crypt-mod-pgp-gpgme.c crypt-mod-smime-classic.c \ crypt-mod-smime-gpgme.c dotlock.c gnupgparse.c hcache.c md5.c \ mutt_idna.c mutt_sasl.c mutt_socket.c mutt_ssl.c mutt_ssl_gnutls.c \ mutt_tunnel.c pgp.c pgpinvoke.c pgpkey.c pgplib.c pgpmicalg.c \ pgppacket.c pop.c pop_auth.c pop_lib.c remailer.c resize.c sha1.c \ smime.c smtp.c utf8.c wcwidth.c \ bcache.h browser.h hcache.h mbyte.h mutt_idna.h remailer.h url.h EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \ configure account.h \ attach.h buffy.h charset.h copy.h crypthash.h dotlock.h functions.h gen_defs \ globals.h hash.h history.h init.h keymap.h mutt_crypt.h \ mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \ mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \ mx.h pager.h pgp.h pop.h protos.h rfc1524.h rfc2047.h \ rfc2231.h rfc822.h rfc3676.h sha1.h sort.h mime.types VERSION prepare \ _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h \ mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h \ README.SSL smime.h group.h \ muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ ChangeLog mkchangelog.sh mutt_idna.h \ snprintf.c regex.c crypt-gpgme.h hcachever.sh.in EXTRA_SCRIPTS = smime_keys mutt_dotlock_SOURCES = mutt_dotlock.c mutt_dotlock_LDADD = @LIBOBJS@ mutt_dotlock_DEPENDENCIES = @LIBOBJS@ pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppacket.c ascii.c pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS) mutt_md5_SOURCES = md5.c mutt_md5_CFLAGS = -DMD5UTIL mutt_md5_LDADD = noinst_PROGRAMS = $(MUTT_MD5) mutt_dotlock.c: dotlock.c cp $(srcdir)/dotlock.c mutt_dotlock.c CLEANFILES = mutt_dotlock.c keymap_alldefs.h $(BUILT_SOURCES) DISTCLEANFILES= flea smime_keys ACLOCAL_AMFLAGS = -I m4 LDADD = @LIBOBJS@ @INTLLIBS@ flea: muttbug.sh cp muttbug.sh flea chmod +x flea smime_keys: $(srcdir)/smime_keys.pl cp $(srcdir)/smime_keys.pl smime_keys chmod +x smime_keys keymap_defs.h: $(OPS) $(srcdir)/gen_defs $(srcdir)/gen_defs $(OPS) > keymap_defs.h keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs rm -f $@ $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \ $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \ > keymap_alldefs.h reldate.h: $(srcdir)/ChangeLog echo 'const char *ReleaseDate = "'`head -n 1 $(srcdir)/ChangeLog | LC_ALL=C cut -d ' ' -f 1`'";' > reldate.h.tmp; \ cmp -s reldate.h.tmp reldate.h || cp reldate.h.tmp reldate.h; \ rm reldate.h.tmp hcversion.h: $(srcdir)/mutt.h $(srcdir)/rfc822.h hcachever.sh $(MUTT_MD5) ( echo '#include "config.h"'; echo '#include "mutt.h"'; ) \ | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | sh ./hcachever.sh hcversion.h patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c install-exec-hook: if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then \ rm -f $(DESTDIR)$(bindir)/mutt.dotlock ; \ ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \ fi if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \ chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \ chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \ { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \ fi install-data-local: $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir) $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir)/mime.types.dist -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \ $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \ fi uninstall-local: for i in mime.types ; do \ if cmp -s $(DESTDIR)$(sysconfdir)/$$i.dist $(DESTDIR)$(sysconfdir)/$$i ; then \ rm $(DESTDIR)$(sysconfdir)/$$i ; \ fi ; \ rm $(DESTDIR)$(sysconfdir)/$${i}.dist ; \ done pclean: cat /dev/null > $(top_srcdir)/PATCHES check-security: (cd $(top_srcdir) && ./check_sec.sh) commit: @echo "make commit is obsolete; use hg-commit"; false update-changelog: (cd $(top_srcdir); \ sh ./mkchangelog.sh | cat - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog; \ $${VISUAL:-vi} ChangeLog) mutt-dist: (cd $(srcdir) && ./build-release ) update-doc: (cd doc && $(MAKE) update-doc) .PHONY: commit pclean check-security mutt-1.5.21/Makefile.in0000644000175000017500000013762711435242564011605 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ EXTRA_PROGRAMS = mutt_dotlock$(EXEEXT) pgpring$(EXEEXT) \ pgpewrap$(EXEEXT) mutt_md5$(EXEEXT) bin_PROGRAMS = mutt$(EXEEXT) @DOTLOCK_TARGET@ @PGPAUX_TARGET@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/hcachever.sh.in $(srcdir)/muttbug.sh.in \ $(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \ ABOUT-NLS ChangeLog INSTALL NEWS TODO config.guess config.sub \ depcomp install-sh missing mkdtemp.c mkinstalldirs regex.c \ setenv.c snprintf.c strcasecmp.c strcasestr.c strdup.c \ strsep.c strtok_r.c wcscasecmp.c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/curslib.m4 $(top_srcdir)/m4/funcdecl.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpgme.m4 \ $(top_srcdir)/m4/gssapi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/types.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = intl/Makefile hcachever.sh muttbug.sh CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_mutt_OBJECTS = addrbook.$(OBJEXT) alias.$(OBJEXT) attach.$(OBJEXT) \ base64.$(OBJEXT) browser.$(OBJEXT) buffy.$(OBJEXT) \ color.$(OBJEXT) crypt.$(OBJEXT) cryptglue.$(OBJEXT) \ commands.$(OBJEXT) complete.$(OBJEXT) compose.$(OBJEXT) \ copy.$(OBJEXT) curs_lib.$(OBJEXT) curs_main.$(OBJEXT) \ date.$(OBJEXT) edit.$(OBJEXT) enter.$(OBJEXT) flags.$(OBJEXT) \ init.$(OBJEXT) filter.$(OBJEXT) from.$(OBJEXT) \ getdomain.$(OBJEXT) group.$(OBJEXT) handler.$(OBJEXT) \ hash.$(OBJEXT) hdrline.$(OBJEXT) headers.$(OBJEXT) \ help.$(OBJEXT) hook.$(OBJEXT) keymap.$(OBJEXT) main.$(OBJEXT) \ mbox.$(OBJEXT) menu.$(OBJEXT) mh.$(OBJEXT) mx.$(OBJEXT) \ pager.$(OBJEXT) parse.$(OBJEXT) pattern.$(OBJEXT) \ postpone.$(OBJEXT) query.$(OBJEXT) recvattach.$(OBJEXT) \ recvcmd.$(OBJEXT) rfc822.$(OBJEXT) rfc1524.$(OBJEXT) \ rfc2047.$(OBJEXT) rfc2231.$(OBJEXT) rfc3676.$(OBJEXT) \ score.$(OBJEXT) send.$(OBJEXT) sendlib.$(OBJEXT) \ signal.$(OBJEXT) sort.$(OBJEXT) status.$(OBJEXT) \ system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) am__objects_1 = am__objects_2 = patchlist.$(OBJEXT) $(am__objects_1) nodist_mutt_OBJECTS = $(am__objects_2) mutt_OBJECTS = $(am_mutt_OBJECTS) $(nodist_mutt_OBJECTS) am__DEPENDENCIES_1 = am_mutt_dotlock_OBJECTS = mutt_dotlock.$(OBJEXT) mutt_dotlock_OBJECTS = $(am_mutt_dotlock_OBJECTS) am_mutt_md5_OBJECTS = mutt_md5-md5.$(OBJEXT) mutt_md5_OBJECTS = $(am_mutt_md5_OBJECTS) mutt_md5_DEPENDENCIES = mutt_md5_LINK = $(CCLD) $(mutt_md5_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ pgpewrap_SOURCES = pgpewrap.c pgpewrap_OBJECTS = pgpewrap.$(OBJEXT) pgpewrap_LDADD = $(LDADD) pgpewrap_DEPENDENCIES = @LIBOBJS@ am_pgpring_OBJECTS = pgppubring.$(OBJEXT) pgplib.$(OBJEXT) \ lib.$(OBJEXT) extlib.$(OBJEXT) sha1.$(OBJEXT) md5.$(OBJEXT) \ pgppacket.$(OBJEXT) ascii.$(OBJEXT) pgpring_OBJECTS = $(am_pgpring_OBJECTS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(mutt_SOURCES) $(EXTRA_mutt_SOURCES) $(nodist_mutt_SOURCES) \ $(mutt_dotlock_SOURCES) $(mutt_md5_SOURCES) pgpewrap.c \ $(pgpring_SOURCES) DIST_SOURCES = $(mutt_SOURCES) $(EXTRA_mutt_SOURCES) \ $(mutt_dotlock_SOURCES) $(mutt_md5_SOURCES) pgpewrap.c \ $(pgpring_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = m4 po intl doc contrib imap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DBX = @DBX@ DEBUGGER = @DEBUGGER@ DEFS = -DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \ -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \ -DHAVE_CONFIG_H=1 DEPDIR = @DEPDIR@ DOTLOCK_GROUP = @DOTLOCK_GROUP@ DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ DOTLOCK_TARGET = @DOTLOCK_TARGET@ DSLROOT = @DSLROOT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDB = @GDB@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GPGME_CFLAGS = @GPGME_CFLAGS@ GPGME_CONFIG = @GPGME_CONFIG@ GPGME_LIBS = @GPGME_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ ISPELL = @ISPELL@ KRB5CFGPATH = @KRB5CFGPATH@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBIMAP = @LIBIMAP@ LIBIMAPDEPS = @LIBIMAPDEPS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MUTTLIBS = @MUTTLIBS@ MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ MUTT_MD5 = @MUTT_MD5@ OBJEXT = @OBJEXT@ OPS = @OPS@ OSPCAT = @OSPCAT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGPAUX_TARGET = @PGPAUX_TARGET@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDB = @SDB@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ STRIP = @STRIP@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.6 foreign @BUILD_IMAP_TRUE@IMAP_SUBDIR = imap @BUILD_IMAP_TRUE@IMAP_INCLUDES = -I$(top_srcdir)/imap SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR) bin_SCRIPTS = muttbug flea @SMIMEAUX_TARGET@ @BUILD_HCACHE_TRUE@HCVERSION = hcversion.h BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h $(HCVERSION) mutt_SOURCES = \ addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \ crypt.c cryptglue.c \ commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \ edit.c enter.c flags.c init.c filter.c from.c \ getdomain.c group.c \ handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \ main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \ postpone.c query.c recvattach.c recvcmd.c \ rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \ score.c send.c sendlib.c signal.c sort.c \ status.c system.c thread.c charset.c history.c lib.c \ muttlib.c editmsg.c mbyte.c \ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c nodist_mutt_SOURCES = $(BUILT_SOURCES) mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS) mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) \ $(INTLDEPS) AM_CPPFLAGS = -I. -I$(top_srcdir) $(IMAP_INCLUDES) $(GPGME_CFLAGS) -Iintl EXTRA_mutt_SOURCES = account.c bcache.c crypt-gpgme.c crypt-mod-pgp-classic.c \ crypt-mod-pgp-gpgme.c crypt-mod-smime-classic.c \ crypt-mod-smime-gpgme.c dotlock.c gnupgparse.c hcache.c md5.c \ mutt_idna.c mutt_sasl.c mutt_socket.c mutt_ssl.c mutt_ssl_gnutls.c \ mutt_tunnel.c pgp.c pgpinvoke.c pgpkey.c pgplib.c pgpmicalg.c \ pgppacket.c pop.c pop_auth.c pop_lib.c remailer.c resize.c sha1.c \ smime.c smtp.c utf8.c wcwidth.c \ bcache.h browser.h hcache.h mbyte.h mutt_idna.h remailer.h url.h EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \ configure account.h \ attach.h buffy.h charset.h copy.h crypthash.h dotlock.h functions.h gen_defs \ globals.h hash.h history.h init.h keymap.h mutt_crypt.h \ mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \ mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \ mx.h pager.h pgp.h pop.h protos.h rfc1524.h rfc2047.h \ rfc2231.h rfc822.h rfc3676.h sha1.h sort.h mime.types VERSION prepare \ _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h \ mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h \ README.SSL smime.h group.h \ muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ ChangeLog mkchangelog.sh mutt_idna.h \ snprintf.c regex.c crypt-gpgme.h hcachever.sh.in EXTRA_SCRIPTS = smime_keys mutt_dotlock_SOURCES = mutt_dotlock.c mutt_dotlock_LDADD = @LIBOBJS@ mutt_dotlock_DEPENDENCIES = @LIBOBJS@ pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppacket.c ascii.c pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS) mutt_md5_SOURCES = md5.c mutt_md5_CFLAGS = -DMD5UTIL mutt_md5_LDADD = noinst_PROGRAMS = $(MUTT_MD5) CLEANFILES = mutt_dotlock.c keymap_alldefs.h $(BUILT_SOURCES) DISTCLEANFILES = flea smime_keys ACLOCAL_AMFLAGS = -I m4 LDADD = @LIBOBJS@ @INTLLIBS@ all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ hcachever.sh: $(top_builddir)/config.status $(srcdir)/hcachever.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ muttbug.sh: $(top_builddir)/config.status $(srcdir)/muttbug.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) mutt$(EXEEXT): $(mutt_OBJECTS) $(mutt_DEPENDENCIES) @rm -f mutt$(EXEEXT) $(LINK) $(mutt_OBJECTS) $(mutt_LDADD) $(LIBS) mutt_dotlock$(EXEEXT): $(mutt_dotlock_OBJECTS) $(mutt_dotlock_DEPENDENCIES) @rm -f mutt_dotlock$(EXEEXT) $(LINK) $(mutt_dotlock_OBJECTS) $(mutt_dotlock_LDADD) $(LIBS) mutt_md5$(EXEEXT): $(mutt_md5_OBJECTS) $(mutt_md5_DEPENDENCIES) @rm -f mutt_md5$(EXEEXT) $(mutt_md5_LINK) $(mutt_md5_OBJECTS) $(mutt_md5_LDADD) $(LIBS) pgpewrap$(EXEEXT): $(pgpewrap_OBJECTS) $(pgpewrap_DEPENDENCIES) @rm -f pgpewrap$(EXEEXT) $(LINK) $(pgpewrap_OBJECTS) $(pgpewrap_LDADD) $(LIBS) pgpring$(EXEEXT): $(pgpring_OBJECTS) $(pgpring_DEPENDENCIES) @rm -f pgpring$(EXEEXT) $(LINK) $(pgpring_OBJECTS) $(pgpring_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkdtemp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/regex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/setenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasestr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strdup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strsep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtok_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/wcscasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/account.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addrbook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attach.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bcache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/browser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complete.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-gpgme.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-mod-pgp-classic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-mod-pgp-gpgme.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-mod-smime-classic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-mod-smime-gpgme.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt-mod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cryptglue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curs_lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curs_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/date.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dotlock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editmsg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extlib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/from.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdomain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnupgparse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdrline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keymap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbyte.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_dotlock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_idna.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_md5-md5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_sasl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_ssl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_ssl_gnutls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutt_tunnel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muttlib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/patchlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgpewrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgpinvoke.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgpkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgplib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgpmicalg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgppacket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgppubring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop_auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop_lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postpone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recvattach.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recvcmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remailer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc1524.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc2047.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc2231.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc3676.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc822.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe_asprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/score.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendlib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` mutt_md5-md5.o: md5.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mutt_md5_CFLAGS) $(CFLAGS) -MT mutt_md5-md5.o -MD -MP -MF $(DEPDIR)/mutt_md5-md5.Tpo -c -o mutt_md5-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mutt_md5-md5.Tpo $(DEPDIR)/mutt_md5-md5.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='mutt_md5-md5.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mutt_md5_CFLAGS) $(CFLAGS) -c -o mutt_md5-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c mutt_md5-md5.obj: md5.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mutt_md5_CFLAGS) $(CFLAGS) -MT mutt_md5-md5.obj -MD -MP -MF $(DEPDIR)/mutt_md5-md5.Tpo -c -o mutt_md5-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mutt_md5-md5.Tpo $(DEPDIR)/mutt_md5-md5.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='mutt_md5-md5.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mutt_md5_CFLAGS) $(CFLAGS) -c -o mutt_md5-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) $(SCRIPTS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf $(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-exec-am \ install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstPROGRAMS ctags ctags-recursive dist \ dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS \ install-binSCRIPTS install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-exec-hook install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-local mutt_dotlock.c: dotlock.c cp $(srcdir)/dotlock.c mutt_dotlock.c flea: muttbug.sh cp muttbug.sh flea chmod +x flea smime_keys: $(srcdir)/smime_keys.pl cp $(srcdir)/smime_keys.pl smime_keys chmod +x smime_keys keymap_defs.h: $(OPS) $(srcdir)/gen_defs $(srcdir)/gen_defs $(OPS) > keymap_defs.h keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs rm -f $@ $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \ $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \ > keymap_alldefs.h reldate.h: $(srcdir)/ChangeLog echo 'const char *ReleaseDate = "'`head -n 1 $(srcdir)/ChangeLog | LC_ALL=C cut -d ' ' -f 1`'";' > reldate.h.tmp; \ cmp -s reldate.h.tmp reldate.h || cp reldate.h.tmp reldate.h; \ rm reldate.h.tmp hcversion.h: $(srcdir)/mutt.h $(srcdir)/rfc822.h hcachever.sh $(MUTT_MD5) ( echo '#include "config.h"'; echo '#include "mutt.h"'; ) \ | $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - | sh ./hcachever.sh hcversion.h patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c install-exec-hook: if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then \ rm -f $(DESTDIR)$(bindir)/mutt.dotlock ; \ ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \ fi if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \ chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \ chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \ { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \ fi install-data-local: $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir) $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir)/mime.types.dist -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \ $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \ fi uninstall-local: for i in mime.types ; do \ if cmp -s $(DESTDIR)$(sysconfdir)/$$i.dist $(DESTDIR)$(sysconfdir)/$$i ; then \ rm $(DESTDIR)$(sysconfdir)/$$i ; \ fi ; \ rm $(DESTDIR)$(sysconfdir)/$${i}.dist ; \ done pclean: cat /dev/null > $(top_srcdir)/PATCHES check-security: (cd $(top_srcdir) && ./check_sec.sh) commit: @echo "make commit is obsolete; use hg-commit"; false update-changelog: (cd $(top_srcdir); \ sh ./mkchangelog.sh | cat - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog; \ $${VISUAL:-vi} ChangeLog) mutt-dist: (cd $(srcdir) && ./build-release ) update-doc: (cd doc && $(MAKE) update-doc) .PHONY: commit pclean check-security # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mutt-1.5.21/config.h.in0000644000175000017500000004554111435242603011546 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define if you want classic PGP support. */ #undef CRYPT_BACKEND_CLASSIC_PGP /* Define if you want clasic S/MIME support. */ #undef CRYPT_BACKEND_CLASSIC_SMIME /* Define if you use GPGME to support OpenPGP */ #undef CRYPT_BACKEND_GPGME /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to enable debugging info. */ #undef DEBUG /* Define if you want to use an external dotlocking program. */ #undef DL_STANDALONE /* Define your domain name. */ #undef DOMAIN /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Enable exact regeneration of email addresses as parsed? NOTE: this requires significant more memory when defined. */ #undef EXACT_ADDRESS /* program to use for shell commands */ #undef EXECSHELL /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define if you have bkgdset, as a function or macro. */ #undef HAVE_BKGDSET /* Define if you have the C99 integer types */ #undef HAVE_C99_INTTYPES /* Define if your curses library supports color. */ #undef HAVE_COLOR /* Define if you have curs_set, as a function or macro. */ #undef HAVE_CURS_SET /* Berkeley DB4 Support */ #undef HAVE_DB4 /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `GNUTLS_VERIFY_DISABLE_TIME_CHECKS', and to 0 if you don't. */ #undef HAVE_DECL_GNUTLS_VERIFY_DISABLE_TIME_CHECKS /* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL_SYS_SIGLIST /* Define to 1 if your system has the dirent::d_ino member */ #undef HAVE_DIRENT_D_INO /* Define to 1 if you have the `fchdir' function. */ #undef HAVE_FCHDIR /* Define to 1 if you have the `feof_unlocked' function. */ #undef HAVE_FEOF_UNLOCKED /* Define to 1 if you have the `fgetpos' function. */ #undef HAVE_FGETPOS /* Define to 1 if you have the `fgets_unlocked' function. */ #undef HAVE_FGETS_UNLOCKED /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* GDBM Support */ #undef HAVE_GDBM /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getsid' function. */ #undef HAVE_GETSID /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define if GPGME supports PKA */ #undef HAVE_GPGME_PKA_TRUST /* Define if your GSSAPI implementation is Heimdal */ #undef HAVE_HEIMDAL /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_ICONV_H /* Define if defines iconv_t. */ #undef HAVE_ICONV_T_DEF /* Define to 1 if you have the `idna_to_ascii_8z' function. */ #undef HAVE_IDNA_TO_ASCII_8Z /* Define to 1 if you have the `idna_to_ascii_from_locale' function. */ #undef HAVE_IDNA_TO_ASCII_FROM_LOCALE /* Define to 1 if you have the `idna_to_ascii_from_utf8' function. */ #undef HAVE_IDNA_TO_ASCII_FROM_UTF8 /* Define to 1 if you have the `idna_to_ascii_lz' function. */ #undef HAVE_IDNA_TO_ASCII_LZ /* Define to 1 if you have the `idna_to_unicode_8z8z' function. */ #undef HAVE_IDNA_TO_UNICODE_8Z8Z /* Define to 1 if you have the `idna_to_unicode_utf8_from_utf8' function. */ #undef HAVE_IDNA_TO_UNICODE_UTF8_FROM_UTF8 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IOCTL_H /* Define to 1 if you have the `iswalnum' function. */ #undef HAVE_ISWALNUM /* Define to 1 if you have the `iswalpha' function. */ #undef HAVE_ISWALPHA /* Define to 1 if you have the `iswblank' function. */ #undef HAVE_ISWBLANK /* Define to 1 if you have the `iswcntrl' function. */ #undef HAVE_ISWCNTRL /* Define to 1 if you have the `iswdigit' function. */ #undef HAVE_ISWDIGIT /* Define to 1 if you have the `iswgraph' function. */ #undef HAVE_ISWGRAPH /* Define to 1 if you have the `iswlower' function. */ #undef HAVE_ISWLOWER /* Define to 1 if you have the `iswprint' function. */ #undef HAVE_ISWPRINT /* Define to 1 if you have the `iswpunct' function. */ #undef HAVE_ISWPUNCT /* Define to 1 if you have the `iswspace' function. */ #undef HAVE_ISWSPACE /* Define to 1 if you have the `iswupper' function. */ #undef HAVE_ISWUPPER /* Define to 1 if you have the `iswxdigit' function. */ #undef HAVE_ISWXDIGIT /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if you have and nl_langinfo(YESEXPR). */ #undef HAVE_LANGINFO_YESEXPR /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the `idn' library */ #undef HAVE_LIBIDN /* Define to 1 if you have the `intl' library (-lintl). */ #undef HAVE_LIBINTL /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the `ssl' library (-lssl). */ #undef HAVE_LIBSSL /* Define to 1 if you have the `termlib' library (-ltermlib). */ #undef HAVE_LIBTERMLIB /* Define to 1 if you have the `x' library (-lx). */ #undef HAVE_LIBX /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if the system has the type `long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define if you have meta, as a function or macro. */ #undef HAVE_META /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #undef HAVE_NCURSESW_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* QDBM Support */ #undef HAVE_QDBM /* Define to 1 if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD /* Define to 1 if you have the `RAND_status' function. */ #undef HAVE_RAND_STATUS /* Define to 1 if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* Define if you have resizeterm, as a function or macro. */ #undef HAVE_RESIZETERM /* Define to 1 if you have the `setegid' function. */ #undef HAVE_SETEGID /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define to 1 if you have a C99 compliant snprintf function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `srand48' function. */ #undef HAVE_SRAND48 /* Define if you have start_color, as a function or macro. */ #undef HAVE_START_COLOR /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcasestr' function. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strsep' function. */ #undef HAVE_STRSEP /* Define to 1 if you have the `strtok_r' function. */ #undef HAVE_STRTOK_R /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYSEXITS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Tokyo Cabinet Support */ #undef HAVE_TC /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `towupper' function. */ #undef HAVE_TOWUPPER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define if you have typeahead, as a function or macro. */ #undef HAVE_TYPEAHEAD /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UNIX_H /* Define if you have use_default_colors, as a function or macro. */ #undef HAVE_USE_DEFAULT_COLORS /* Define to 1 if you have the header file. */ #undef HAVE_VILLA_H /* Define to 1 if you have a C99 compliant vsnprintf function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if you have the `wcscasecmp' function. */ #undef HAVE_WCSCASECMP /* Define to 1 if you have the header file. */ #undef HAVE_WCTYPE_H /* Define if you are using the system's wchar_t functions. */ #undef HAVE_WC_FUNCS /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Is mail spooled to the user's home directory? If defined, MAILPATH should be set to the filename of the spool mailbox relative the the home directory. use: configure --with-homespool=FILE */ #undef HOMESPOOL /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define as 1 if iconv() only converts exactly and we should treat all return values other than (size_t)(-1) as equivalent. */ #undef ICONV_NONTRANS /* Where to find ispell on your system. */ #undef ISPELL /* Define if the result of isprint() is unreliable. */ #undef LOCALES_HACK /* Where new mail is spooled. */ #undef MAILPATH /* Define if you want complete documentation. */ #undef MAKEDOC_FULL /* Where to find mixmaster on your system. */ #undef MIXMASTER /* Define if you have problems with mutt not detecting new/old mailboxes over NFS. Some NFS implementations incorrectly cache the attributes of small files. */ #undef NFS_ATTRIBUTE_HACK /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if the C compiler supports function prototypes. */ #undef PROTOTYPES /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Where to find sendmail on your system. */ #undef SENDMAIL /* Some systems declare sig_atomic_t as volatile, some others -- no. This define will have value `sig_atomic_t' or `volatile sig_atomic_t' accordingly. */ #undef SIG_ATOMIC_VOLATILE_T /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `off_t', as computed by sizeof. */ #undef SIZEOF_OFF_T /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to enable Sun mailtool attachments support. */ #undef SUN_ATTACHMENT /* Define to use dotlocking for mailboxes. */ #undef USE_DOTLOCK /* Define to use fcntl() to lock folders. */ #undef USE_FCNTL /* Define to use flock() to lock mailboxes. */ #undef USE_FLOCK /* Define if you want to use the included regex.c. */ #undef USE_GNU_REGEX /* Define if you have GSSAPI libraries available */ #undef USE_GSS /* Enable header caching */ #undef USE_HCACHE /* Define if you want support for the IMAP protocol. */ #undef USE_IMAP /* Define if you want support for the POP3 protocol. */ #undef USE_POP /* Define if want to use the SASL library for POP/IMAP authentication. */ #undef USE_SASL /* Define if mutt should run setgid "mail". */ #undef USE_SETGID /* Define if you compile with SLang instead of curses/ncurses. */ #undef USE_SLANG_CURSES /* Include internal SMTP relay support */ #undef USE_SMTP /* Include code for socket support. Set automatically if you enable POP3 or IMAP */ #undef USE_SOCKET /* Define if you want support for SSL. */ #undef USE_SSL /* Define if you want support for SSL via GNUTLS. */ #undef USE_SSL_GNUTLS /* Define if you want support for SSL via OpenSSL. */ #undef USE_SSL_OPENSSL /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif #ifndef HAVE_C99_INTTYPES # if SIZEOF_SHORT == 4 typedef unsigned short uint32_t; # elif SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long uint32_t; # endif # if SIZEOF_INT == 8 typedef unsigned int uint64_t; # elif SIZEOF_LONG == 8 typedef unsigned long uint64_t; # elif SIZEOF_LONG_LONG == 8 typedef unsigned long long uint64_t; # endif #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define like PROTOTYPES; this can be used by system headers. */ #undef __PROTOTYPES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to 'int' if system headers don't define. */ #undef mbstate_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `int' if does not define. */ #undef sig_atomic_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to 'int' if doesn't have it. */ #undef socklen_t /* Define to `int' if does not define. */ #undef ssize_t /* define if va_copy is not available */ #undef va_copy /* Define to 'int' if system headers don't define. */ #undef wchar_t /* Define to 'int' if system headers don't define. */ #undef wint_t /* fseeko portability defines */ #ifdef HAVE_FSEEKO # define LOFF_T off_t # if HAVE_C99_INTTYPES && HAVE_INTTYPES_H # if SIZEOF_OFF_T == 8 # define OFF_T_FMT "%" PRId64 # else # define OFF_T_FMT "%" PRId32 # endif # else # if (SIZEOF_OFF_T == 8) && (SIZEOF_LONG == 4) # define OFF_T_FMT "%lld" # else # define OFF_T_FMT "%ld" # endif # endif #else # define LOFF_T long # define fseeko fseek # define ftello ftell # define OFF_T_FMT "%ld" #endif mutt-1.5.21/hcachever.sh.in0000755000175000017500000000267211015335220012405 00000000000000#!/bin/sh BASEVERSION=2 cleanstruct () { echo "$1" | sed -e 's/} *//' -e 's/;$//' } cleanbody () { echo "$1" | sed -e 's/{ *//' } getstruct () { STRUCT="" BODY='' inbody=0 case "$1" in *'{') inbody=1 ;; *';') return ;; esac while read line do if test $inbody -eq 0 then case "$line" in '{'*) inbody=1 ;; *';') return ;; esac fi case "$line" in '} '*) STRUCT=`cleanstruct "$line"` break ;; '}') read line STRUCT=`cleanstruct "$line"` break ;; '#'*) continue ;; *) if test $inbody -ne 0 then BODY="$BODY $line" fi ;; esac done case $STRUCT in ADDRESS|LIST|BUFFER|PARAMETER|BODY|ENVELOPE|HEADER) BODY=`cleanbody "$BODY"` echo "$STRUCT: $BODY" ;; esac return } DEST="$1" TMPD="$DEST.tmp" TEXT="$BASEVERSION" echo "/* base version: $BASEVERSION" > $TMPD while read line do case "$line" in 'typedef struct'*) STRUCT=`getstruct "$line"` if test -n "$STRUCT" then NAME=`echo $STRUCT | cut -d: -f1` BODY=`echo $STRUCT | cut -d' ' -f2-` echo " * $NAME:" $BODY >> $TMPD TEXT="$TEXT $NAME {$BODY}" fi ;; esac done echo " */" >> $TMPD MD5TEXT=`echo "$TEXT" | ./mutt_md5` echo "#define HCACHEVER 0x"`echo $MD5TEXT | cut -c-8` >> $TMPD # TODO: validate we have all structs mv $TMPD $DEST mutt-1.5.21/muttbug.sh.in0000644000175000017500000001750710770271235012160 00000000000000#!/bin/sh # # File a bug against the Mutt mail user agent. # # # $Id$ # # # Copyright (c) 2000 Thomas Roessler # # # 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 2 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # SUBMIT="fleas@mutt.org" DEBIAN_SUBMIT="submit@bugs.debian.org" prefix=@prefix@ DEBUGGER=@DEBUGGER@ SENDMAIL=@SENDMAIL@ sysconfdir=@sysconfdir@ pkgdatadir=@pkgdatadir@ include_file () { echo echo "--- Begin $1" sed -e '/^[ ]*#/d; /^[ ]*$/d; s/^-/- -/' $1 echo "--- End $1" echo } debug_gdb () { cat << EOF > $SCRATCH/gdb.rc bt list quit EOF $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt } debug_dbx () { cat << EOF > $SCRATCH/dbx.rc where list quit EOF $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE } debug_sdb () { cat << EOF > $SCRATCH/sdb.rc t w q EOF $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc } case `echo -n` in "") n=-n; c= ;; *) n=; c='\c' ;; esac exec > /dev/tty exec < /dev/tty SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$ mkdir ${SCRATCH} || \ { echo "`basename $0`: Can't create temporary directory." >& 2 ; exit 1 ; } trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2 TEMPLATE=${SCRATCH}/template.txt if test -z "$EMAIL" ; then EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`" fi EMAILTMP='' while test -z "$EMAILTMP" do echo "Please enter your e-mail address [$EMAIL]:" echo $n "> $c" read EMAILTMP if test -z "$EMAILTMP"; then EMAILTMP="$EMAIL"; fi if ! echo "$EMAILTMP" | grep -q @ then echo "$EMAILTMP does not appear to be a valid email address" EMAILTMP='' continue fi EMAIL="$EMAILTMP" done echo "Please enter a one-line description of the problem you experience:" echo $n "> $c" read SUBJECT cat < $c" read _CORE test "$_CORE" && CORE="$_CORE" fi echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c" read personal case "$personal" in [nN]*) personal=no ;; *) personal=yes ;; esac echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c" read global case "$global" in [nN]*) global=no ;; *) global=yes ;; esac if test -f /etc/debian_version ; then DEBIAN=yes echo $n "Checking whether mutt has been installed as a package... $c" DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null if test "$DEBIANVERSION" ; then DPKG=yes else DPKG=no unset DEBIANVERSION fi echo "$DPKG" echo $n "File this bug with Debian? [Y|n] $c" read DPKG case "$DPKG" in [nN]) DPKG=no ;; *) DPKG=yes ;; esac else DEBIAN=no DPKG=no fi if rpm -q mutt > /dev/null 2> /dev/null ; then echo "Mutt seems to come from an RPM package." RPMVERSION="`rpm -q mutt`" RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`" fi MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`" test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT" exec > ${TEMPLATE} test "$EMAIL" && echo "From: $EMAIL" test "$REPLYTO" && echo "Reply-To: $REPLYTO" test "$ORGANIZATION" && echo "Organization: $ORGANIZATION" echo "Subject: mutt-$MUTTVERSION: $SUBJECT" echo "To: $SUBMIT" test "$EMAIL" && echo "Bcc: ${EMAIL}" echo echo "Package: mutt" echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}" echo "Severity: $severity" echo echo "-- Please type your report below this line" echo echo echo if test "$DEBIAN" = "yes" ; then echo "Obtaining Debian-specific information..." > /dev/tty bug -p -s dummy mutt < /dev/null 2> /dev/null | \ sed -n -e "/^-- System Information/,/^---/p" | \ grep -v '^---' else echo "-- System Information" echo "System Version: `uname -a`" test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER"; test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`" test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`" # Please provide more of these if you have any. fi echo echo "-- Build environment information" echo echo "(Note: This is the build environment installed on the system" echo "muttbug is run on. Information may or may not match the environment" echo "used to build mutt.)" echo echo "- gcc version information" echo "@CC@" @CC@ -v 2>&1 echo echo "- CFLAGS" echo @CFLAGS@ echo echo "-- Mutt Version Information" echo LC_ALL=C mutt -v if test "$CORE" && test -f "$CORE" ; then echo echo "-- Core Dump Analysis Output" echo case "$DEBUGGER" in *sdb) debug_sdb $CORE ;; *dbx) debug_dbx $CORE ;; *gdb) debug_gdb $CORE ;; esac echo fi if test "$personal" = "yes" ; then CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc" MATCHED="none" for f in $CANDIDATES; do if test -f "${HOME}/$f" ; then MATCHED="${HOME}/$f" break fi done if test "$MATCHED" = "none" ; then echo "Warning: Can't find your personal .muttrc." >&2 else include_file $MATCHED fi fi if test "$global" = "yes" ; then CANDIDATES="Muttrc-${MUTTVERSION} Muttrc" DIRECTORIES="$sysconfdir $pkgdatadir" MATCHED="none" for d in $DIRECTORIES ; do for f in $CANDIDATES; do if test -f $d/$f ; then MATCHED="$d/$f" break fi done test "$MATCHED" = "none" || break done if test "$MATCHED" = "none" ; then echo "Warning: Can't find global Muttrc." >&2 else include_file $MATCHED fi fi exec > /dev/tty cp $TEMPLATE $SCRATCH/mutt-bug.txt input="e" while : ; do if test "$input" = "e" ; then ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then echo "Warning: Bug report was not modified!" fi fi echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c" read _input input="`echo $_input | tr EVSQ evsq`" case $input in e*) ;; v*) ${PAGER-more} $SCRATCH/mutt-bug.txt ;; s*|"") $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;; q*) exit esac done mutt-1.5.21/configure0000755000175000017500000135020011435242563011427 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="mutt.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS DSLROOT OSPCAT INTL_LIBTOOL_SUFFIX_PREFIX MKINSTALLDIRS GENCAT INSTOBJEXT DATADIRNAME POSUB POFILES INTLOBJS INTLLIBS GMOFILES CATOBJEXT CATALOGS USE_INCLUDED_LIBINTL BUILD_INCLUDED_LIBINTL INTLBISON XGETTEXT GMSGFMT MSGFMT USE_NLS LIBICONV GLIBC21 ALLOCA LIBIMAPDEPS LIBIMAP MUTT_LIB_OBJECTS MUTTLIBS MUTT_MD5 BUILD_HCACHE_FALSE BUILD_HCACHE_TRUE USE_SASL_FALSE USE_SASL_TRUE USE_SSL_FALSE USE_SSL_TRUE USE_GSS_FALSE USE_GSS_TRUE KRB5CFGPATH BUILD_IMAP_FALSE BUILD_IMAP_TRUE DOTLOCK_PERMISSION DOTLOCK_GROUP DOTLOCK_TARGET LIBOBJS ISPELL SMIMEAUX_TARGET PGPAUX_TARGET OPS GPGME_LIBS GPGME_CFLAGS GPGME_CONFIG SENDMAIL DEBUGGER SDB GDB DBX AR RANLIB ANSI2KNR U host_os host_vendor host_cpu host build_os build_vendor build_cpu build EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC CONFIG_STATUS_DEPENDENCIES am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_largefile enable_gpgme with_gpgme_prefix enable_pgp enable_smime with_mixmaster with_slang with_curses with_regex with_homespool with_mailpath enable_external_dotlock with_docdir with_domain enable_pop enable_imap enable_smtp with_gss with_ssl with_gnutls with_sasl enable_debug enable_flock enable_fcntl enable_warnings enable_nfs_fix enable_mailtool enable_locales_fix with_exec_shell enable_exact_address enable_hcache with_tokyocabinet with_qdbm with_gdbm with_bdb enable_iconv with_libiconv_prefix enable_nls with_included_gettext with_idn with_wc_funcs enable_full_doc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-largefile omit support for large files --enable-gpgme Enable GPGME support --disable-pgp Disable PGP support --disable-smime Disable SMIME support --enable-external-dotlock Force use of an external dotlock program --enable-pop Enable POP3 support --enable-imap Enable IMAP support --enable-smtp include internal SMTP relay support --enable-debug Enable debugging support --enable-flock Use flock() to lock files --disable-fcntl Do NOT use fcntl() to lock files --disable-warnings Turn off compiler warnings (not recommended) --enable-nfs-fix Work around an NFS with broken attributes caching --enable-mailtool Enable Sun mailtool attachments support --enable-locales-fix The result of isprint() is unreliable --enable-exact-address Enable regeneration of email addresses --enable-hcache Enable header caching --disable-iconv Disable iconv support --disable-nls Do not use Native Language Support --disable-full-doc Omit disabled variables Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gpgme-prefix=PFX prefix where GPGME is installed (optional) --with-mixmaster[=PATH] Include Mixmaster support --with-slang[=DIR] Use S-Lang instead of ncurses --with-curses=DIR Where ncurses is installed --with-regex Use the GNU regex library --with-homespool[=FILE] File in user's directory where new mail is spooled --with-mailpath=DIR Directory where spool mailboxes are located --with-docdir=PATH Specify where to put the documentation --with-domain=DOMAIN Specify your DNS domain name --with-gss[=PFX] Compile in GSSAPI authentication for IMAP --with-ssl[=PFX] Enable TLS support using OpenSSL --with-gnutls[=PFX] enable TLS support using gnutls --with-sasl[=PFX] Use SASL network security library --with-exec-shell=SHELL Specify alternate shell (ONLY if /bin/sh is broken) --without-tokyocabinet Don't use tokyocabinet even if it is available --without-qdbm Don't use qdbm even if it is available --without-gdbm Don't use gdbm even if it is available --with-bdb[=DIR] Use BerkeleyDB4 if gdbm is not available --with-libiconv-prefix[=DIR] Search for libiconv in DIR/include and DIR/lib --with-included-gettext Use the GNU gettext library included here --with-idn=[PFX] Use GNU libidn for domain names --without-wc-funcs Do not use the system's wchar_t functions Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR # ------------------------------------ # Tests whether SYMBOL is declared, setting cache variable VAR accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 $as_echo_n "checking whether $2 is declared... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $2 (void) $2; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" mutt_cv_version=`cat $srcdir/VERSION` am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=mutt VERSION=$mutt_cv_version cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' CONFIG_STATUS_DEPENDENCIES='$(top_srcdir)/VERSION' DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = x""yes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h ALL_LINGUAS="de eu ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg ga" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prefix" >&5 $as_echo_n "checking for prefix... " >&6; } if test x$prefix = xNONE; then mutt_cv_prefix=$ac_default_prefix else mutt_cv_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_prefix" >&5 $as_echo "$mutt_cv_prefix" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then : break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 $as_echo_n "checking for function prototypes... " >&6; } if test "$ac_cv_prog_cc_c89" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define PROTOTYPES 1" >>confdefs.h $as_echo "#define __PROTOTYPES 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$ac_cv_prog_cc_stdc" != no; then U= ANSI2KNR= else U=_ ANSI2KNR=./ansi2knr fi # Ensure some checks needed by ansi2knr itself. for ac_header in string.h do : ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRING_H 1 _ACEOF fi done if test "x$U" != "x"; then as_fn_error "Compiler not ANSI compliant" "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if test "${ac_cv_c_inline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if test "${ac_cv_c_bigendian+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if test "${ac_cv_sys_largefile_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if test "${ac_cv_sys_file_offset_bits+set}" = set; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if test "${ac_cv_sys_large_files+set}" = set; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if test "${ac_cv_sys_largefile_source+set}" = set; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 $as_echo_n "checking size of off_t... " >&6; } if test "${ac_cv_sizeof_off_t+set}" = set; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : else if test "$ac_cv_type_off_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "cannot compute sizeof (off_t) See \`config.log' for more details." "$LINENO" 5; }; } else ac_cv_sizeof_off_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 $as_echo "$ac_cv_sizeof_off_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_OFF_T $ac_cv_sizeof_off_t _ACEOF # Extract the first word of "dbx", so it can be a program name with args. set dummy dbx; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DBX+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DBX in [\\/]* | ?:[\\/]*) ac_cv_path_DBX="$DBX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DBX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DBX" && ac_cv_path_DBX="no" ;; esac fi DBX=$ac_cv_path_DBX if test -n "$DBX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBX" >&5 $as_echo "$DBX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gdb", so it can be a program name with args. set dummy gdb; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GDB+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GDB in [\\/]* | ?:[\\/]*) ac_cv_path_GDB="$GDB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GDB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GDB" && ac_cv_path_GDB="no" ;; esac fi GDB=$ac_cv_path_GDB if test -n "$GDB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDB" >&5 $as_echo "$GDB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "sdb", so it can be a program name with args. set dummy sdb; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_SDB+set}" = set; then : $as_echo_n "(cached) " >&6 else case $SDB in [\\/]* | ?:[\\/]*) ac_cv_path_SDB="$SDB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SDB="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDB" && ac_cv_path_SDB="no" ;; esac fi SDB=$ac_cv_path_SDB if test -n "$SDB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDB" >&5 $as_echo "$SDB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test $GDB != no ; then DEBUGGER=$GDB elif test $DBX != no ; then DEBUGGER=$DBX elif test $SDB != no ; then DEBUGGER=$SDB else DEBUGGER=no fi for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" if test "x$ac_cv_type_uint32_t" = x""yes; then : $as_echo "#define HAVE_C99_INTTYPES 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if test "${ac_cv_sizeof_short+set}" = set; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "cannot compute sizeof (short) See \`config.log' for more details." "$LINENO" 5; }; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if test "${ac_cv_sizeof_int+set}" = set; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "cannot compute sizeof (int) See \`config.log' for more details." "$LINENO" 5; }; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if test "${ac_cv_sizeof_long+set}" = set; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "cannot compute sizeof (long) See \`config.log' for more details." "$LINENO" 5; }; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if test "${ac_cv_sizeof_long_long+set}" = set; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "cannot compute sizeof (long long) See \`config.log' for more details." "$LINENO" 5; }; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if test "${ac_cv_type_long_long_int+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test preprocessor. */ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) error in preprocessor; #endif #if ! (18446744073709551615ULL <= -1ull) error in preprocessor; #endif /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if test "$cross_compiling" = yes; then : ac_cv_type_long_long_int=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_type_long_long_int=yes else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else ac_cv_type_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi ac_aux_path_sendmail=/usr/sbin:/usr/lib # Extract the first word of "sendmail", so it can be a program name with args. set dummy sendmail; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_SENDMAIL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $SENDMAIL in [\\/]* | ?:[\\/]*) ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:$ac_aux_path_sendmail" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SENDMAIL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="/usr/sbin/sendmail" ;; esac fi SENDMAIL=$ac_cv_path_SENDMAIL if test -n "$SENDMAIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SENDMAIL" >&5 $as_echo "$SENDMAIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat >>confdefs.h <<_ACEOF #define SENDMAIL "$ac_cv_path_SENDMAIL" _ACEOF OPS='$(srcdir)/OPS' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with GPGME support" >&5 $as_echo_n "checking whether to build with GPGME support... " >&6; } # Check whether --enable-gpgme was given. if test "${enable_gpgme+set}" = set; then : enableval=$enable_gpgme; if test x$enableval = xyes; then enable_gpgme=yes fi fi if test x"$enable_gpgme" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # Check whether --with-gpgme-prefix was given. if test "${with_gpgme_prefix+set}" = set; then : withval=$with_gpgme_prefix; gpgme_config_prefix="$withval" else gpgme_config_prefix="" fi if test "x$gpgme_config_prefix" != x ; then GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config" fi # Extract the first word of "gpgme-config", so it can be a program name with args. set dummy gpgme-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GPGME_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GPGME_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GPGME_CONFIG="$GPGME_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GPGME_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GPGME_CONFIG" && ac_cv_path_GPGME_CONFIG="no" ;; esac fi GPGME_CONFIG=$ac_cv_path_GPGME_CONFIG if test -n "$GPGME_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPGME_CONFIG" >&5 $as_echo "$GPGME_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$GPGME_CONFIG" != "no" ; then gpgme_version=`$GPGME_CONFIG --version` fi gpgme_version_major=`echo $gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'` gpgme_version_minor=`echo $gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'` gpgme_version_micro=`echo $gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'` tmp=1.0.0 if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPGME - version >= $min_gpgme_version" >&5 $as_echo_n "checking for GPGME - version >= $min_gpgme_version... " >&6; } ok=no if test "$GPGME_CONFIG" != "no" ; then req_major=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_CFLAGS=`$GPGME_CONFIG --cflags` GPGME_LIBS=`$GPGME_CONFIG --libs` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define CRYPT_BACKEND_GPGME 1" >>confdefs.h else GPGME_CFLAGS="" GPGME_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } gpgme_found=no fi if test x"$gpgme_found" = xno; then as_fn_error "*** GPGME not found ***" "$LINENO" 5 else tmp=1.1.1 if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPGME - version >= $min_gpgme_version" >&5 $as_echo_n "checking for GPGME - version >= $min_gpgme_version... " >&6; } ok=no if test "$GPGME_CONFIG" != "no" ; then req_major=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_CFLAGS=`$GPGME_CONFIG --cflags` GPGME_LIBS=`$GPGME_CONFIG --libs` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_GPGME_PKA_TRUST 1" >>confdefs.h else GPGME_CFLAGS="" GPGME_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi #needed to get GPGME_LIBS and al correctly tmp=1.0.0 if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_gpgme_api=0 min_gpgme_version="$tmp" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPGME - version >= $min_gpgme_version" >&5 $as_echo_n "checking for GPGME - version >= $min_gpgme_version... " >&6; } ok=no if test "$GPGME_CONFIG" != "no" ; then req_major=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` req_minor=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` req_micro=`echo $min_gpgme_version | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` if test "$gpgme_version_major" -gt "$req_major"; then ok=yes else if test "$gpgme_version_major" -eq "$req_major"; then if test "$gpgme_version_minor" -gt "$req_minor"; then ok=yes else if test "$gpgme_version_minor" -eq "$req_minor"; then if test "$gpgme_version_micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then # If we have a recent GPGME, we should also check that the # API is compatible. if test "$req_gpgme_api" -gt 0 ; then tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` if test "$tmp" -gt 0 ; then if test "$req_gpgme_api" -ne "$tmp" ; then ok=no fi fi fi fi if test $ok = yes; then GPGME_CFLAGS=`$GPGME_CONFIG --cflags` GPGME_LIBS=`$GPGME_CONFIG --libs` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define CRYPT_BACKEND_GPGME 1" >>confdefs.h else GPGME_CFLAGS="" GPGME_LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS crypt-gpgme.o crypt-mod-pgp-gpgme.o crypt-mod-smime-gpgme.o" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --enable-pgp was given. if test "${enable_pgp+set}" = set; then : enableval=$enable_pgp; if test x$enableval = xno ; then have_pgp=no fi fi if test x$have_pgp != xno ; then $as_echo "#define CRYPT_BACKEND_CLASSIC_PGP 1" >>confdefs.h PGPAUX_TARGET="pgpring\$(EXEEXT) pgpewrap\$(EXEEXT)" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o crypt-mod-pgp-classic.o" fi # Check whether --enable-smime was given. if test "${enable_smime+set}" = set; then : enableval=$enable_smime; if test x$enableval = xno ; then have_smime=no fi fi if test x$have_smime != xno ; then $as_echo "#define CRYPT_BACKEND_CLASSIC_SMIME 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o crypt-mod-smime-classic.o" SMIMEAUX_TARGET="smime_keys" fi # Check whether --with-mixmaster was given. if test "${with_mixmaster+set}" = set; then : withval=$with_mixmaster; if test "$withval" != no then if test -x "$withval" then MIXMASTER="$withval" else MIXMASTER="mixmaster" fi OPS="$OPS \$(srcdir)/OPS.MIX" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o" cat >>confdefs.h <<_ACEOF #define MIXMASTER "$MIXMASTER" _ACEOF fi fi # We now require all OPS OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT " # Extract the first word of "ispell", so it can be a program name with args. set dummy ispell; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ISPELL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ISPELL in [\\/]* | ?:[\\/]*) ac_cv_path_ISPELL="$ISPELL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ISPELL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_ISPELL" && ac_cv_path_ISPELL="no" ;; esac fi ISPELL=$ac_cv_path_ISPELL if test -n "$ISPELL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ISPELL" >&5 $as_echo "$ISPELL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test $ISPELL != no; then cat >>confdefs.h <<_ACEOF #define ISPELL "$ISPELL" _ACEOF fi # Check whether --with-slang was given. if test "${with_slang+set}" = set; then : withval=$with_slang; { $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a BSD system" >&5 $as_echo_n "checking if this is a BSD system... " >&6; } if test "${mutt_cv_bsdish+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_bsdish=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include main () { #ifdef BSD exit (0); #else exit (1); #endif } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_bsdish=yes else mutt_cv_bsdish=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_bsdish" >&5 $as_echo "$mutt_cv_bsdish" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for S-Lang" >&5 $as_echo_n "checking for S-Lang... " >&6; } if test $withval = yes; then if test -d $srcdir/../slang; then mutt_cv_slang=$srcdir/../slang/src CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" else if test -d $mutt_cv_prefix/include/slang; then CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang" elif test -d /usr/include/slang; then CPPFLAGS="$CPPFLAGS -I/usr/include/slang" fi mutt_cv_slang=yes fi else if test -f $withval/src/slang.h; then mutt_cv_slang=$withval/src CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" else mutt_cv_slang=$withval if test -d $withval/include/slang; then CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" elif test -d $withval/include; then CPPFLAGS="$CPPFLAGS -I${withval}/include" fi LDFLAGS="$LDFLAGS -L${withval}/lib" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_slang" >&5 $as_echo "$mutt_cv_slang" >&6; } if test $mutt_cv_bsdish = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ltermlib" >&5 $as_echo_n "checking for main in -ltermlib... " >&6; } if test "${ac_cv_lib_termlib_main+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltermlib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_termlib_main=yes else ac_cv_lib_termlib_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termlib_main" >&5 $as_echo "$ac_cv_lib_termlib_main" >&6; } if test "x$ac_cv_lib_termlib_main" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBTERMLIB 1 _ACEOF LIBS="-ltermlib $LIBS" fi fi $as_echo "#define USE_SLANG_CURSES 1" >>confdefs.h $as_echo "#define HAVE_COLOR 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SLtt_get_terminfo in -lslang" >&5 $as_echo_n "checking for SLtt_get_terminfo in -lslang... " >&6; } if test "${ac_cv_lib_slang_SLtt_get_terminfo+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lslang -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char SLtt_get_terminfo (); int main () { return SLtt_get_terminfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_slang_SLtt_get_terminfo=yes else ac_cv_lib_slang_SLtt_get_terminfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_slang_SLtt_get_terminfo" >&5 $as_echo "$ac_cv_lib_slang_SLtt_get_terminfo" >&6; } if test "x$ac_cv_lib_slang_SLtt_get_terminfo" = x""yes; then : MUTTLIBS="$MUTTLIBS -lslang -lm" else as_fn_error "unable to compile. check config.log" "$LINENO" 5 fi else mutt_cv_curses=/usr # Check whether --with-curses was given. if test "${with_curses+set}" = set; then : withval=$with_curses; if test $withval != yes; then mutt_cv_curses=$withval fi if test x$mutt_cv_curses != x/usr; then LDFLAGS="$LDFLAGS -L${mutt_cv_curses}/lib" CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include" fi fi ac_fn_c_check_func "$LINENO" "initscr" "ac_cv_func_initscr" if test "x$ac_cv_func_initscr" = x""yes; then : else cf_ncurses="ncurses" for lib in ncurses ncursesw do as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_waddnwstr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for waddnwstr in -l$lib" >&5 $as_echo_n "checking for waddnwstr in -l$lib... " >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char waddnwstr (); int main () { return waddnwstr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval as_val=\$$as_ac_Lib if test "x$as_val" = x""yes; then : cf_ncurses="$lib"; break fi done as_ac_Lib=`$as_echo "ac_cv_lib_$cf_ncurses''_initscr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -l$cf_ncurses" >&5 $as_echo_n "checking for initscr in -l$cf_ncurses... " >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_ncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval as_val=\$$as_ac_Lib if test "x$as_val" = x""yes; then : MUTTLIBS="$MUTTLIBS -l$cf_ncurses" if test "$cf_ncurses" = ncursesw; then for ac_header in ncursesw/ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncursesw/ncurses.h" "ac_cv_header_ncursesw_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncursesw_ncurses_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSESW_NCURSES_H 1 _ACEOF cf_cv_ncurses_header="ncursesw/ncurses.h" fi done else for ac_header in ncurses/ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses/ncurses.h" "ac_cv_header_ncurses_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_ncurses_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_NCURSES_H 1 _ACEOF cf_cv_ncurses_header="ncurses/ncurses.h" else for ac_header in ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_H 1 _ACEOF cf_cv_ncurses_header="ncurses.h" fi done fi done fi else ac_fn_c_check_func "$LINENO" "initscr" "ac_cv_func_initscr" if test "x$ac_cv_func_initscr" = x""yes; then : else case $host_os in #(vi freebsd*) #(vi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgoto in -lmytinfo" >&5 $as_echo_n "checking for tgoto in -lmytinfo... " >&6; } if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgoto (); int main () { return tgoto (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mytinfo_tgoto=yes else ac_cv_lib_mytinfo_tgoto=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mytinfo_tgoto" >&5 $as_echo "$ac_cv_lib_mytinfo_tgoto" >&6; } if test "x$ac_cv_lib_mytinfo_tgoto" = x""yes; then : LIBS="-lmytinfo $LIBS" fi ;; hpux10.*|hpux11.*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lcur_colr" >&5 $as_echo_n "checking for initscr in -lcur_colr... " >&6; } if test "${ac_cv_lib_cur_colr_initscr+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcur_colr $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cur_colr_initscr=yes else ac_cv_lib_cur_colr_initscr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cur_colr_initscr" >&5 $as_echo "$ac_cv_lib_cur_colr_initscr" >&6; } if test "x$ac_cv_lib_cur_colr_initscr" = x""yes; then : LIBS="-lcur_colr $LIBS" CFLAGS="-I/usr/include/curses_colr $CFLAGS" ac_cv_func_initscr=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lHcurses" >&5 $as_echo_n "checking for initscr in -lHcurses... " >&6; } if test "${ac_cv_lib_Hcurses_initscr+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lHcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Hcurses_initscr=yes else ac_cv_lib_Hcurses_initscr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Hcurses_initscr" >&5 $as_echo "$ac_cv_lib_Hcurses_initscr" >&6; } if test "x$ac_cv_lib_Hcurses_initscr" = x""yes; then : # HP's header uses __HP_CURSES, but user claims _HP_CURSES. LIBS="-lHcurses $LIBS" CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS" ac_cv_func_initscr=yes fi fi ;; linux*) # Suse Linux does not follow /usr/lib convention LIBS="$LIBS -L/lib" ;; esac if test ".$With5lib" != ".no" ; then if test -d /usr/5lib ; then # SunOS 3.x or 4.x CPPFLAGS="$CPPFLAGS -I/usr/5include" LIBS="$LIBS -L/usr/5lib" fi fi if test ".$ac_cv_func_initscr" != .yes ; then cf_save_LIBS="$LIBS" cf_term_lib="" cf_curs_lib="" # Check for library containing tgoto. Do this before curses library # because it may be needed to link the test-case for initscr. ac_fn_c_check_func "$LINENO" "tgoto" "ac_cv_func_tgoto" if test "x$ac_cv_func_tgoto" = x""yes; then : cf_term_lib=predefined else for cf_term_lib in termcap termlib unknown do as_ac_Lib=`$as_echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgoto in -l$cf_term_lib" >&5 $as_echo_n "checking for tgoto in -l$cf_term_lib... " >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_term_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgoto (); int main () { return tgoto (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval as_val=\$$as_ac_Lib if test "x$as_val" = x""yes; then : break fi done fi # Check for library containing initscr test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown do as_ac_Lib=`$as_echo "ac_cv_lib_$cf_curs_lib''_initscr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -l$cf_curs_lib" >&5 $as_echo_n "checking for initscr in -l$cf_curs_lib... " >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_curs_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval as_val=\$$as_ac_Lib if test "x$as_val" = x""yes; then : break fi done test $cf_curs_lib = unknown && as_fn_error "no curses library found" "$LINENO" 5 LIBS="-l$cf_curs_lib $cf_save_LIBS" if test "$cf_term_lib" = unknown ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can link with $cf_curs_lib library" >&5 $as_echo_n "checking if we can link with $cf_curs_lib library... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <${cf_cv_ncurses_header-curses.h}> int main () { initscr() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cf_result=yes else cf_result=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cf_result" >&5 $as_echo "$cf_result" >&6; } test $cf_result = no && as_fn_error "Cannot link curses library" "$LINENO" 5 elif test "$cf_term_lib" != predefined ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 $as_echo_n "checking if we need both $cf_curs_lib and $cf_term_lib libraries... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <${cf_cv_ncurses_header-curses.h}> int main () { initscr(); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cf_result=no else LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <${cf_cv_ncurses_header-curses.h}> int main () { initscr() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cf_result=yes else cf_result=error fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cf_result" >&5 $as_echo "$cf_result" >&6; } fi fi fi fi fi old_LIBS="$LIBS" LIBS="$LIBS $MUTTLIBS" for ac_func in start_color typeahead bkgdset curs_set meta use_default_colors resizeterm do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_func declaration" >&5 $as_echo_n "checking for $ac_func declaration... " >&6; } if { as_var=ac_cv_func_decl_$ac_func; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <${cf_cv_ncurses_header-curses.h}> int main () { #ifndef ${ac_func} extern int ${ac_func}(); #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <${cf_cv_ncurses_header-curses.h}> int main () { #ifndef ${ac_func} int (*p)() = ${ac_func}; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "ac_cv_func_decl_$ac_func=yes" else eval "ac_cv_func_decl_$ac_func=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else eval "ac_cv_func_decl_$ac_func=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if eval "test \"`echo '$ac_cv_func_'decl_$ac_func`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ac_tr_func=`echo HAVE_$ac_func | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define $ac_tr_func 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "$ac_cv_func_decl_start_color" = yes; then $as_echo "#define HAVE_COLOR 1" >>confdefs.h fi if test "$ac_cv_func_decl_resizeterm" = yes; then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" fi LIBS="$old_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in stdarg.h sys/ioctl.h ioctl.h sysexits.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/time.h sys/resource.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unix.h do : ac_fn_c_check_header_mongrel "$LINENO" "unix.h" "ac_cv_header_unix_h" "$ac_includes_default" if test "x$ac_cv_header_unix_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNIX_H 1 _ACEOF fi done for ac_func in setrlimit getsid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if test "${ac_cv_type_signal+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 $as_echo_n "checking for sig_atomic_t in signal.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sig_atomic_t" >/dev/null 2>&1; then : ac_cv_type_sig_atomic_t=yes; cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "volatile.*sig_atomic_t" >/dev/null 2>&1; then : is_sig_atomic_t_volatile=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, volatile" >&5 $as_echo "yes, volatile" >&6; } else is_sig_atomic_t_volatile=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, non volatile" >&5 $as_echo "yes, non volatile" >&6; } fi rm -f conftest* else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default" if test "x$ac_cv_type_sig_atomic_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define sig_atomic_t int _ACEOF fi is_sig_atomic_t_volatile=no fi rm -f conftest* if test $is_sig_atomic_t_volatile = 'yes' then $as_echo "#define SIG_ATOMIC_VOLATILE_T sig_atomic_t" >>confdefs.h else $as_echo "#define SIG_ATOMIC_VOLATILE_T volatile sig_atomic_t" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include /* NetBSD declares sys_siglist in unistd.h. */ #ifdef HAVE_UNISTD_H # include #endif " if test "x$ac_cv_have_decl_sys_siglist" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SYS_SIGLIST $ac_have_decl _ACEOF ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi for ac_func in fgetpos memmove setegid srand48 strerror do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in setenv strcasecmp strdup strsep strtok_r wcscasecmp do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done for ac_func in strcasestr mkdtemp do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done ac_fn_c_check_func "$LINENO" "getopt" "ac_cv_func_getopt" if test "x$ac_cv_func_getopt" = x""yes; then : fi if test $ac_cv_func_getopt = yes; then for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF fi done fi SNPRINTFOBJS="" ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = x""yes; then : mutt_cv_func_snprintf=yes else mutt_cv_func_snprintf=no fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = x""yes; then : mutt_cv_func_vsnprintf=yes else mutt_cv_func_vsnprintf=no fi if test $mutt_cv_func_snprintf = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether your system's snprintf is C99 compliant" >&5 $as_echo_n "checking whether your system's snprintf is C99 compliant... " >&6; } if test "${mutt_cv_c99_snprintf+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_c99_snprintf=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main() { char buf[8]; int len = snprintf(buf, 4, "1234567"); return (len != 7 || buf[3] != '\0'); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_c99_snprintf=yes else mutt_cv_c99_snprintf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_c99_snprintf" >&5 $as_echo "$mutt_cv_c99_snprintf" >&6; } else mutt_cv_c99_snprintf=no fi if test $mutt_cv_func_vsnprintf = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether your system's vsnprintf is C99 compliant" >&5 $as_echo_n "checking whether your system's vsnprintf is C99 compliant... " >&6; } if test "${mutt_cv_c99_vsnprintf+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_c99_vsnprintf=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int foo(const char *fmt, ...) { char buf[8]; int len; va_list ap; va_start(ap, fmt); len = vsnprintf(buf, 4, fmt, ap); va_end(ap); return (len != 7 || buf[3] != '\0'); } int main() { return foo("%s", "1234567"); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_c99_vsnprintf=yes else mutt_cv_c99_vsnprintf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_c99_vsnprintf" >&5 $as_echo "$mutt_cv_c99_vsnprintf" >&6; } else mutt_cv_c99_vsnprintf=no fi if test $mutt_cv_c99_snprintf = yes; then $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h fi if test $mutt_cv_c99_vsnprintf = yes; then $as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h fi if test $mutt_cv_c99_snprintf = no -o $mutt_cv_c99_vsnprintf = no; then case " $LIBOBJS " in *" snprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS snprintf.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 $as_echo_n "checking for va_copy... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { va_list ap1, ap2; va_copy(ap1, ap2); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: va_copy" >&5 $as_echo "va_copy" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { va_list ap1, ap2; __va_copy(ap1, ap2); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define va_copy __va_copy" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: __va_copy" >&5 $as_echo "__va_copy" >&6; } else $as_echo "#define va_copy(dest,src) memcpy(&dest,&src,sizeof(va_list))" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: memcpy" >&5 $as_echo "memcpy" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for ac_func in ftruncate do : ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FTRUNCATE 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for chsize in -lx" >&5 $as_echo_n "checking for chsize in -lx... " >&6; } if test "${ac_cv_lib_x_chsize+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char chsize (); int main () { return chsize (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_x_chsize=yes else ac_cv_lib_x_chsize=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_x_chsize" >&5 $as_echo "$ac_cv_lib_x_chsize" >&6; } if test "x$ac_cv_lib_x_chsize" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBX 1 _ACEOF LIBS="-lx $LIBS" fi fi done for ac_func in strftime do : ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRFTIME 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 $as_echo_n "checking for strftime in -lintl... " >&6; } if test "${ac_cv_lib_intl_strftime+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strftime (); int main () { return strftime (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_strftime=yes else ac_cv_lib_intl_strftime=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 $as_echo "$ac_cv_lib_intl_strftime" >&6; } if test "x$ac_cv_lib_intl_strftime" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBINTL 1 _ACEOF LIBS="-lintl $LIBS" fi fi done for ac_func in fchdir do : ac_fn_c_check_func "$LINENO" "fchdir" "ac_cv_func_fchdir" if test "x$ac_cv_func_fchdir" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FCHDIR 1 _ACEOF else mutt_cv_fchdir=no fi done # Check whether --with-regex was given. if test "${with_regex+set}" = set; then : withval=$with_regex; mutt_cv_regex=yes else for ac_func in regcomp do : ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" if test "x$ac_cv_func_regcomp" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_REGCOMP 1 _ACEOF mutt_cv_regex=no else mutt_cv_regex=yes fi done fi if test $mutt_cv_regex = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether your system's regexp library is completely broken" >&5 $as_echo_n "checking whether your system's regexp library is completely broken... " >&6; } if test "${mutt_cv_regex_broken+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_regex_broken=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_regex_broken=no else mutt_cv_regex_broken=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_regex_broken" >&5 $as_echo "$mutt_cv_regex_broken" >&6; } if test $mutt_cv_regex_broken = yes ; then echo "Using the included GNU regex instead." >&6 mutt_cv_regex=yes fi fi if test $mutt_cv_regex = yes; then $as_echo "#define USE_GNU_REGEX 1" >>confdefs.h case " $LIBOBJS " in *" regex.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS regex.$ac_objext" ;; esac fi # Check whether --with-homespool was given. if test "${with_homespool+set}" = set; then : withval=$with_homespool; with_homespool=${withval} fi if test x$with_homespool != x; then if test $with_homespool = yes; then with_homespool=mailbox fi cat >>confdefs.h <<_ACEOF #define MAILPATH "$with_homespool" _ACEOF $as_echo "#define HOMESPOOL 1" >>confdefs.h $as_echo "#define USE_DOTLOCK 1" >>confdefs.h mutt_cv_setgid=no else # Check whether --with-mailpath was given. if test "${with_mailpath+set}" = set; then : withval=$with_mailpath; mutt_cv_mailpath=$withval else { $as_echo "$as_me:${as_lineno-$LINENO}: checking where new mail is stored" >&5 $as_echo_n "checking where new mail is stored... " >&6; } if test "${mutt_cv_mailpath+set}" = set; then : $as_echo_n "(cached) " >&6 else mutt_cv_mailpath=no if test -d /var/mail; then mutt_cv_mailpath=/var/mail elif test -d /var/spool/mail; then mutt_cv_mailpath=/var/spool/mail elif test -d /usr/spool/mail; then mutt_cv_mailpath=/usr/spool/mail elif test -d /usr/mail; then mutt_cv_mailpath=/usr/mail fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_mailpath" >&5 $as_echo "$mutt_cv_mailpath" >&6; } fi if test "$mutt_cv_mailpath" = no; then as_fn_error "\"Could not determine where new mail is stored.\"" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define MAILPATH "$mutt_cv_mailpath" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $mutt_cv_mailpath is world writable" >&5 $as_echo_n "checking if $mutt_cv_mailpath is world writable... " >&6; } if test "${mutt_cv_worldwrite+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_worldwrite=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (int argc, char **argv) { struct stat s; stat ("$mutt_cv_mailpath", &s); if (s.st_mode & S_IWOTH) exit (0); exit (1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_worldwrite=yes else mutt_cv_worldwrite=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_worldwrite" >&5 $as_echo "$mutt_cv_worldwrite" >&6; } mutt_cv_setgid=no if test $mutt_cv_worldwrite = yes; then $as_echo "#define USE_DOTLOCK 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $mutt_cv_mailpath is group writable" >&5 $as_echo_n "checking if $mutt_cv_mailpath is group writable... " >&6; } if test "${mutt_cv_groupwrite+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : mutt_cv_groupwrite=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main (int argc, char **argv) { struct stat s; stat ("$mutt_cv_mailpath", &s); if (s.st_mode & S_IWGRP) exit (0); exit (1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_groupwrite=yes else mutt_cv_groupwrite=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_groupwrite" >&5 $as_echo "$mutt_cv_groupwrite" >&6; } if test $mutt_cv_groupwrite = yes; then $as_echo "#define USE_DOTLOCK 1" >>confdefs.h $as_echo "#define USE_SETGID 1" >>confdefs.h mutt_cv_setgid=yes fi fi fi # Check whether --enable-external_dotlock was given. if test "${enable_external_dotlock+set}" = set; then : enableval=$enable_external_dotlock; mutt_cv_external_dotlock="$enableval" fi if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \ || test "x$mutt_cv_external_dotlock" = "xyes" then $as_echo "#define DL_STANDALONE 1" >>confdefs.h DOTLOCK_TARGET="mutt_dotlock\$(EXEEXT)" else MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o" fi if test -z "$datarootdir"; then datarootdir='${prefix}/share' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to put the documentation" >&5 $as_echo_n "checking where to put the documentation... " >&6; } # Check whether --with-docdir was given. if test "${with_docdir+set}" = set; then : withval=$with_docdir; mutt_cv_docdir=$withval else mutt_cv_docdir='${datarootdir}/doc/mutt' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_docdir" >&5 $as_echo "$mutt_cv_docdir" >&6; } if test -z "$docdir" -o -n "$with_docdir" then docdir=$mutt_cv_docdir fi if test x$mutt_cv_setgid = xyes; then DOTLOCK_GROUP='mail' DOTLOCK_PERMISSION=2755 else DOTLOCK_GROUP='' DOTLOCK_PERMISSION=755 fi # Check whether --with-domain was given. if test "${with_domain+set}" = set; then : withval=$with_domain; if test $withval != yes; then if test $withval != no; then cat >>confdefs.h <<_ACEOF #define DOMAIN "$withval" _ACEOF fi fi fi need_socket="no" # Check whether --enable-pop was given. if test "${enable_pop+set}" = set; then : enableval=$enable_pop; if test x$enableval = xyes ; then $as_echo "#define USE_POP 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o" need_pop="yes" need_socket="yes" need_md5="yes" fi fi # Check whether --enable-imap was given. if test "${enable_imap+set}" = set; then : enableval=$enable_imap; if test x$enableval = xyes ; then $as_echo "#define USE_IMAP 1" >>confdefs.h LIBIMAP="-Limap -limap" LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a" need_imap="yes" need_socket="yes" need_md5="yes" fi fi if test x$need_imap = xyes; then BUILD_IMAP_TRUE= BUILD_IMAP_FALSE='#' else BUILD_IMAP_TRUE='#' BUILD_IMAP_FALSE= fi # Check whether --enable-smtp was given. if test "${enable_smtp+set}" = set; then : enableval=$enable_smtp; if test $enableval = yes; then $as_echo "#define USE_SMTP 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smtp.o" need_socket="yes" fi fi if test x"$need_imap" = xyes -o x"$need_pop" = xyes ; then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS bcache.o" fi if test "$need_socket" = "yes" then for ac_header in sys/select.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" if test "x$ac_cv_header_sys_select_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SELECT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 $as_echo_n "checking for socklen_t... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "socklen_t" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define socklen_t int" >>confdefs.h fi rm -f conftest* ac_fn_c_check_func "$LINENO" "gethostent" "ac_cv_func_gethostent" if test "x$ac_cv_func_gethostent" = x""yes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostent in -lnsl" >&5 $as_echo_n "checking for gethostent in -lnsl... " >&6; } if test "${ac_cv_lib_nsl_gethostent+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostent (); int main () { return gethostent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostent=yes else ac_cv_lib_nsl_gethostent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostent" >&5 $as_echo "$ac_cv_lib_nsl_gethostent" >&6; } if test "x$ac_cv_lib_nsl_gethostent" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF LIBS="-lnsl $LIBS" fi fi ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = x""yes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if test "${ac_cv_lib_socket_setsockopt+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi fi for ac_func in getaddrinfo do : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF fi done $as_echo "#define USE_SOCKET 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o" fi # Check whether --with-gss was given. if test "${with_gss+set}" = set; then : withval=$with_gss; gss_prefix="$withval" else gss_prefix="no" fi if test "$gss_prefix" != "no" then if test "$need_imap" = "yes" then GSSAPI_PREFIX=$gss_prefix GSSAPI_IMPL="none" saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" saved_LIBS="$LIBS" if test "$GSSAPI_PREFIX" != "yes" then krb5_path="$GSSAPI_PREFIX/bin" else krb5_path="$PATH" fi # Extract the first word of "krb5-config", so it can be a program name with args. set dummy krb5-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_KRB5CFGPATH+set}" = set; then : $as_echo_n "(cached) " >&6 else case $KRB5CFGPATH in [\\/]* | ?:[\\/]*) ac_cv_path_KRB5CFGPATH="$KRB5CFGPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $krb5_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_KRB5CFGPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_KRB5CFGPATH" && ac_cv_path_KRB5CFGPATH="none" ;; esac fi KRB5CFGPATH=$ac_cv_path_KRB5CFGPATH if test -n "$KRB5CFGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KRB5CFGPATH" >&5 $as_echo "$KRB5CFGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$KRB5CFGPATH" != "none" then GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`" case "`$KRB5CFGPATH --version`" in "Kerberos 5 "*) GSSAPI_IMPL="MIT";; ?eimdal*) GSSAPI_IMPL="Heimdal";; *) GSSAPI_IMPL="Unknown";; esac else if test "$GSSAPI_PREFIX" != "yes" then GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_init_sec_context in -lgssapi_krb5" >&5 $as_echo_n "checking for gss_init_sec_context in -lgssapi_krb5... " >&6; } if test "${ac_cv_lib_gssapi_krb5_gss_init_sec_context+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gss_init_sec_context (); int main () { return gss_init_sec_context (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gssapi_krb5_gss_init_sec_context=yes else ac_cv_lib_gssapi_krb5_gss_init_sec_context=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gssapi_krb5_gss_init_sec_context" >&5 $as_echo "$ac_cv_lib_gssapi_krb5_gss_init_sec_context" >&6; } if test "x$ac_cv_lib_gssapi_krb5_gss_init_sec_context" = x""yes; then : GSSAPI_IMPL="MIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" fi if test "$GSSAPI_IMPL" = "none" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_init_sec_context in -lgssapi" >&5 $as_echo_n "checking for gss_init_sec_context in -lgssapi... " >&6; } if test "${ac_cv_lib_gssapi_gss_init_sec_context+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgssapi -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gss_init_sec_context (); int main () { return gss_init_sec_context (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gssapi_gss_init_sec_context=yes else ac_cv_lib_gssapi_gss_init_sec_context=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gssapi_gss_init_sec_context" >&5 $as_echo "$ac_cv_lib_gssapi_gss_init_sec_context" >&6; } if test "x$ac_cv_lib_gssapi_gss_init_sec_context" = x""yes; then : GSSAPI_IMPL="Heimdal" GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err" fi fi if test "$GSSAPI_IMPL" = "none" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for g_order_init in -lgssapi_krb5" >&5 $as_echo_n "checking for g_order_init in -lgssapi_krb5... " >&6; } if test "${ac_cv_lib_gssapi_krb5_g_order_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgssapi_krb5 -lkrb5 -lcrypto -lcom_err $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char g_order_init (); int main () { return g_order_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gssapi_krb5_g_order_init=yes else ac_cv_lib_gssapi_krb5_g_order_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gssapi_krb5_g_order_init" >&5 $as_echo "$ac_cv_lib_gssapi_krb5_g_order_init" >&6; } if test "x$ac_cv_lib_gssapi_krb5_g_order_init" = x""yes; then : GSSAPI_IMPL="OldMIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" fi fi fi CPPFLAGS="$saved_CPPFLAGS" LDFLAGS="$saved_LDFLAGS" LIBS="$saved_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking GSSAPI implementation" >&5 $as_echo_n "checking GSSAPI implementation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSSAPI_IMPL" >&5 $as_echo "$GSSAPI_IMPL" >&6; } if test "$GSSAPI_IMPL" = "none" then cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache { $as_echo "$as_me:${as_lineno-$LINENO}: result: GSSAPI libraries not found" >&5 $as_echo "GSSAPI libraries not found" >&6; } fi if test "$GSSAPI_IMPL" = "Heimdal" then $as_echo "#define HAVE_HEIMDAL 1" >>confdefs.h fi CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS" $as_echo "#define USE_GSS 1" >>confdefs.h need_gss="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GSS was requested but IMAP is not enabled" >&5 $as_echo "$as_me: WARNING: GSS was requested but IMAP is not enabled" >&2;} fi fi if test x$need_gss = xyes; then USE_GSS_TRUE= USE_GSS_FALSE='#' else USE_GSS_TRUE='#' USE_GSS_FALSE= fi # Check whether --with-ssl was given. if test "${with_ssl+set}" = set; then : withval=$with_ssl; if test "$with_ssl" != "no" then if test "$need_socket" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SSL support is only useful with POP, IMAP or SMTP support" >&5 $as_echo "$as_me: WARNING: SSL support is only useful with POP, IMAP or SMTP support" >&2;} else if test "$with_ssl" != "yes" then LDFLAGS="$LDFLAGS -L$withval/lib" CPPFLAGS="$CPPFLAGS -I$withval/include" fi saved_LIBS="$LIBS" crypto_libs="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if test "${ac_cv_lib_z_deflate+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = x""yes; then : crypto_libs=-lz fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X509_new in -lcrypto" >&5 $as_echo_n "checking for X509_new in -lcrypto... " >&6; } if test "${ac_cv_lib_crypto_X509_new+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $crypto_libs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char X509_new (); int main () { return X509_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypto_X509_new=yes else ac_cv_lib_crypto_X509_new=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_X509_new" >&5 $as_echo "$ac_cv_lib_crypto_X509_new" >&6; } if test "x$ac_cv_lib_crypto_X509_new" = x""yes; then : crypto_libs="-lcrypto $crypto_libs" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_new in -lssl" >&5 $as_echo_n "checking for SSL_new in -lssl... " >&6; } if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $crypto_libs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char SSL_new (); int main () { return SSL_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ssl_SSL_new=yes else ac_cv_lib_ssl_SSL_new=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_new" >&5 $as_echo "$ac_cv_lib_ssl_SSL_new" >&6; } if test "x$ac_cv_lib_ssl_SSL_new" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSSL 1 _ACEOF LIBS="-lssl $LIBS" else as_fn_error "Unable to find SSL library" "$LINENO" 5 fi LIBS="$LIBS $crypto_libs" for ac_func in RAND_status RAND_egd do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done $as_echo "#define USE_SSL 1" >>confdefs.h $as_echo "#define USE_SSL_OPENSSL 1" >>confdefs.h LIBS="$saved_LIBS" MUTTLIBS="$MUTTLIBS -lssl $crypto_libs" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o" need_ssl=yes fi fi fi # Check whether --with-gnutls was given. if test "${with_gnutls+set}" = set; then : withval=$with_gnutls; gnutls_prefix="$withval" else gnutls_prefix="no" fi if test "$gnutls_prefix" != "no" && test x"$need_ssl" != xyes then if test "$need_socket" != "yes" then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SSL support is only useful with POP, IMAP or SMTP support" >&5 $as_echo "$as_me: WARNING: SSL support is only useful with POP, IMAP or SMTP support" >&2;} else if test "$gnutls_prefix" != "yes" then LDFLAGS="$LDFLAGS -L$gnutls_prefix/lib" CPPFLAGS="$CPPFLAGS -I$gnutls_prefix/include" fi saved_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnutls_check_version in -lgnutls" >&5 $as_echo_n "checking for gnutls_check_version in -lgnutls... " >&6; } if test "${ac_cv_lib_gnutls_gnutls_check_version+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgnutls $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gnutls_check_version (); int main () { return gnutls_check_version (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gnutls_gnutls_check_version=yes else ac_cv_lib_gnutls_gnutls_check_version=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnutls_gnutls_check_version" >&5 $as_echo "$ac_cv_lib_gnutls_gnutls_check_version" >&6; } if test "x$ac_cv_lib_gnutls_gnutls_check_version" = x""yes; then : ac_fn_c_check_decl "$LINENO" "GNUTLS_VERIFY_DISABLE_TIME_CHECKS" "ac_cv_have_decl_GNUTLS_VERIFY_DISABLE_TIME_CHECKS" "#include " if test "x$ac_cv_have_decl_GNUTLS_VERIFY_DISABLE_TIME_CHECKS" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GNUTLS_VERIFY_DISABLE_TIME_CHECKS $ac_have_decl _ACEOF LIBS="$saved_LIBS" MUTTLIBS="$MUTTLIBS -lgnutls" $as_echo "#define USE_SSL 1" >>confdefs.h $as_echo "#define USE_SSL_GNUTLS 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_gnutls.o" need_ssl=yes else as_fn_error "could not find libgnutls" "$LINENO" 5 fi fi fi if test x$need_ssl = xyes; then USE_SSL_TRUE= USE_SSL_FALSE='#' else USE_SSL_TRUE='#' USE_SSL_FALSE= fi # Check whether --with-sasl was given. if test "${with_sasl+set}" = set; then : withval=$with_sasl; if test "$with_sasl" != "no" then if test "$need_socket" != "yes" then as_fn_error "SASL support is only useful with POP or IMAP support" "$LINENO" 5 fi if test "$with_sasl" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_sasl/include" LDFLAGS="$LDFLAGS -L$with_sasl/lib" fi saved_LIBS="$LIBS" LIBS= # OpenSolaris provides a SASL2 interface in libsasl sasl_libs="sasl2 sasl" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sasl_encode64" >&5 $as_echo_n "checking for library containing sasl_encode64... " >&6; } if test "${ac_cv_search_sasl_encode64+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sasl_encode64 (); int main () { return sasl_encode64 (); ; return 0; } _ACEOF for ac_lib in '' $sasl_libs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sasl_encode64=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_sasl_encode64+set}" = set; then : break fi done if test "${ac_cv_search_sasl_encode64+set}" = set; then : else ac_cv_search_sasl_encode64=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sasl_encode64" >&5 $as_echo "$ac_cv_search_sasl_encode64" >&6; } ac_res=$ac_cv_search_sasl_encode64 if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error "could not find sasl lib" "$LINENO" 5 fi MUTTLIBS="$MUTTLIBS $LIBS" MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" LIBS="$saved_LIBS" $as_echo "#define USE_SASL 1" >>confdefs.h need_sasl=yes fi fi if test x$need_sasl = xyes; then USE_SASL_TRUE= USE_SASL_FALSE='#' else USE_SASL_TRUE='#' USE_SASL_FALSE= fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test x$enableval = xyes ; then $as_echo "#define DEBUG 1" >>confdefs.h fi fi # Check whether --enable-flock was given. if test "${enable_flock+set}" = set; then : enableval=$enable_flock; if test $enableval = yes; then $as_echo "#define USE_FLOCK 1" >>confdefs.h fi fi mutt_cv_fcntl=yes # Check whether --enable-fcntl was given. if test "${enable_fcntl+set}" = set; then : enableval=$enable_fcntl; if test $enableval = no; then mutt_cv_fcntl=no; fi fi if test $mutt_cv_fcntl = yes; then $as_echo "#define USE_FCNTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct dirent defines d_ino" >&5 $as_echo_n "checking whether struct dirent defines d_ino... " >&6; } ac_cv_dirent_d_ino=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct dirent dp; (void)dp.d_ino ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_dirent_d_ino=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x$ac_cv_dirent_d_ino = xyes ; then $as_echo "#define HAVE_DIRENT_D_INO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dirent_d_ino" >&5 $as_echo "$ac_cv_dirent_d_ino" >&6; } mutt_cv_warnings=yes # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; if test $enableval = no; then mutt_cv_warnings=no fi fi if test x$GCC = xyes && test $mutt_cv_warnings = yes; then CFLAGS="-Wall -pedantic -Wno-long-long $CFLAGS" fi # Check whether --enable-nfs-fix was given. if test "${enable_nfs_fix+set}" = set; then : enableval=$enable_nfs_fix; if test x$enableval = xyes; then $as_echo "#define NFS_ATTRIBUTE_HACK 1" >>confdefs.h fi fi # Check whether --enable-mailtool was given. if test "${enable_mailtool+set}" = set; then : enableval=$enable_mailtool; if test x$enableval = xyes; then $as_echo "#define SUN_ATTACHMENT 1" >>confdefs.h fi fi # Check whether --enable-locales-fix was given. if test "${enable_locales_fix+set}" = set; then : enableval=$enable_locales_fix; if test x$enableval = xyes; then $as_echo "#define LOCALES_HACK 1" >>confdefs.h fi fi # Check whether --with-exec-shell was given. if test "${with_exec_shell+set}" = set; then : withval=$with_exec_shell; if test $withval != yes; then cat >>confdefs.h <<_ACEOF #define EXECSHELL "$withval" _ACEOF else cat >>confdefs.h <<_ACEOF #define EXECSHELL "/bin/sh" _ACEOF fi else cat >>confdefs.h <<_ACEOF #define EXECSHELL "/bin/sh" _ACEOF fi # Check whether --enable-exact-address was given. if test "${enable_exact_address+set}" = set; then : enableval=$enable_exact_address; if test $enableval = yes; then $as_echo "#define EXACT_ADDRESS 1" >>confdefs.h fi fi db_found=no db_requested=auto # Check whether --enable-hcache was given. if test "${enable_hcache+set}" = set; then : enableval=$enable_hcache; fi # Check whether --with-tokyocabinet was given. if test "${with_tokyocabinet+set}" = set; then : withval=$with_tokyocabinet; fi # Check whether --with-qdbm was given. if test "${with_qdbm+set}" = set; then : withval=$with_qdbm; fi # Check whether --with-gdbm was given. if test "${with_gdbm+set}" = set; then : withval=$with_gdbm; fi # Check whether --with-bdb was given. if test "${with_bdb+set}" = set; then : withval=$with_bdb; fi db_found=no if test x$enable_hcache = xyes then $as_echo "#define USE_HCACHE 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS hcache.o" OLDCPPFLAGS="$CPPFLAGS" OLDLDFLAGS="$LDFLAGS" OLDLIBS="$LIBS" need_md5="yes" if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "no" then db_requested=tc fi if test -n "$with_qdbm" && test "$with_qdbm" != "no" then if test "$db_requested" != "auto" then as_fn_error "more than one header cache engine requested." "$LINENO" 5 else db_requested=qdbm fi fi if test -n "$with_gdbm" && test "$with_gdbm" != "no" then if test "$db_requested" != "auto" then as_fn_error "more than one header cache engine requested." "$LINENO" 5 else db_requested=gdbm fi fi if test -n "$with_bdb" && test "$with_bdb" != "no" then if test "$db_requested" != "auto" then as_fn_error "more than one header cache engine requested." "$LINENO" 5 else db_requested=bdb fi fi if test "$with_tokyocabinet" != "no" \ && test "$db_requested" = auto -o "$db_requested" = tc then if test -n "$with_tokyocabinet" && test "$with_tokyocabinet" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_tokyocabinet/include" LDFLAGS="$LDFLAGS -L$with_tokyocabinet/lib" fi ac_fn_c_check_header_mongrel "$LINENO" "tcbdb.h" "ac_cv_header_tcbdb_h" "$ac_includes_default" if test "x$ac_cv_header_tcbdb_h" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcbdbopen in -ltokyocabinet" >&5 $as_echo_n "checking for tcbdbopen in -ltokyocabinet... " >&6; } if test "${ac_cv_lib_tokyocabinet_tcbdbopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltokyocabinet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tcbdbopen (); int main () { return tcbdbopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tokyocabinet_tcbdbopen=yes else ac_cv_lib_tokyocabinet_tcbdbopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tokyocabinet_tcbdbopen" >&5 $as_echo "$ac_cv_lib_tokyocabinet_tcbdbopen" >&6; } if test "x$ac_cv_lib_tokyocabinet_tcbdbopen" = x""yes; then : MUTTLIBS="$MUTTLIBS -ltokyocabinet" $as_echo "#define HAVE_TC 1" >>confdefs.h db_found=tc else CPPFLAGS="$OLDCPPFLAGS" LDFLAGS="$OLDLDFLAGS" fi fi if test "$db_requested" != auto && test "$db_found" != "$db_requested" then as_fn_error "Tokyo Cabinet could not be used. Check config.log for details." "$LINENO" 5 fi fi if test "$with_qdbm" != "no" && test $db_found = no \ && test "$db_requested" = auto -o "$db_requested" = qdbm then if test -n "$with_qdbm" && test "$with_qdbm" != "yes" then if test -d $with_qdbm/include/qdbm; then CPPFLAGS="$CPPFLAGS -I$with_qdbm/include/qdbm" else CPPFLAGS="$CPPFLAGS -I$with_qdbm/include" fi LDFLAGS="$LDFLAGS -L$with_qdbm/lib" else if test -d /usr/include/qdbm; then CPPFLAGS="$CPPFLAGS -I/usr/include/qdbm" fi fi saved_LIBS="$LIBS" for ac_header in villa.h do : ac_fn_c_check_header_mongrel "$LINENO" "villa.h" "ac_cv_header_villa_h" "$ac_includes_default" if test "x$ac_cv_header_villa_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VILLA_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vlopen in -lqdbm" >&5 $as_echo_n "checking for vlopen in -lqdbm... " >&6; } if test "${ac_cv_lib_qdbm_vlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lqdbm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char vlopen (); int main () { return vlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_qdbm_vlopen=yes else ac_cv_lib_qdbm_vlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_qdbm_vlopen" >&5 $as_echo "$ac_cv_lib_qdbm_vlopen" >&6; } if test "x$ac_cv_lib_qdbm_vlopen" = x""yes; then : MUTTLIBS="$MUTTLIBS -lqdbm" $as_echo "#define HAVE_QDBM 1" >>confdefs.h db_found=qdbm else CPPFLAGS="$OLDCPPFLAGS" LDFLAGS="$OLDLDFLAGS" fi LIBS="$saved_LIBS" if test "$db_requested" != auto && test "$db_found" != "$db_requested" then as_fn_error "QDBM could not be used. Check config.log for details." "$LINENO" 5 fi fi if test x$with_gdbm != xno && test $db_found = no \ && test "$db_requested" = auto -o "$db_requested" = gdbm then if test "$with_gdbm" != "yes" then CPPFLAGS="$CPPFLAGS -I$with_gdbm/include" LDFLAGS="$LDFLAGS -L$with_gdbm/lib" fi saved_LIBS="$LIBS" LIBS="$LIBS -lgdbm" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbm_open" >&5 $as_echo_n "checking for gdbm_open... " >&6; } if test "${ac_cv_gdbmopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_gdbmopen=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { gdbm_open(0,0,0,0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_gdbmopen=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdbmopen" >&5 $as_echo "$ac_cv_gdbmopen" >&6; } LIBS="$saved_LIBS" if test "$ac_cv_gdbmopen" = yes then $as_echo "#define HAVE_GDBM 1" >>confdefs.h MUTTLIBS="$MUTTLIBS -lgdbm" db_found=gdbm fi if test "$db_requested" != auto && test "$db_found" != "$db_requested" then as_fn_error "GDBM could not be used. Check config.log for details." "$LINENO" 5 fi fi ac_bdb_prefix="$with_bdb" if test x$ac_bdb_prefix != xno && test $db_found = no then if test x$ac_bdb_prefix = xyes || test x$ac_bdb_prefix = x then ac_bdb_prefix="$mutt_cv_prefix /opt/csw/bdb4 /opt /usr/local /usr" fi for d in $ac_bdb_prefix; do bdbpfx="$bdbpfx $d" for v in BerkeleyDB.4.3 BerkeleyDB.4.2 BerkeleyDB.4.1; do bdbpfx="$bdbpfx $d/$v" done done BDB_VERSIONS="db-4 db4 db-4.6 db4.6 db46 db-4.5 db4.5 db45 db-4.4 db4.4 db44 db-4.3 db4.3 db43 db-4.2 db4.2 db42 db-4.1 db4.1 db41 db ''" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BerkeleyDB > 4.0" >&5 $as_echo_n "checking for BerkeleyDB > 4.0... " >&6; } for d in $bdbpfx; do BDB_INCLUDE_DIR="" BDB_LIB_DIR="" for v in / $BDB_VERSIONS; do if test -r "$d/include/$v/db.h"; then BDB_INCLUDE_DIR="$d/include/$v" for bdblibdir in "$d/lib/$v" "$d/lib"; do test -d "$bdblibdir" || continue BDB_LIB_DIR="$bdblibdir" for l in `echo $BDB_VERSIONS`; do CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR" LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$l" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { DB *db = NULL; db->open(db,NULL,NULL,NULL,0,0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_dbcreate=yes BDB_LIB="$l" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done test x$ac_cv_dbcreate = xyes && break 2 done fi done test x$BDB_LIB != x && break done if test x$ac_cv_dbcreate = xyes then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CPPFLAGS="$OLDCPPFLAGS -I$BDB_INCLUDE_DIR" LIBS="$OLDLIBS -L$BDB_LIB_DIR -l$BDB_LIB" $as_echo "#define HAVE_DB4 1" >>confdefs.h db_found=bdb else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test $db_found = no then as_fn_error "You need Tokyo Cabinet, QDBM, GDBM or Berkeley DB4 for hcache" "$LINENO" 5 fi fi if test x$db_found != xno; then BUILD_HCACHE_TRUE= BUILD_HCACHE_FALSE='#' else BUILD_HCACHE_TRUE='#' BUILD_HCACHE_FALSE= fi if test "$need_md5" = "yes" then MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5.o" fi if test x$db_found != xno ; then MUTT_MD5="mutt_md5$EXEEXT" fi # Check whether --enable-iconv was given. if test "${enable_iconv+set}" = set; then : enableval=$enable_iconv; if test x$enableval = xno ; then am_cv_func_iconv=no fi fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if test "${ac_cv_working_alloca_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if test "${ac_cv_func_alloca_works+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if test "${ac_cv_os_cray+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if test "${ac_cv_c_stack_direction+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5 $as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } if test "${ac_cv_gnu_library_2_1+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 $as_echo "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ strdup strtoul tsearch __argz_count __argz_stringify __argz_next do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; for dir in `echo "$withval" | tr : ' '`; do if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS -liconv" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if test "${am_cv_proto_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi LIBICONV= if test "$am_cv_lib_iconv" = yes; then LIBICONV="-liconv" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if test "${am_cv_langinfo_codeset+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if test "${am_cv_val_LC_MESSAGES+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no INTLLIBS= if test "$USE_NLS" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 $as_echo_n "checking whether included gettext is requested... " >&6; } # Check whether --with-included-gettext was given. if test "${with_included_gettext+set}" = set; then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 $as_echo "$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then CATOBJEXT=NONE ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if test "${gt_cv_func_gnugettext1_libc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libc=yes else gt_cv_func_gnugettext1_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc" >&5 $as_echo "$gt_cv_func_gnugettext1_libc" >&6; } if test "$gt_cv_func_gnugettext1_libc" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -lintl $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libintl=yes else gt_cv_func_gnugettext1_libintl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl" >&5 $as_echo "$gt_cv_func_gnugettext1_libintl" >&6; } fi if test "$gt_cv_func_gnugettext1_libc" = "yes" \ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ && test "$PACKAGE" != gettext; }; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then INTLLIBS="-lintl $LIBICONV" fi gt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done LIBS="$gt_save_LIBS" # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi CATOBJEXT=.gmo fi fi if test "$CATOBJEXT" = "NONE"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then INTLOBJS="\$(GETTOBJS)" # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes CATOBJEXT=.gmo INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found msgfmt program is not GNU msgfmt; ignore it" >&5 $as_echo "found msgfmt program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi POSUB=po fi ac_config_commands="$ac_config_commands default-1" if test "$PACKAGE" = gettext; then BUILD_INCLUDED_LIBINTL=yes fi for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_INTLBISON+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_INTLBISON="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 $as_echo "$INTLBISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 $as_echo_n "checking version of bison... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 $as_echo "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: fi for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi INTL_LIBTOOL_SUFFIX_PREFIX= if test "$am_cv_func_iconv" != "yes" then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Configuring without iconv support. See INSTALL for details" >&5 $as_echo "$as_me: WARNING: Configuring without iconv support. See INSTALL for details" >&2;} else for ac_header in iconv.h do : ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ICONV_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iconv.h defines iconv_t" >&5 $as_echo_n "checking whether iconv.h defines iconv_t... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "typedef.*iconv_t" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_ICONV_T_DEF 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this iconv is good enough" >&5 $as_echo_n "checking whether this iconv is good enough... " >&6; } if test "${mutt_cv_iconv_good+set}" = set; then : $as_echo_n "(cached) " >&6 else mutt_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" if test "$cross_compiling" = yes; then : mutt_cv_iconv_good=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main() { iconv_t cd; char buf[4]; char *ob; size_t obl; ob = buf, obl = sizeof(buf); return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) && (iconv(cd, 0, 0, &ob, &obl) || !(ob == buf && obl == sizeof(buf)) || iconv_close(cd))); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_iconv_good=yes else mutt_cv_iconv_good=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$mutt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_iconv_good" >&5 $as_echo "$mutt_cv_iconv_good" >&6; } if test "$mutt_cv_iconv_good" = no; then as_fn_error "Try using libiconv instead" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iconv is non-transcribing" >&5 $as_echo_n "checking whether iconv is non-transcribing... " >&6; } if test "${mutt_cv_iconv_nontrans+set}" = set; then : $as_echo_n "(cached) " >&6 else mutt_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" if test "$cross_compiling" = yes; then : mutt_cv_iconv_nontrans=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { iconv_t cd; const char *ib; char *ob; size_t ibl, obl; const char *s = "\304\211"; char t[3]; ib = s, ibl = 2, ob = t, obl = 3; return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) || iconv(cd, &ib, &ibl, &ob, &obl)); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mutt_cv_iconv_nontrans=no else mutt_cv_iconv_nontrans=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$mutt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_iconv_nontrans" >&5 $as_echo "$mutt_cv_iconv_nontrans" >&6; } if test "$mutt_cv_iconv_nontrans" = yes; then $as_echo "#define ICONV_NONTRANS 1" >>confdefs.h else $as_echo "#define ICONV_NONTRANS 0" >>confdefs.h fi CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl" if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then $as_echo "#define HAVE_BIND_TEXTDOMAIN_CODESET 1" >>confdefs.h else mutt_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$mutt_save_LIBS" fi fi # libiconv # Check whether --with-idn was given. if test "${with_idn+set}" = set; then : withval=$with_idn; if test "$with_idn" != "no" ; then if test "$with_idn" != "yes" ; then CPPFLAGS="$CPPFLAGS -I$with_idn/include" LDFLAGS="$LDFLAGS -L$with_idn/lib" fi fi fi if test "x$with_idn" != "xno"; then if test "$am_cv_func_iconv" != "yes" then if test "x$with_idn" != "x" then as_fn_error "IDN requested but iconv is disabled or unavailable" "$LINENO" 5 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing stringprep_check_version" >&5 $as_echo_n "checking for library containing stringprep_check_version... " >&6; } if test "${ac_cv_search_stringprep_check_version+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char stringprep_check_version (); int main () { return stringprep_check_version (); ; return 0; } _ACEOF for ac_lib in '' idn; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_stringprep_check_version=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_stringprep_check_version+set}" = set; then : break fi done if test "${ac_cv_search_stringprep_check_version+set}" = set; then : else ac_cv_search_stringprep_check_version=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_stringprep_check_version" >&5 $as_echo "$ac_cv_search_stringprep_check_version" >&6; } ac_res=$ac_cv_search_stringprep_check_version if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_LIBIDN 1" >>confdefs.h MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_idna.o" fi for ac_func in idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in idna_to_ascii_from_utf8 idna_to_ascii_8z do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in idna_to_ascii_lz idna_to_ascii_from_locale do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi fi for ac_header in wchar.h do : ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" if test "x$ac_cv_header_wchar_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCHAR_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if test "${mutt_cv_wchar_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_WCHAR_H #include #endif int main () { wchar_t wc; return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mutt_cv_wchar_t=yes else mutt_cv_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_wchar_t" >&5 $as_echo "$mutt_cv_wchar_t" >&6; } if test "$mutt_cv_wchar_t" = no; then $as_echo "#define wchar_t int" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if test "${mutt_cv_wint_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_WCHAR_H #include #endif int main () { wint_t wc; return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mutt_cv_wint_t=yes else mutt_cv_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_wint_t" >&5 $as_echo "$mutt_cv_wint_t" >&6; } if test "$mutt_cv_wint_t" = no; then $as_echo "#define wint_t int" >>confdefs.h fi for ac_header in wctype.h do : ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" if test "x$ac_cv_header_wctype_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCTYPE_H 1 _ACEOF fi done for ac_func in iswalnum iswalpha iswblank iswcntrl iswdigit do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in iswgraph iswlower iswprint iswpunct iswspace iswupper do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in iswxdigit towupper towlower do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 $as_echo_n "checking for mbstate_t... " >&6; } if test "${mutt_cv_mbstate_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_WCHAR_H #include #endif int main () { mbstate_t s; return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mutt_cv_mbstate_t=yes else mutt_cv_mbstate_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_mbstate_t" >&5 $as_echo "$mutt_cv_mbstate_t" >&6; } if test "$mutt_cv_mbstate_t" = no; then $as_echo "#define mbstate_t int" >>confdefs.h fi wc_funcs=maybe # Check whether --with-wc-funcs was given. if test "${with_wc_funcs+set}" = set; then : withval=$with_wc_funcs; wc_funcs=$withval fi if test "$wc_funcs" != yes && test "$wc_funcs" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t functions" >&5 $as_echo_n "checking for wchar_t functions... " >&6; } if test "${mutt_cv_wc_funcs+set}" = set; then : $as_echo_n "(cached) " >&6 else mutt_cv_wc_funcs=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 600 #include #include #ifdef HAVE_WCHAR_H #include #endif #ifdef HAVE_WCTYPE_H #include #endif int main () { mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0); iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : mutt_cv_wc_funcs=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_wc_funcs" >&5 $as_echo "$mutt_cv_wc_funcs" >&6; } wc_funcs=$mutt_cv_wc_funcs fi if test $wc_funcs = yes; then $as_echo "#define HAVE_WC_FUNCS 1" >>confdefs.h else MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS utf8.o wcwidth.o" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if test "${mutt_cv_langinfo_codeset+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : mutt_cv_langinfo_codeset=yes else mutt_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_langinfo_codeset" >&5 $as_echo "$mutt_cv_langinfo_codeset" >&6; } if test $mutt_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and YESEXPR" >&5 $as_echo_n "checking for nl_langinfo and YESEXPR... " >&6; } if test "${mutt_cv_langinfo_yesexpr+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(YESEXPR); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : mutt_cv_langinfo_yesexpr=yes else mutt_cv_langinfo_yesexpr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mutt_cv_langinfo_yesexpr" >&5 $as_echo "$mutt_cv_langinfo_yesexpr" >&6; } if test $mutt_cv_langinfo_yesexpr = yes; then $as_echo "#define HAVE_LANGINFO_YESEXPR 1" >>confdefs.h fi have_openjade="no" # Extract the first word of "ospcat", so it can be a program name with args. set dummy ospcat; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_OSPCAT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $OSPCAT in [\\/]* | ?:[\\/]*) ac_cv_path_OSPCAT="$OSPCAT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_OSPCAT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_OSPCAT" && ac_cv_path_OSPCAT="none" ;; esac fi OSPCAT=$ac_cv_path_OSPCAT if test -n "$OSPCAT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OSPCAT" >&5 $as_echo "$OSPCAT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$OSPCAT" != "none" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openjade docbook stylesheets" >&5 $as_echo_n "checking for openjade docbook stylesheets... " >&6; } dslosfile=`ospcat --public-id="-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN"` DSLROOT=`echo $dslosfile | sed -n -e "s/.*SOIBASE='\([^']*\)\/catalog'.*/\1/p"` # ospcat may spit out an absolute path without an SOIBASE if test -z "$DSLROOT" then DSLROOT=`echo $dslosfile | sed -e 's|\(.*\)/print/docbook.dsl|\1|'` fi if test -f $DSLROOT/print/docbook.dsl then { $as_echo "$as_me:${as_lineno-$LINENO}: result: in $DSLROOT" >&5 $as_echo "in $DSLROOT" >&6; } have_openjade="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found: PDF documentation will not be built." >&5 $as_echo "not found: PDF documentation will not be built." >&6; } fi fi # Check whether --enable-full_doc was given. if test "${enable_full_doc+set}" = set; then : enableval=$enable_full_doc; if test x$enableval = xno ; then full_doc=no fi fi if test x$full_doc != xno ; then $as_echo "#define MAKEDOC_FULL 1" >>confdefs.h fi ac_config_files="$ac_config_files Makefile contrib/Makefile doc/Makefile imap/Makefile intl/Makefile m4/Makefile po/Makefile.in hcachever.sh muttbug.sh doc/instdoc.sh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_IMAP_TRUE}" && test -z "${BUILD_IMAP_FALSE}"; then as_fn_error "conditional \"BUILD_IMAP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_GSS_TRUE}" && test -z "${USE_GSS_FALSE}"; then as_fn_error "conditional \"USE_GSS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_SSL_TRUE}" && test -z "${USE_SSL_FALSE}"; then as_fn_error "conditional \"USE_SSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_SASL_TRUE}" && test -z "${USE_SASL_FALSE}"; then as_fn_error "conditional \"USE_SASL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_HCACHE_TRUE}" && test -z "${BUILD_HCACHE_FALSE}"; then as_fn_error "conditional \"BUILD_HCACHE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "imap/Makefile") CONFIG_FILES="$CONFIG_FILES imap/Makefile" ;; "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "hcachever.sh") CONFIG_FILES="$CONFIG_FILES hcachever.sh" ;; "muttbug.sh") CONFIG_FILES="$CONFIG_FILES muttbug.sh" ;; "doc/instdoc.sh") CONFIG_FILES="$CONFIG_FILES doc/instdoc.sh" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi mutt-1.5.21/ABOUT-NLS0000644000175000017500000004464410770271152010757 00000000000000Notes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work at translations should contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. Quick configuration advice ========================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. INSTALL Matters =============== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will respectively bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might be not what is desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. Using This Package ================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. Translating Teams ================= For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of September 2001. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files bg cs da de el en eo es et fi fr gl he hr id it ja +----------------------------------------------------+ a2ps | [] [] [] | bash | [] [] [] [] | bfd | | binutils | [] | bison | [] [] [] [] [] | clisp | [] [] [] [] | cpio | [] [] [] [] [] | diffutils | [] [] [] [] [] [] [] | enscript | [] [] | error | [] [] | fetchmail | | fileutils | [] [] [] [] [] [] [] [] | findutils | [] [] [] [] [] [] [] [] | flex | [] [] [] | freetype | | gas | | gawk | [] [] | gcal | | gcc | | gettext | [] [] [] [] [] [] [] [] [] [] | gnupg | [] [] [] [] [] [] [] | gprof | | grep | [] [] [] [] [] [] [] [] | hello | [] [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] | indent | [] [] [] [] [] | jpilot | [] | kbd | | ld | [] | libc | [] [] [] [] [] [] [] [] | lilypond | [] | lynx | [] [] [] [] | m4 | [] [] [] [] [] [] [] [] | make | [] [] [] [] [] [] | mysecretdiary | [] | nano | [] [] [] | opcodes | | parted | [] [] [] | ptx | [] [] [] [] [] [] [] | python | | recode | [] [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] [] [] [] | sh-utils | [] [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] [] | sketch | | soundtracker | [] [] [] | sp | | tar | [] [] [] [] [] [] [] [] | texinfo | [] [] [] [] [] [] | textutils | [] [] [] [] [] [] [] [] | util-linux | [] [] | wdiff | [] [] [] | wget | [] [] [] [] [] [] [] [] [] [] | +----------------------------------------------------+ bg cs da de el en eo es et fi fr gl he hr id it ja 0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18 ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh +----------------------------------------------------+ a2ps | [] [] [] | 6 bash | | 4 bfd | | 0 binutils | | 1 bison | [] | 6 clisp | [] | 5 cpio | [] [] [] [] [] | 10 diffutils | [] [] [] [] | 11 enscript | [] [] [] | 5 error | [] [] | 4 fetchmail | | 0 fileutils | [] [] [] [] [] [] [] [] [] | 17 findutils | [] [] [] [] [] [] [] [] | 16 flex | [] [] [] | 6 freetype | | 0 gas | | 0 gawk | [] | 3 gcal | | 0 gcc | | 0 gettext | [] [] [] [] [] [] [] [] | 18 gnupg | [] [] [] | 10 gprof | | 0 grep | [] [] [] [] | 12 hello | [] [] [] [] [] [] [] [] [] [] [] | 22 id-utils | [] [] [] | 6 indent | [] [] [] [] [] [] [] | 12 jpilot | | 1 kbd | [] | 1 ld | | 1 libc | [] [] [] [] [] [] [] [] | 16 lilypond | [] [] | 3 lynx | [] [] [] [] | 8 m4 | [] [] [] [] | 12 make | [] [] [] [] [] [] | 12 mysecretdiary | | 1 nano | [] | 4 opcodes | [] | 1 parted | [] [] | 5 ptx | [] [] [] [] [] [] [] [] | 15 python | | 0 recode | [] [] [] [] | 13 sed | [] [] [] [] [] [] [] | 19 sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21 sharutils | [] [] [] | 11 sketch | | 0 soundtracker | | 3 sp | | 0 tar | [] [] [] [] [] [] [] | 15 texinfo | [] | 7 textutils | [] [] [] [] [] [] [] [] | 16 util-linux | [] [] | 4 wdiff | [] [] [] [] | 7 wget | [] [] [] [] [] [] [] | 17 +----------------------------------------------------+ 33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh 53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If September 2001 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. Using `gettext' in new packages =============================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle to use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `translation@iro.umontreal.ca' to make the `.pot' files available to the translation teams. mutt-1.5.21/ChangeLog0000644000175000017500000134744011444176746011317 000000000000002010-09-15 10:05 -0700 Michael Elkins (54e3139a0362) * safe_asprintf.c: suppress check_sec errors 2010-09-13 17:25 -0700 Michael Elkins (20b2d496349f) * init.h: make $mail_check_recent set by default 2010-09-13 19:00 +0100 Emanuele Giaquinta (fea3860ff672) * imap/command.c: Restore the previous behaviour of checking for new messages in imap folders when mail_check_recent is set. 2010-09-12 19:54 -0700 Michael Elkins (a51df78218e8) * buffy.c, buffy.h, imap/command.c, init.h, mbox.c, mutt.h: add $mail_check_recent boolean to control whether Mutt will notify about all new mail, or just new mail received since the last visit to a mailbox closes #3271 partly addresses #3310 * smime.c: fix crash when index contains 0 keys 2010-09-11 07:34 -0700 Michael Elkins (0f962f1a6bbb) * send.c: Allow setting message security in send2-hook This patch delays checking the message security options until after the user has an initial chance to edit the message. This allows the security options to be set in a send2-hook when using $edit_headers. Without this patch, the user has no way of automatically setting security based on recipients since the to/cc prompts are bypassed. The other change in behavior is if the user happened to use a send2-hook to see if the message had security applied *prior* to editing the message, that no longer works. * keymap.c, keymap.h, main.c: support for ncurses extension allowing binding to function keys with modifiers * keymap.c: allow octal codes with more than three digits * crypt-gpgme.c, mime.h, pgp.c, recvattach.c, sendlib.c: add DISPNONE to mean no preferred Content-Disposition; make pgp-signature parts DISPNONE for multipart/signed * recvcmd.c: fix problem with reply-hook not working when a message/rfc822 attachment is selected * rfc2047.c: more lenient RFC2047 decoding: accept illegal spaces and bare question marks in encoded words * curs_main.c, mx.c: fix crash when new mail is received during IMAP IDLE closes #3335 2010-08-25 00:30 +0100 Emanuele Giaquinta (5302767aa6aa) * rfc2047.c: Use mutt_substrdup in rfc2047_decode_word 2010-08-24 16:40 -0700 Michael Elkins (92b02f77e780) * rfc2047.c: detect failure to decode word and copy raw string instead; avoids calling strlen() on uninitialized memory closes #2923 2010-08-24 18:39 +0100 Emanuele Giaquinta (ebd4beafe5eb) * mutt_ssl.c: Fix typo. * browser.c, hook.c, init.c, menu.c, mutt_ssl_gnutls.c, pager.c: Do not call regfree if regcomp fails. The content of the regex_t structure is undefined in this case. * curs_lib.c, mutt_ssl_gnutls.c: use REGCOMP() macro 2010-08-24 10:03 -0700 Michael Elkins (5d59c8b737ba) * init.c: add REG_ICASE accidentally removed in changeset 1a35f096c8cb * muttlib.c: do not print debug message on ENOENT 2010-08-14 09:18 -0700 Michael Elkins (04fd8ddea579) * url.c: avoid c99 syntax for backwards compat 2010-08-06 21:52 +0200 Matthias Andree (24a7b1aa2e55) * buffy.c: Fix comparison signedness warnings. 2010-08-12 16:04 -0700 Michael Elkins (ced5d3dca974) * imap/util.c: Fix bug in imap_keepalive() which erroneously free Context when the IMAP connection is shut down by the server. Closes #3410 * url.c: url_parse_mailto should return 0 on success fix memory leak errors when unable to parse mailto: URL closes #3441 * mh.c: always update message body size when parsing a maildir message * safe_asprintf.c: call va_end() even when vasprintf returns <0 2010-08-09 20:48 -0700 Michael Elkins (6572e8bcd723) * Makefile.am, imap/message.c, lib.c, lib.h, safe_asprintf.c: rename mutt_sprintf() to safe_asprintf() to match the GNU extension that performs a similar task 2010-08-09 10:27 -0700 Vincent Lefevre (e86ee9991dc3) * postpone.c: In postpone.c, function mutt_num_postponed, the old {{{OldPostponed}}} is never freed. closes #3442 2010-08-09 09:38 -0700 Michael Elkins (8051fc8b631c) * send.c: clear the real name when $reverse_realname is unset and a match is hit so that $realname can be set in a reply- or send-hook closes #3427 * doc/manual.xml.head: fix example of mailto: use on the command line * pager.c: fix buffer underrun when processing ANSI escape sequences closes #3371 2010-08-08 12:29 -0700 Michael Elkins (4dcf19c58139) * doc/manual.xml.head, doc/mutt.man: document support for mailto: URLs on the command line closes #3400 * imap/message.c: avoid error when the user has requested many extra headers via IMAP closes #3435 * lib.c, lib.h: add a malloc+sprintf combo function 2010-08-08 10:21 -0700 Fabian Groffen (d4d703e21cdd) * pattern.c: fix crash in limit when user enters invalid regexp closes #3417 2010-08-07 06:44 -0700 Michael Elkins (cc881d855f05) * mutt_ssl.c: Fix comparison signedness warnings * pop_lib.c: add comment about safety of cast 2010-08-06 21:58 +0200 Matthias Andree (55f50b2db1f8) * pop_lib.c: Fix comparison signedness warning. * status.c: Fix signedness warning. * .hgignore: Ignore backup files ending in a tilde character. * url.c: Fix comparison signedness warnings. * gnupgparse.c, pop_auth.c: Fix comparison signedness warnings. * lib.h: Resolve if/else empty body ambiguity/warnings when compiling without DEBUG. 2010-08-06 17:08 -0700 Michael Elkins (5b15d4d96277) * configure.ac, init.c, protos.h: detect availablity of 'long long' cast time_t to 'long long' prior to bitshifting since it can be a float value according to POSIX.1-2008 closes #3439 2010-08-06 21:22 +0200 Matthias Andree (bf13863e682e) * md5.c: Drop declaration for unused argv/argc parameters. Fixes GCC warning with -Wextra. 2010-08-06 13:11 -0700 Michael Elkins (998ca956b41b) * init.c, muttlib.c: use a 64-bit random value in temporary filenames. closes #3158 * browser.c: avoid using C99 bool * browser.c, init.h: add %D format string to $folder_format to expand the time based on $date_format. properly set the locale for LC_TIME prior to calling strftime() closes #1734 closes #3406 * mutt_ssl.c: fix compiler warning about wrong type for SslSessionCerts 2010-08-06 09:58 +0200 Matthias Andree (473fbe29f626) * mutt_ssl.c: Unbreak X.509 SubjAltName checks, regression in 6016:dc09812e63a3 that calls strlen on an SSL sk rather than its string payload. closes #3426 2010-08-06 07:12 -0700 Michael Elkins (4ae33a8a1391) * configure.ac: properly set _XOPEN_SOURCE to 600 (POSIX.1-2004) when detecting th wc*() functions closes #3341 2010-08-05 21:57 -0700 Michael Elkins (bc5fb152e2ba) * mbox.c: when parsing From_ lines in mmdf/mbox, the TZ should be computed based on the time in the string rather than the current time, otherwise DST issues cause the computed time to be wrong. closes #2177 * thread.c: explanatory comments 2010-08-05 17:03 -0700 andreas (0666d9588eac) * curs_main.c, functions.h: do not leave pager when changing sort order. closes #2143 2010-08-05 16:47 -0700 Michael Elkins (57d4b3839172) * curs_main.c: do not leave pager when using read-thread and read- subthread closes #2137 2010-08-04 17:04 -0700 Petr P­saĊ™ (59ca5d7b1656) * ChangeLog, po/cs.po: Updated Czech translation 2010-08-04 06:37 -0700 Vincent Lefevre (a7f05f29d9bc) * po/fr.po: updated French translation 2010-08-03 10:10 -0700 Michael Elkins (2c42f4760c8f) * browser.c: add locale.h for compililng with -std=c99 * main.c: adjust help for -a to make it clearer that -- is required terminator 2010-07-31 08:21 -0700 Michael Elkins (7cd85c18bfaf) * muttlib.c: Fix buffer underflow in expansion of format pipes. Add better error detection. Closes #3432. 2010-07-18 14:24 -0700 Michael Elkins (1a35f096c8cb) * init.c: use REGCOMP() macro 2010-07-18 22:09 +0100 Emanuele Giaquinta (d0e0d174d620) * init.c: Skip 'attachments' directive if minor type is not a valid regexp 2010-07-09 11:07 -0700 Joel Dahl (6b13e8319c1f) * po/sv.po: fix misspelling in Swedish translation 2010-05-18 08:39 -0700 Michael Elkins (29e37994a536) * send.c: Consider any negative return value from send_message() to be an error and allow the user to resend. Closes #3411. 2010-04-24 16:10 -0700 Brendan Cully (4cd2daafd03b) * mutt_ssl.c: openssl: only call SSL_shutdown during clean shutdown (closes #3407) 2010-04-22 09:14 -0700 Vincent Lefevre (6ebdfd09abc1) * po/fr.po: updated French translation 2010-04-14 15:47 -0700 Michael Elkins (15b9d6f3284f) * pgp.c: remove toggle and replace with format in pgp-menu 2010-04-12 15:13 -0500 David Champion (41a46373ddd9) * compose.c: Improve clarity/uniformity in compose menu's crypto display Incorporates feedback on "Security: None" key hints. 2010-04-13 06:49 -0700 Michael Elkins (4d798ee2898e) * muttlib.c: fix bug handling wide pad char in soft-fill mode 2010-04-11 20:00 -0700 Michael Elkins (2cd62f40d840) * compose.c: increase size of buffer used for displaying addresses in the compose menu to avoid truncating on widescreen displays * curs_lib.c: clear prompt when user cancels with ^G from a yes/no prompt * muttlib.c: Fix bug in soft-fill (%*) in $index_format not accounting for 'set arrow_cursor' * pgp.c: Remove the (i) option from the PGP-menu when encryption or signing is not yet selected. The toggle between PGP/MIME and Traditional doesn't make sense unless some type of security has been requested. Closes #3402. 2010-04-06 09:47 -0700 Michael Elkins (889aa698cc49) * configure.ac, muttlib.c: fix for compiling Mutt with clang: check for wchar_h prior to wctype_h in check for wc funcs 2010-04-05 11:12 -0700 Michael Elkins (844174efa648) * doc/manual.xml.head: [doc] Remove bogus -group parameter from unlists and unsubscribe commands; add links to address group section for context. 2010-04-03 20:34 -0700 Michael Elkins (cf97505addf8) * init.c: prevent user from setting $charset to an empty string since other code requires it to be set to a valid string closes #3326 * pager.c: allow regexps to match on continuation header lines in 'color header' commands. closes #3373 * pattern.c: Fix crash on invalid regexp in search string due to uninitialized BUFFER variable. Closes #3401 2010-04-01 10:10 -0700 Simon Ruderich (b9baa0234846) * attach.c, commands.c, filter.c, muttlib.c, send.c: fix comment typos 2010-04-01 09:59 -0700 Michael Elkins (96ed7cdacdc6) * init.h: Improve documentation for $query_command to note that Mutt automatically adds quotes according to shell quoting rules (thx: Simon Ruderich). * doc/manual.xml.head: Clarify the documentation on what the line- editor is (thx: Simon Ruderich) 2010-03-31 08:50 -0700 Michael Elkins (7e9e31b1bd7b) * muttlib.c: avoid buffer overflow when expanding the format string associated with a 'spam' command. closes #3397 2010-03-23 16:03 -0700 Michael Elkins (fe29d691deff) * doc/muttrc.man.head: remove errant commands in secton on setting alternates 2010-03-22 22:16 -0700 Brendan Cully (69e9a1a0ba2f) * sendlib.c: Fix a format string warning 2010-03-22 20:02 -0700 Marcel Telka (f544730656c1) * compose.c: redraw entire screen when exiting editor after re-editing the message body in the send menu. closes #3393. 2010-03-21 09:52 -0700 Michael Elkins (0a29e3f4f4b9) * sendlib.c: Do not assume whitespace follows the colon in a header field. Closes #3385. 2010-03-08 15:13 -0800 Brendan Cully (ad6d799951cb) * configure.ac: Comment about search libsasl for sasl2 functions 2010-03-08 14:04 -0600 Will Fiveash (b92b9c6a1c85) * configure.ac: OpenSolaris sasl fix for configure.ac 2010-03-08 15:00 -0800 Brendan Cully (05cec973f0d9) * pattern.c: When regexp compilation fails, report actual pattern along with error. * muttlib.c: mutt_buffer_printf: NULL dptr means use data * pattern.c: If regcomp fails, assume rx has not been allocated. Fixes a core dump for save-hook '~f foo\.bar@(something|other)\.com' =foo. 2010-03-02 11:31 -0800 TAKAHASHI Tamotsu (fec2720ff6ef) * rfc822.c: Fix #2014. Thanks to Vincent Lefevre for help with this one. 2010-03-02 11:16 -0800 Brendan Cully (41cf44ddbb4c) * copy.c: Fix thinko in [cc02f079b1b9] 2010-03-01 22:40 -0800 Brendan Cully (cc02f079b1b9) * copy.c: Guard dequote with NULL check on personal field * copy.c, rfc822.c, rfc822.h: Another attempt to dequote RFC2047-encoded address comments (see #2014) * rfc822.c: Backed out changeset 2a4ca6917fd0. It is incompatible with $assumed_charset (see #2014). 2010-02-28 23:03 -0800 Brendan Cully (2a4ca6917fd0) * rfc822.c: RFC-2047 decode address text before dequoting it (see #2014) * doc/manual.xml.head: Fix next-unread-mailbox name in documentation. Closes #3319. 2010-02-28 17:23 -0800 Antonio Radici (25459cbb132a) * po/de.po: Fix German translation of "No undeleted messages." (closes #3372) * pop_lib.c: pop: allow user-specified port to override default in URL. Closes #3322. 2010-02-28 17:00 -0800 ludwig (2c78b28027cc) * crypt-gpgme.c: GPGME: Sender verification should be canse- insensitive for domain names. Closes #2180 2010-02-26 18:18 -0800 Brendan Cully (40eca68c394a) * UPDATING, init.h: Make $thorough_search default to yes (closes #3386) 2010-02-23 12:42 -0800 Brendan Cully (57124ea5592e) * commands.c: Don't use freed ctx.path when updating utime of target mailbox in save-message. Thanks to Sean Boudreau for the bug report. 2010-02-22 23:01 -0800 Vincent Lefevre (f17302c10229) * po/fr.po: Updated French translation. 2010-02-21 13:16 -0800 Brendan Cully (a6fddecdc5f5) * curs_lib.c: Make mutt_yesorno use mutt_message to print query. Closes #3352. 2010-02-20 21:56 -0800 Gregory Shapiro (f723e07c8e6d) * OPS, UPDATING, curs_main.c, functions.h: Add imap-logout- all to log out of all IMAP connections. Closes #2880. 2010-02-17 00:47 -0800 Simon Ruderich (260d39279161) * doc/manual.xml.head: Document 'n' and 'o' flags in index * doc/devel-notes.txt, doc/muttrc.man.head, init.h, rfc1524.c: Spelling fixes 2010-02-10 23:29 -0800 Brendan Cully (b7ec848af36b) * doc/manual.xml.head: Fix a typo (closes #3379) 2010-02-01 23:40 -0800 Antonio Radici (e9965b78e92d) * po/sv.po: The Swedish translation has a suboptimal translation of the word "Bad" in several places. The proposed patch substitutes Dlig (which implies bad "as in quality", and not bad "as in error") for Felaktig (erroneous). Closes #3370. * init.h: Small fix to the muttrc manpage. Closes #3374 2010-01-13 19:12 +0100 Matthias Andree (e2c60de29015) * configure.ac: Fix hcache build on systems with $(EXEEXT), include it in mutt_md5. 2009-12-29 00:33 -0500 Brendan Cully (31881f38ca1e) * curs_lib.c: Hack mutt_wstr_trunc to treat M_TREE characters as 1 cell. Closes #3364. 2009-12-28 22:13 -0500 Brendan Cully (359de549b2d1) * doc/manual.xml.head: Remove spurious quotes from query_command example. Closes #3365. 2009-12-14 10:24 -0800 Brendan Cully (736b6af3c5f1) * rfc1524.c: Fix off-by-one errors in mailcap parser. Closes #3362 2009-12-10 22:52 -0800 Daniel Jacobowitz (b7d2cb7c7ce1) * hcache.c: Do not store header color in hcache. If the color directive is removed from muttrc, the cached value from the last directive would otherwise still be in effect. 2009-12-07 23:08 -0800 Patrick Welche (1cf34ea1f128) * mutt_ssl.c: STACK* is not defined with newer SSL, use STACK_OF instead. Closes #3356. 2009-12-07 22:46 -0800 Peter Rosin (fc9563de3dcb) * snprintf.c: Output %p as unsigned in the bundled snprintf 2009-11-14 14:31 -0800 Brendan Cully (6928f522ac48) * curs_main.c: Back out e67f4c347bb4. I could not reproduce the problem, and the change makes it impossible to change to a real folder when no folder is currently open. 2009-10-28 23:03 -0700 Brendan Cully (89fb586edda2) * sendlib.c: Unfold headers to wrap length in pager, when weed is set. From Rocco's patch queue. 2009-09-22 23:29 -0700 Antonio Radici (5037c59a589e) * po/it.po: Correct Italian translation of y/n/a prompt. Closes #3336 2009-08-27 22:10 -0700 Petr P­saĊ™ (605559e4f88f) * po/cs.po: Updated Czech translation. 2009-08-20 11:34 +0200 Renİ Clerc (6b48ff4e69a3) * doc/manual.xml.head: No-brain documentation typo fix 2009-08-20 11:33 +0200 Rocco Rutte (e196cfc00105) * doc/manual.xml.head: Backed out changeset c9dd93b09ce7 2009-08-20 11:25 +0200 Renİ Clerc (c9dd93b09ce7) * doc/manual.xml.head: No-brain documentation typo fix Hi Rocco, Attached a patch for the documentation that fixes a small typo I stumbled upon. If you'd rather have me opening a trac ticket, please say so; since this is such a no-brainer I figured I'd e-mail you directly. 2009-08-17 17:07 +0200 Rocco Rutte (d0fce0eec0b3) * doc/manual.xml.head, doc/muttrc.man.head, init.h: Doc: fix more typos * doc/Makefile.am, doc/mutt.pwl: Doc: fix aspell calls, add custom mutt-only wordlist * curs_main.c: Require already opened folder when using templates for change-folder. For example, start with -y and type a wrong IMAP password so that no mailbox is open. Trying to change folders resulted in a crash. 2009-08-14 21:29 +0200 Rocco Rutte (6a08a5244d60) * pattern.c: Clear last search pattern if it's invalid. Closes #3315. We keep both, the string version and compiled version around for search-next; however, in case of parsing errors we dropped only the compiled version and not the string one making the code attempting to perform a search using a NULL pattern. * pattern.c: Bail on missing pattern modifiers at end of pattern. Closes #3314. 2009-08-13 23:49 +0200 Rocco Rutte (f8d50e968853) * doc/Muttrc.head, doc/manual.xml.head, init.h: Docs: fix typos/style 2009-08-11 12:22 -0700 Tomas Hoger (dc09812e63a3) * mutt_ssl.c: Catch SSL null prefix attach (openssl) 2009-08-09 14:45 -0700 Brendan Cully (002b4676d502) * buffy.c: Add buffy_new and buffy_free abstractions. 2009-08-09 14:53 +0200 Christian Ebert (0153dbc12dc4) * doc/manual.xml.head: manual: fix wrong spell checker assumptions 2009-08-09 14:35 +0200 Rocco Rutte (59b4c73e7254) * doc/manual.xml.head: Manual: Fix typos, consequently use en_US spelling 2009-08-08 22:50 -0700 Brendan Cully (d4ea7f571f10) * buffy.c: Split out mailbox-specific code in mutt_buffy_check * buffy.c, muttlib.c, mx.c, mx.h, status.c: Unconditionally define M_IMAP, M_POP. These aren't bloat, and not having them creates a lot of #ifdef clutter. * curs_lib.c: Abort prompt on ^C, as was the case prior to 12a6de725483 2009-08-04 10:47 -0700 Vincent Lefevre (15a695678b7b) * po/fr.po: Updated French translation. 2009-08-04 12:34 +0200 Rocco Rutte (25c2d70f2f00) * doc/manual.xml.head: Manual: Add some words of warning to really remove IRT header when intended * doc/manual.xml.head: Manual: Put mailbox shortcuts into table for readability * doc/manual.xml.head: Manual: Fix docs for push/exec 2009-08-04 12:08 +0200 Johan D (14bb498c6a1c) * mh.c: Fix MH parsing, fixes [0698e8195545]. Closes #3312 2009-08-01 15:16 +0200 Rocco Rutte (29727d19634a) * doc/manual.xml.head: Manual: use full names for é and è entities. Closes #3286. This is necessary because we want to install a us-ascii manual.txt that would contain only "e" instead of accented characters. 2009-07-30 17:56 +0200 Rocco Rutte (4a572310c3b5) * main.c: Fix mutt -h output for -a/-- options 2009-07-29 13:26 -0700 Brendan Cully (a2a4286491b4) * hcache.c, hcache.h, imap/util.c: Harmonize hcache uidvalidity size to unsigned int (per IMAP RFC). Closes #3296. 2009-07-28 23:16 +0200 Rocco Rutte (153eac9e03e7) * Makefile.am: Add group.h to distribution * group.c, group.h, init.c, rfc822.c: Fix some issues with ungroup [...] * 2009-07-27 21:14 -0700 Kees Cook (2fc9348684fe) * mh.c: Properly propagate mh_read_sequences result. Closes #3308. 2009-07-27 20:49 -0700 Brendan Cully (5c076ed18883) * configure.ac: Do not overwrite docdir unless --with- docdir was explicitly given. This allows --docdir from autoconf 2.60+ to work, though if given --with-docdir will silently override --docdir. Closes #3282. 2009-07-24 14:30 +0200 Rocco Rutte (86e066a206ac) * po/de.po: Update German translation * init.c: Fix check_sec.sh warning 2009-07-23 23:36 -0400 Aron Griffis (0ee27568ad09) * init.c: fix :reset to work with empty strings Signed-off-by: Aron Griffis 2009-07-23 23:32 -0700 Vincent Lefevre (223020f50cb7) * po/fr.po: Updated French translation. 2009-07-23 23:51 +0200 Matthias Andree (1e77b368ef55) * charset.h, rfc2047.c: Use proper prototype for mutt_get_default_charset(), fix fallout. * bcache.c, charset.c: Fix two warnings "the address of 'foo' will always evaluate as 'true'". 2009-07-23 17:28 +0200 Rocco Rutte (1597c2074a52) * doc/manual.xml.head: Manual: better document what address groups are (for) * group.c, group.h, init.c, init.h, pattern.c, protos.h, rfc822.c, rfc822.h: Implement ungroup command. Closes #3304. * init.c, mutt.h, muttlib.c: Move remove_from_rx_list() to muttlib.c, name it mutt_remove_from_rx_list() 2009-07-22 15:25 +0200 Fabian Groffen (d41e043fa775) * keymap.c: Use CRYPT_BACKEND_GPGME instead of non-existent HAVE_GPGME 2009-07-22 14:43 +0200 kees (848f08512bf3) * hcache.c, rfc822.h: Properly restore addresses from hcache using rfc822_new_address(). Closes #3302. * mh.c: Don't leak mhs flags in mh_buffy(). Closes #3303. 2009-07-17 17:57 -0400 Aron Griffis (a3c4b605cfad) * UPDATING: add batch mode send-hooks note to UPDATING 2009-07-14 20:25 -0700 Aron Griffis (084fb086a0e7) * send.c: Make send-hooks work for batch mode. Closes #3219. Handle SENDBATCH inline with the normal sending code, instead of handling it separately. This allows send-hooks to run, along with removing a number of unnecessarily lines of code. 2009-07-11 14:52 +0200 Rocco Rutte (6f942afe60b5) * charset.c, mbyte.c: Recognize charset extensions, see #3150. With utf-8//TRANSLIT, we internally didn't recognize it as utf-8. This leads to badly broken behaviour if --without-wc-funcs is used for some reason. In that case, if we have utf-8 as charset, we implement our own wide char functions; for all other charsets, we use the system single-byte locale functions. And using these with utf-8 is broken. * curs_lib.c: Render blanks to spaces in index, fixes [298194c414f0] wcwidth() returns -1 so 'foobar' was rendered to 'foobar', and now to 'foo bar'. Closes #3270 again. 2009-07-08 13:37 +0200 Rocco Rutte (f22b71d8005a) * mbyte.c: Fix compiler warning 2009-07-07 15:03 +0200 Rocco Rutte (d5e03a46518c) * TODO: Update TODO 2009-07-07 10:49 +0200 Matthias Andree (cc4d6044b31e) * INSTALL: GNU-make based VPATH builds work. 2009-07-07 13:16 +0200 Rocco Rutte (f161c2f00d84) * UPDATING, bcache.c, doc/manual.xml.head, hcache.c, muttlib.c, protos.h: Make hcache+bcache paths always UTF-8. Closes #3284. * UPDATING, globals.h, init.h, sendlib.c: Add $wrap_headers. Closes #3135 * doc/manual.xml.head: Manual: mention terminal setup for charsets, more unicode pros. Closes #3292. 2009-07-06 15:28 +0200 Rocco Rutte (ccab6c56b557) * doc/manual.xml.head: Manual: Add a note about when/why to use utf-8 2009-07-05 18:36 -0700 Brendan Cully (118b8fef8aae) * buffy.c, buffy.h, mx.c: Suppress new mail notification from mailbox just left. Closes #3290. 2009-07-02 20:42 +0200 Rocco Rutte (042f2ce0b870) * doc/manual.xml.head: Manual: minor fixes * doc/manual.xml.head, doc/mutt.css: Manual: Render comments in examples a lighter for readability * doc/manual.xml.head, doc/manual.xml.tail: Manual: Reformat paragraphs, fix ˜ -> ~ breakage * doc/manual.xml.head: Manual: rework MIME chapter a bit * doc/gen-map-doc, doc/manual.xml.tail, functions.h: Manual: Generate more pretty titles/ids for key binding tables * doc/manual.xml.head: Manual: fix supported version numbers for mixmaster 2009-07-02 00:06 -0700 Brendan Cully (029ba140fb48) * curs_main.c: Handle keepalive failure when changing folders. There are probably many other places where this kind of thing could happen though. See #3028. 2009-07-01 18:13 -0700 Rocco Rutte (f6c6066a5925) * account.c, mutt_sasl.c, smtp.c: Make getuser/pass abort if input is required in batch mode. Replaces [0a3de4d9a009]. See #3289. * doc/manual.xml.head: Manual: Add detailed section on charset handling * smtp.c: SMTP: use $smtp_pass in batch mode. Closes #3289. mutt_account_getpass() copying the password from $smtp_pass into the account structure is only called from the SASL callback we only use if we're sure we don't need curses (i.e. have the pass already). 2009-06-30 17:32 +0200 Rocco Rutte (f4baa2f1251a) * pgpewrap.c: Add missing config.h include to pgpewrap.c It technically doesn't need it, but pgpewrap should be rebuilt after configure ran, too. * doc/Makefile.am: Manual: Run lynx with --display_charset =us-ascii, see #3286. 2009-06-29 18:20 +0000 Rocco Rutte (03c65df651e0) * UPDATING, doc/manual.xml.head: Manual: Move new mail detection into its own section This also updates some parts of docs and adds missing ones. It also adds a note about the recent changes, also to UPDATING. 2009-06-29 18:03 +0200 Rocco Rutte (d3a7e0334e5d) * url.c, url.h: Revert URL path encoding for now It breaks gmail url display and makes bcache use different paths. Still we need to think about whether we want to allow any character in bcache paths (possibly multibyte, possibly depending on $charset). 2009-06-28 20:49 -0700 Brendan Cully (298194c414f0) * configure.ac, curs_lib.c: Allow tabs in index subject. Closes #3270. * imap/util.c: Allow ImapDelimChars to be unset * mutt.h: Rename struct thread to struct mutt_thread. Closes #3279. * imap/command.c: Not being able to start an IMAP command is a fatal error. Closes #3155. * imap/auth_login.c: IMAP LOGIN does not support separate user and login accounts. Use the user account for both. Closes #3240. 2009-06-28 22:40 +0200 Rocco Rutte (71a84cf22c42) * url.c, url.h: Fix URL parser to encode paths 2009-06-28 15:42 +0200 Deng Xiyue (fe688db8099a) * po/zh_CN.po: Update Simplified Chinese translation. Closes #3281. 2009-06-27 17:07 +0200 Rocco Rutte (7ca8d09f7d2c) * hg-commit: hg-commit: drop changelog entries from hg log * doc/makedoc.c, doc/manual.xml.head: Manual: stop using DocBook entities mapping to ascii chars There's no real benefit, it only makes reading/writing the manual harder. All entities that potentially map to non-ascii characters (&mdash, ä, etc.) are left so that manual.xml remains pure ascii. 2009-06-26 21:47 -0700 Brendan Cully (b2b97c7a2ae6) * imap/imap_private.h, imap/message.c, imap/util.c: Set internaldate of messages appended to IMAP mailboxes 2009-06-26 20:27 +0200 Rocco Rutte (156e6d6e34fc) * doc/manual.xml.head: Manual: try to explain that and why copiousoutput should come last * po/de.po: Update German translation 2009-06-25 21:46 +0200 Rocco Rutte (c5d0252e8f72) * rfc3676.c: Fix f=f corner case with DelSp=yes abuse * sendlib.c: header folding: treat From_ specially, never wrap on sending side * sendlib.c: Add Date: header to postponed messages * sendlib.c: Only add Status: header (fcc/postpone) when saving to mbox/mmdf * compose.c: Treat messages written with as fcc, not postponed. 2009-06-23 10:13 -0700 Vincent Lefevre (bc2463863c15) * po/fr.po: Updated French translation. 2009-06-23 16:56 +0200 Rocco Rutte (d152033cf967) * doc/manual.xml.head: Manual: Simply type conversion section wording. * Makefile.am, configure.ac: Don't build hcversion.h and mutt_md5 without hcache * handler.c, mutt.h, muttlib.c: Implement state_putws() and state_putwc(), see #3148. This is needed to unbreak text/enriched rendering on Linux. * commands.c: Only use keypad() when curses is running 2009-06-23 00:28 -0700 Vincent Lefevre (642987450d83) * curs_lib.c: Only beep when displaying error messages (unbreaks [54bc1ef602e7]) 2009-06-23 00:20 -0700 Brendan Cully (f5849c72a274) * crypt-gpgme.c: Update crypt-gpgme for mutt_mktemp change in [ed7eb5de7536] 2009-06-22 17:36 +0200 Rocco Rutte (54bc1ef602e7) * curs_lib.c: Make mutt_curses_(error|message) format message to COLS chars. Closes #3278. While I'm at it, fold both functions into one. 2009-06-22 17:21 +0200 Alexey Tourbin (e378bbdc3f0f) * smime_keys.pl: smime_keys: use Time::Local module. Closes #3277. 2009-06-22 17:17 +0200 Rocco Rutte (4899f140ec25) * mbyte.c: Fix included iswupper(). Closes #3276. * lib.c: Catch range errors when converting to long. 2009-06-21 21:57 +0200 Rocco Rutte (ed7eb5de7536) * attach.c, commands.c, crypt.c, editmsg.c, handler.c, headers.c, help.c, history.c, imap/message.c, main.c, mbox.c, muttlib.c, mx.c, pattern.c, pgp.c, pgpkey.c, pgpmicalg.c, pop.c, protos.h, recvattach.c, recvcmd.c, rfc3676.c, send.c, sendlib.c, smime.c: Pass buffer size to mutt_mktemp() * handler.c, rfc3676.c: Port f=f and text/plain handlers to mutt_read_line() * lib.c: mutt_read_line(): make line counting ptr optional * sendlib.c: Silently drop headers not in "key: value" format. Fixes out-of-memory exits. 2009-06-20 23:09 +0200 Rocco Rutte (6447ebe80797) * handler.c: f=f: Don't kill signature separator when stripping trailing spaces. Closes #3275. * curs_main.c: Disallow breaking threads for messages not part of a thread 2009-06-20 15:22 +0200 Rocco Rutte (580ab0256c49) * doc/manual.xml.head: Manual: Clarify and extend variable type conversion section 2009-06-19 19:56 -0400 Aron Griffis (ee3d174297bb) * rfc822.c: remove bogus FREE It's impossible for cur->personal to be non-NULL at this point, since cur was calloc'd just a couple lines prior. Signed-off-by: Aron Griffis 2009-06-19 22:49 +0200 Rocco Rutte (9ae13dedb5ed) * mbox.c, mx.c, mx.h: Fixup atime for mbox/mmdf also when mailbox is unchanged but has new mail. See #1362. * mbox.c: Don't mangle atime/mtime for mbox folders without new mail upon sync. Closes #1362, #3271. * doc/manual.xml.head: Manual: Add note and example for type conversions with my_vars * sendlib.c: Enforce 998 char length limit on header lines when sending. 2009-06-18 15:06 +0200 Antonio Radici (c6fe0bb8cf11) * doc/Makefile.am, doc/smime_keys.man: Provide smime_keys(1). Closes #3272. 2009-06-18 14:56 +0200 Rocco Rutte (508bfe4a2e23) * mbox.c: Backout experimental patch * UPDATING, mbox.c: UPDATING: add note about -a and -- 2009-06-17 16:19 -0700 Antonio Radici (25e46aad362b) * buffy.c: Do not free statically-allocated buffy buffer. Unbreaks unmailboxes, closes #3273. 2009-06-17 15:23 -0700 Petr P­saĊ™ (fe94f01b369a) * ChangeLog, po/cs.po: Updated Czech translation. 2009-06-17 13:58 -0700 Ivan Vilata i Balaguer (ef9b67c7ebc4) * po/ca.po: Updated Catalan translation. 2009-06-17 13:57 -0700 Vincent Lefevre (62471a5d3186) * po/fr.po: Updated French translation. 2009-06-17 20:42 +0200 Rocco Rutte (33376ae23d8f) * doc/devel-notes.txt: Mention check_sec.sh in doc/devel-notes.txt 2009-06-17 11:09 -0700 Brendan Cully (7f37d0a57d83) * crypt-gpgme.c, pgp.c: Display unsigned part of traditional PGP messages. Unbreaks [e2780a423d96], closes #3269 2009-06-17 19:29 +0200 Antonio Radici (a2a868fc40ea) * mx.c: Leave error handling of mx_get_magic() up to the caller. Closes #3268. 2009-06-17 18:02 +0200 Rocco Rutte (4b5326d8d2ee) * UPDATING, muttlib.c: Always display text/* parts inline, overrideable by auto_view. Closes #3246. 2009-06-15 22:05 +0200 Rocco Rutte (f40de578e8ed) * handler.c: Unbreak header weeding for message/rfc822 parts. Closes #3265. * init.c, lib.c, lib.h: Print timestamps in debug files. Closes #3263. * doc/manual.xml.head, doc/muttrc.man.head: bind: Clarify function argument usage * doc/manual.xml.head, init.h, url.c: Fixup URL parser The fixes are: 1) allow / in usernames for IMAP (by %-encoding /, : and % when pretty-printing urls), 2) for POP/SMTP the trailing / is no longer mandatory, 3) more strict %-decoding to avoid unexpected results 2009-06-15 17:49 +0200 Bertrand Janin (abc8fa0abeee) * UPDATING: Fix UPDATING 2009-06-15 17:06 +0200 Rocco Rutte (d6f88fbf8387) * url.c: Don't parse URL port as signed short, but to int and cast to unsigned short. Closes #3264. * doc/manual.xml.head: Manual: Add a short note about new header folding ...so we don't get bug reports for tab folding. * init.h: Clarify what $wrap=0 does * doc/mutt.css: CSS update for newer docbook xslt versions * pager.c: pager: intermediate fix for wrapping long header lines with $smart_wrap set The header folding algorithm outputs a word without spaces and longer than $wrap as-is. The pager however tries to break it. With $smart_wrap unset, it simply breaks at $wrap regardless if there's a space or not. With $smart_wrap set it tried to find a space and break if the next word is too long. This logic doesn't work for folded header lines which always start with space. Thus, the output would always contain the folding whitespace on a line by itself detaching the header value from the header name. As an intermediate fix we don't try to be smart if the line begins with space or tab. * pager.c, sendlib.c: pager: Ignore $wrap for attachment markers 2009-06-14 20:57 -0700 Brendan Cully (d2e0b495b148) * build-release: Remove duplicate update-changelog call. 2009-06-14 20:51 -0700 Antonio Radici (fef17099376d) * doc/mutt.man: Escape hyphens in man page. Closes #1937 again. 2009-06-14 12:29 -0700 Brendan Cully (7f8a2ba64516) * UPDATING: Update UPDATING * VERSION, po/bg.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/eu.po, po/fr.po, po/ga.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po: automatic post-release commit for mutt-1.5.20 * imap/imap.c: Save a dereference, and close #3226 with voodoo. * sendlib.c: Initialize pointer before use under -d4 2009-06-13 19:52 -0700 Brendan Cully (83ffb5593bc6) * curs_main.c: Adjust menu position after sync more carefully. Closes #3092. * init.h: Force status to redraw when $postponed changes. * postpone.c: Fix check for changed $postponed. The pointer-based check fails when the new $postponed string is stored in the same location. 2009-06-13 01:08 +0200 Rocco Rutte (536771b4e085) * commands.c, copy.c, copy.h, handler.c, protos.h, send.c, sendlib.c: Rewrite header folding We now distinct between sending and display case. For display, we always use tabs for folding for readability; for sending we now correctly fold using whitespace found in the header. Closes #2995. Closes #3080. 2009-06-12 23:10 +0200 Rocco Rutte (23de0e3c81f8) * UPDATING, init.h, mutt.h, send.c: Turn $fcc_attach into a quadoption. Closes #2528. * handler.c: Don't insert Content-Description/form name into reply. Closes #3164. * pgpkey.c: Allow ! suffix for pgp keys via $pgp_sign_as and prompt. Closes #1928. * commands.c, recvcmd.c: Warn before bouncing messages without From: header. Closes #3180. * smtp.c: SMTP: don't block but print CRLF for last line if it's not terminated 2009-06-11 18:34 +0200 Rocco Rutte (f60eb41ef63c) * UPDATING: Mention maildir mtime use in browser * send.c: Don't allow setting Return-Path: header via my_hdr Mutt has use_envelope_from/envelope_from_address for that purpose. Closes #1840. * browser.c: Use only latest mtime of new/cur for browser, not whole stat() info * copy.c: Don't reformat Return-Path (angle brackets are not optional). Closes #1702. 2009-06-10 17:44 +0200 Rocco Rutte (0721c3f6320d) * mbox.c, mx.c: Only print messages about CONTEXT when quiet flag not set 2009-06-09 22:09 -0700 Brendan Cully (dc9ec900c657) * mutt_ssl.c: Improve host checking for SSL with intermediate certificates. * mutt_ssl.c: Whitespace. * imap/imap.c: Skip comparison against current mailbox for idle connections. Closes #3216. * imap/util.c: Revert accidental change * imap/util.c: Remove trailing whitespace. 2009-06-08 23:55 -0700 Brendan Cully (15c662a95b91) * configure.ac, m4/libgnutls.m4: Test for libgnutls by hand rather than relying on deprecated libgnutls-config script. Closes #3239. 2009-06-07 10:55 -0700 Brendan Cully (9831d4c2c3f9) * imap/message.c: Do not display error message when user declines to create target mailbox. * imap/message.c: Minor cleanup in imap_copy_messages. 2009-06-07 08:14 +0200 Miroslav Lichvar (16592f0dfdaf) * configure.ac, mutt_ssl_gnutls.c: Disable checking certificate activation/expiration times in gnutls as we do the checks ourselves. 2009-06-06 22:31 -0700 Brendan Cully (e5c2befbf0f5) * imap/message.c: Do not treat already-seen headers as if they are new. See #2935. 2009-06-07 02:09 +0200 Rocco Rutte (a786b0e8627c) * doc/dotlock.man, doc/makedoc.c, doc/mbox.man, doc/mmdf.man, doc/mutt.man, init.h: Fix hyphens in manpages. Closes #1937 2009-06-04 17:07 +0200 Rocco Rutte (4f1ceaae93dc) * rfc3676.c: Fix pretty quoting for f=f by resetting space count when flushing paragraph 2009-06-03 22:35 +0200 Rocco Rutte (386f2ce6b872) * rfc3676.c: Fix several f=f bugs It fixes problems with space-handling in general (trailing spaces for display, un-space-stuffing), fixes quote prefix for replies and lowers FLOWED_MAX so we don't run into line length trouble too early. * UPDATING, globals.h, init.h, pager.c: Don't abuse $pager_context for searches, add $search_context. See #976. * pattern.c: Fix compiler warning 2009-06-02 20:25 +0200 Miroslav Lichvar (d1d0481d1ca1) * mutt_ssl_gnutls.c: Add support for GNUTLS_CERT_INSECURE_ALGORITHM error code * mutt_ssl_gnutls.c: Don't ignore certificate verification errors on saved signer certs 2009-06-02 10:18 -0700 Renİ Clerc (761bc678b23e) * po/nl.po: Updated Dutch translation. 2009-06-02 17:24 +0200 Rocco Rutte (8b2af5b64981) * buffy.c: Fix duplicate mailbox detection for remote folders * smtp.c: Fix array size * buffy.c: Thoroughly check for duplicates when parsing 'mailboxes' command. Closes #1428. 2009-06-01 14:50 +0200 Rocco Rutte (7a277ba306c9) * gnupgparse.c: Use mutt_atoi() when parsing GnuPG output. Closes #3145 * hcache.c, mh.c: More atoi() fixes * smtp.c: SMTP: Use mutt_atoi() to parse server responses * curs_main.c, edit.c, init.c, main.c, menu.c, mh.c, parse.c, resize.c, score.c, url.c: Use strtol() wrappers for most atoi() calls * lib.c, lib.h: Add mutt_atos(), mutt_atoi() and mutt_atol() (strtol() wrappers) * send.c: Treat address groups as no recipients When sending with Sendmail or SMTP we exclude address groups anyway, so treat these addresses as not present when checking for valid recipients before sending in the compose menu. * smtp.c: Weed out address groups for SMTP the same way we do for sendmail 2009-05-31 19:19 -0700 Brendan Cully (0024860ab03e) * doc/Makefile.am: Allow chunked and unchunked manuals to build in parallel. * mutt_ssl_gnutls.c: Remove trailing whitespace 2009-05-31 14:46 +0200 Rocco Rutte (8e591e80cd48) * smtp.c: SMTP: Don't send "undisclosed-recipients" in RCPT TO This happened for Bcc only messages. "undisclosed-recipients" is added in To: as guard against MTAs that leak BCCs if no To:/Cc: header is given. See Debian #529090. * init.h: Document that $pager_context affects searching, too * UPDATING: Update UPDATING * handler.c: Turn trailing \r\n to \n for qp-encoded messages. RFC2045 (sect. 6.7, (1) general 8bit representation) states that neither CR nor LF of the trailing CRLF may be qp-encoded. So we ignore trailing qp-encoded CRs. See #2898 though this is a partial fix only. * pager.c: Give $pager_context lines of context when searching page-based menus. Closes #976. * handler.c, init.h, rfc3676.c: f=f: Strip trailing spaces for interoperability. Closes #3001. If we make a fixed reply to a flowed message we remove trailing spaces and can now safely allow $indent_string to be used which is what users expect. Second, if we make a flowed reply to a fixed message we also strip trailing spaces since from format=fixed we assume all lines are fixed (i.e. we don't want to errorneously make fixed lines flowed). * handler.c, init.h, mutt.h: Add $honor_disposition to not display attachments inline. Closes #3170. Previously all MIME parts were displayed inline regardless of the Content-Disposition header (if present). With $honor_disposition set, only inline parts are displayed inline, attachments can only be viewed from the attachments menu. 2009-04-25 01:56 -0400 Dan Loewenherz (c1b947f60ea6) * init.h: Disables the insecure SSLv2 protocol. Closes #3192. 2009-05-30 19:37 +0200 Rocco Rutte (b080ae086a62) * ChangeLog, mbox.c: Keep new mail flag for mbox/mmdf folders after closing. Closes #1362. 2009-05-30 10:23 -0700 Vincent Lefevre (be7b3d349725) * po/fr.po: Updated French translation. 2009-05-30 00:24 +0200 Rocco Rutte (f65a1eb8abce) * smtp.c: Fix logic in f260f5836284 2009-05-29 21:33 +0200 Rocco Rutte (c4d86d4ea260) * pager.c: Drop modified version of and use mutt_read_line() in pager, too * history.c, init.c, lib.c, lib.h, mh.c, mutt_ssl_gnutls.c, pgp.c, query.c, rfc1524.c, smime.c: Add flags to mutt_read_line() for EOL-stripping and continuation support We use these to stop supporting EOL-escaping with \ which was wrong in most cases (e.g. $history_file), support is kept for reading config and mailcap files. Leaving CRLF in will be used for the pager. * menu.c, pager.c, pattern.c: Fall back to search if no query exists for search-(next|opposite) The pager had the fall-through to search, so for consistency do that in other menues as well. * pager.c: Fix pager search prompt for reverse search When doing a reverse search for the first time after switching to the pager, SearchBack is always 0 and thus gave the wrong prompt, change to using op directly. While I'm at it, unify search prompts. * doc/manual.xml.head: Manual: Fix markup of environment variables 2009-05-28 16:37 +0200 Rocco Rutte (f260f5836284) * smtp.c: SMTP: don't interactively authenticate without a password in batch/mailx mode Otherwise, if we don't have a password and curses is not running, the SASL authentication callback will crash mutt. We now abort if the password wasn't given in $smtp_url. * doc/mutt.css: Manual: vertical-align table cells at the top * doc/manual.xml.head, doc/mutt.css: Manual: Wrap muttrc commands in 2009-05-27 23:14 -0700 Brendan Cully (5502fb790bab) * mutt_ssl_gnutls.c: gnutls: do not ignore certificate problems. Specifically, do not allow revoked certificates or those signed by non-CAs unless they have been explicitly stored in the trusted certificate file. Thanks to Miroslav Lichvar. 2009-05-27 22:55 -0700 Miroslav Lichvar (85f41efec6bf) * ChangeLog, mutt_ssl_gnutls.c: Don't prompt to save certificates that are already saved but invalid. 2009-05-27 22:52 -0700 Brendan Cully (90ef283c103e) * mutt_ssl_gnutls.c: Don't leak gnutls certs on preauth validation failure. Thanks to Miroslav Lichvar. * mutt_ssl.c: Fix TLS certificate chain validation for openssl. 2009-05-25 17:31 -0700 Brendan Cully (8f11dd00c770) * mutt_ssl_gnutls.c: Fix a serious oversight validating TLS certificates. If any certificate in a chain presented by a server was accepted, the connection was allowed without verifying that the presented certificate was actually signed by the certificate in the chain. 2009-05-27 22:13 -0700 Petr P­saĊ™ (05bc65d6ae70) * po/cs.po: Updated Czech translation. 2009-05-27 10:13 +0200 Rocco Rutte (97305eeb91ce) * doc/manual.xml.head, doc/mutt.man: Document that -- is always mandatory after -a. Closes #3235. * init.h: Mention account-hook in the docs for $tunnel. Closes #3237. 2009-05-26 17:57 +0200 Rocco Rutte (392e945dfba7) * attach.c: Use charset parameter to view text attachments using . Closes #3234. 2009-05-25 15:57 +0200 Rocco Rutte (3f0963dd9257) * pager.c: pager: print progress percentage for attachments, too * attach.c: Mark strings for translation 2009-05-18 20:48 -0700 Vincent Lefevre (6d810c5cf4fc) * po/fr.po: Updated French translation. 2009-05-15 15:03 +0200 Takahashi Tamotsu (c665bdf5ff5f) * pop.c: POP: Notify user when messages are lost. Closes #2226. * pop.c: POP: Ignore already-deleted messages while syncing. Closes #2225. 2009-05-13 18:03 +0200 Rocco Rutte (0563c88ad6f0) * attach.c, recvattach.c: Don't loose error message when attachment saving fails. Closes #3156. 2009-05-15 12:46 +0200 Seth Arnold (1cea1ecf9f79) * UPDATING, color.c, doc/manual.xml.head: Make "uncolor" also work header and body objects. Closes #1046. 2009-05-13 14:20 +0200 Rocco Rutte (f96a176bb14c) * send.c: Don't set 'replied' flag if user changes References/IRT. Closes #2044. * mutt.h, muttlib.c: Add mutt_find_list() to lookup data in lists * alias.c, crypt-gpgme.c, group.c, mbox.c, pgp.c, query.c, rfc822.c, rfc822.h, send.c, smime.c: Prune empty address groups when preparing replies. Closes #2875. * mbox.c: Actually reopen mbox/mmdf files in case we find modifications. Closes #2725. Since the file is changed while we have it open in ctx->fp, we likely get wrong information when parsing the mailbox. Now we explicitely close and (re)open it. 2009-05-12 16:26 +0200 Rocco Rutte (06e318bfe8f2) * mbox.c: Backout errorneously commited mbox atime fix * OPS, mbox.c: Fix description for 2009-04-29 14:49 +0200 Rocco Rutte (335e6f782862) * browser.c: Fix maildir times in mailboxes browser. Closes #626. Instead of using the (pointless) mtime of the top-level maildir folder, use the latest mtime of the "new" and "cur" subdirectories. Maildir folders in the mailboxes list can now be properly sorted by date. This does not affect the directory browser. Also see #2421. * mailbox.h, mh.c, mx.c: Move Maildir/MH folder detection from mx.c to mh.c 2009-04-28 15:12 +0200 Rocco Rutte (4d9685be5987) * sendlib.c: Fold References: header so we never run into line length problems * headers.c: Fix comment typo 2009-04-28 14:18 +0200 Bertram Felgenhauer (6b20a3545f03) * doc/manual.xml.head, headers.c: Drop References header if In-Reply- To is modified by user. Closes #3221. 2009-04-28 13:05 +0200 Rocco Rutte (a13d8fd40094) * send.c: Don't generate References: for reply to multiple messages All parent Message-Ids are present in In-Reply-To already. Also, RfC2822, section 3.6.4 discourages its generation. * sendlib.c: Don't trim In-Reply-To with $edit_headers set In case of a tagged reply to several messages, we want In-Reply-To to contain all parent Message-Ids. * imap/imap.c: Only sync changed messages back to hcache on mailbox sync * doc/manual.xml.head: For spam detection, mention $imap_headers. Closes #3223. * doc/manual.xml.head: Manual: Fix typo and reword paragraph 2009-04-26 21:09 +0200 Rocco Rutte (9fa4a3e74355) * UPDATING, doc/manual.xml.head, pop.c: POP: Support hcache updating, too. This also allows us to use hcache to manage "flagged" and "replied" message flags. * imap/imap.c, mh.c: Sync header to hcache when synching MH/Maildir/IMAP folders. Closes #2942. * pager.c: Use dynamic buffer for displaying pager lines. Closes #3162. With too small fixed-size buffers we can't color/find certain words that span buffers. This needs to duplicate mutt_read_line with the adjustment to leave line termination in and not support breaking long lines using \ at EOL. Other callers may want to use this one instead, too as we support \-escaping in too many places. * init.h: Document suffixes for %f in $folder_format 2009-04-22 23:29 +0200 Bertram Felgenhauer (0aa313a3bf20) * headers.c: Fix memory leak in mutt_edit_headers(). Closes #3220. 2009-04-25 10:51 +0200 Thomas Wiegner (8da22400a48d) * configure.ac, mkdtemp.c, protos.h: Add mkdtemp() from xfce to unbreak gpgme build on Solaris. Closes #3217. 2009-04-25 10:35 +0200 Rocco Rutte (c6de4f51b8c7) * ChangeLog, configure.ac, protos.h, strcasestr.c: Add strcasestr() from uclibc to unbreak (Open)Solaris build. Closes #3222. 2009-04-21 15:10 -0400 Aron Griffis (3d89eddb2d9a) * buffy.c: Equivalent mutt_buffy, but readable code * buffy.c, buffy.h: Call mutt_expand_path() from mutt_buffy to fix imap separator. Closes #3208 and #3218 * buffy.c: Use slen instead of assuming _POSIX_PATH_MAX 2009-04-23 12:51 -0700 Vincent Lefevre (b5b4e652e4b1) * ChangeLog, po/fr.po: Updated French translation. 2009-04-20 18:36 +0200 Christoph Berg (39fee3a9d034) * doc/manual.xml.head, init.h: Better document that some send-hooks can't work with $autoedit. Closes #1834. 2009-04-20 18:26 +0200 Rocco Rutte (6cc887ccd229) * init.h: Fix typo for $imap_pass 2009-04-17 18:05 +0200 Rocco Rutte (7d44a83efcc6) * pgp.c: Support the Charset: armor header for inline PGP. Closes #3039. The header is defined as optional by RfC4880. This is based on patch-1.5.9.tamo.pgp_charsetchack.1. We only support reading this header and, if present, recode the PGP output from the given charset to $charset if we find it valid; otherwise fall back to UTF-8. Certain clients make use of the header when sending mail, so mutt should respect it because some messages are otherwise unreadable. The sending side is not touched, we unconditionally send UTF-8. 2009-04-17 15:45 +0200 Michael Elkins (61a0c67ed727) * sendlib.c: Make sure Recent-From: consults $realname. Closes #1721. 2009-04-17 15:37 +0200 Rocco Rutte (3a7ecc3f8aeb) * UPDATING, functions.h, pager.c: Make and work in the pager, too. Closes #3212. * pager.c: Don't consider \n part of a line for body coloring. Closes #2363. * attach.c: Enlarge buffer size for parsing mailcap files We really need code for dynamic buffers which would solve a few other bugs, too. Closes #2205. 2009-04-16 19:23 +0200 Rocco Rutte (a4f66ae72dc5) * ChangeLog, pop_lib.c: POP: Default to using getservbyname() as we do for IMAP and SMTP * doc/manual.xml.head: Manual: Improve docs on URL syntax, add examples * doc/manual.xml.head: Manual: Add user-defined variables to variable types 2009-04-11 10:35 +0200 Rocco Rutte (7d7976cd4fc4) * ChangeLog, buffy.c, buffy.h, commands.c, sendlib.c: Don't raise new mail flag on mbox/mmdf Fcc mailboxes. Closes #1896. 2009-04-08 16:25 +0200 Rocco Rutte (5b631ee33281) * hdrline.c: For %F, display Bcc recipient if no other recipients found. Closes #3157. * UPDATING, doc/manual.xml.head, doc/muttrc.man.head, pattern.c: Make ~x match In-Reply-To, too. Closes #771. 2009-04-07 19:57 +0200 Rocco Rutte (667b0006b586) * sendlib.c: Fix b5cbd0dab863, closes #3215. Still valgrind reports 'fromcode' as leaking. 2009-04-07 11:32 +0200 Erik Hovland (d344c6429a48) * sendlib.c: Try to correct usage of tempfile and *tempfile Since tempfile is a double pointer checking for tempfile and then dereferencing with *tempfile is not correct. 2009-04-06 22:05 +0200 Rocco Rutte (d639baaf57fb) * doc/manual.xml.head: Manual: Fix typo 2009-04-06 19:10 +0200 Erik Hovland (4fe35e9984ba) * sendlib.c: mutt_message_to_7bit(): Only close file pointer if we opened it The pointer is to be managed outside the function and provided. Only close it we opened it ourself using fopen(). 2009-04-06 19:07 +0200 Erik Hovland (b5cbd0dab863) * sendlib.c: Plug memory leaks in sendlib.c 2009-04-05 13:41 +0200 Rocco Rutte (5d393e716c51) * init.h, sendlib.c: Backed out changeset 23c7b469ff20 This requires more thought: if the user has -- in $sendmail, we need to add our arguments for 8BITMIME/DSN/etc. before it and not after. See #3168. * doc/manual.xml.head: Manual: Make sure every rc command has a synopsis in its describing section * doc/manual.xml.head: Manual: Fold consecutive into just one This make it visually easier to spot what belongs together. * doc/manual.xml.head: Manual: More entities and as appropriate 2009-04-04 16:23 +0200 Rocco Rutte (a4b635e96b30) * doc/Makefile.am: Manual: Improve 'sortcheck' target Don't call up diff+pager if all is sorted and remove the temp files for diffing we created. * doc/gen-map-doc, doc/manual.xml.head, doc/manual.xml.tail: Manual: Capitalize headlines * doc/manual.xml.head: Manual: Move section on mixmaster support to Optional Features * doc/manual.xml.head: Manual: Remove duplicate section on mailcap use from security chapter We already have a more detailed section on secure mailcap usage, so link to it. * doc/manual.xml.head: Manual: Minor improvements and fixes * doc/Makefile.am, doc/manual.xml.head: Manual: Add a short chapter summarizing security considerations * doc/manual.xml.head: Manual: Use — in text rather than -- * doc/manual.xml.head: Manual: Add section on padding for format strings * doc/manual.xml.head: Manual: Mention reply types in "Sending Mail" section * doc/manual.xml.head: Manual: Add table with navigation keys for page-based menus * doc/mutt.css: mutt.css: Add left+right margins to screen, note and examples * doc/manual.xml.head: Manual: Add section on screens and menus with short descriptions. Mostly stolen from old mutt-ng docs with adjustments. 2009-04-02 13:11 +0200 Steve Kemp (23c7b469ff20) * init.h, sendlib.c: Only append -- to $sendmail if not present. Closes #3168. This allows users to add custom recipients via $sendmail. 2009-04-02 12:57 +0200 Rocco Rutte (bfb12cf02417) * init.h: Clarify what $attach_charset does, closes #3165. * doc/Makefile.am: Add 'sortcheck' target to doc/Makefile.am This should be used from time to time to check if vars are sorted. Closes #3191. * init.h: Sort $pgp_* and $crypt_* vars, see #3191. * init.h: Sort $smime_* vars, see #3191. 2009-04-01 14:33 +0200 Miroslav Lichvar (8205a12329d3) * hcache.c, muttlib.c: Use PATH_MAX for buffers passed to realpath(3) as we're supposed to 2009-04-01 13:16 +0200 Rocco Rutte (47c64fd9ac70) * doc/gen-map-doc, doc/manual.xml.head: Manual: Fix openjade warnings * doc/makedoc.c, doc/mutt.css: makedoc: Render description lists as This looks better and is more compact (except missing column headers.) 2009-03-31 16:03 +0200 Rocco Rutte (22f21b558f57) * doc/manual.xml.head: Manual: Add an example of how to manage multiple accounts using folder-hook * UPDATING, doc/manual.xml.head, mutt.h, pattern.c: Perform case insensitive string search if pattern is lower case ...since we do that for regex patterns already. It doesn't work for IMAP server-side searches. * doc/manual.xml.head: Manual: Fix markup of ".muttrc" * doc/manual.xml.head: Manual: Always spell mutt as "Mutt" * doc/manual.xml.head: Manual: Replace netscape with firefox * doc/manual.xml.head: Manual: use instead of " quotes * doc/manual.xml.head: Manual: Lots of minor improvements (markup consistency, wording) 2009-03-30 14:58 +0200 Rocco Rutte (318748f3962b) * doc/manual.xml.head: For mailbox formats, add some more verbose pros and cons * doc/manual.xml.head: Manual: Add section about zeroprinting format strings to format string section 2009-03-28 22:37 +0100 Thomas Roessler (be9fb07730c6) * mutt_idna.c: Make IDNA code more readable 2009-03-28 16:11 +0100 Rocco Rutte (77cfe8016930) * doc/manual.xml.head: Manual: Add section roughly explaining config option types * doc/makedoc.c: makedoc: make output slightly more readable Add using HTML which save lots of vertical space. Also, drop the newline before to save some space. 2009-03-27 18:02 +0100 Rocco Rutte (a06a2a4c5ebc) * rfc3676.c: f=f: Fix debug messages 2009-03-19 17:19 +0100 Rocco Rutte (754ea0f091fc) * doc/manual.xml.head: Improve section on patterns * curs_lib.c: Fix progress update debug message * doc/manual.xml.head, doc/muttrc.man.head: Document kilo and mega suffixes for range patterns Document it only for ~z (message size) as they don't make much sense for other patterns like message score or number of attachments. 2009-03-18 17:40 +0100 Rocco Rutte (8528b8e715da) * init.h: Properly initialize more structs 2009-03-19 13:38 +0100 Erik Hovland (a802b5127f09) * pgp.c: Remove unused variable 2009-03-19 10:36 +0100 Roman Kraevskiy (6fac57b97bf1) * mutt_sasl.c: Restore connection polling callback when closing SASL connection. Closes #3206. 2009-03-18 14:48 +0100 Erik Hovland (17d770ae41e4) * smime.c: S/MIME: Don't leak intermediate cert key * buffy.c: Properly initialize struct stats in buffy check 2009-03-17 20:04 +0100 Rocco Rutte (903b3cee5485) * addrbook.c, browser.c, compose.c, curs_main.c, imap/auth.c, mx.c, pattern.c, pop_auth.c, postpone.c, query.c, recvattach.c, remailer.c: Fix some warnings with -W about missing initializers in structs 2009-03-17 16:44 +0100 Todd Zullinger (bb9b845800f6) * pgp.c: Ensure display is redrawn for application/pgp When using gpg-agent, a hard redraw is needed after the pinentry program is called. Otherwise, the screen is garbled and key bindings are screwed up. Closes #3196. 2009-03-15 16:44 +0100 Rocco Rutte (bc7c64ff3e48) * configure.ac, protos.h, wcscasecmp.c: Add wcscasecmp() compatibility function (for OS X) * doc/mutt.man: mutt.1: Mention that -a should be last in option list. Closes #3202 * alias.c: Only define min() if not present. Closes #3199 2009-03-15 14:25 +0100 Erik Hovland (3c154fcdad4c) * rfc822.c: The assigned value of dom is never used. Remove assignment * alias.c: The file handle will leak if fread fails 2009-03-12 15:16 -0700 Erik Hovland (53bea026a2a2) * curs_main.c: resort_index will use menu->current as a index into an array. If menu->current is negative, bad things can happen. So check it before calling resort_index * recvcmd.c: 'last' is assigned but never used. Remove assignment. 2009-03-15 13:46 +0100 Rocco Rutte (1238dff54a15) * alias.c, attach.c, buffy.c, check_sec.sh, commands.c, compose.c, copy.c, crypt-gpgme.c, crypt.c, edit.c, editmsg.c, gnupgparse.c, handler.c, headers.c, help.c, history.c, imap/message.c, init.c, lib.c, main.c, mbox.c, mh.c, mutt_ssl.c, mutt_ssl_gnutls.c, muttlib.c, pager.c, pattern.c, pgp.c, pgpkey.c, pgppubring.c, pop.c, postpone.c, query.c, recvattach.c, recvcmd.c, rfc1524.c, rfc3676.c, send.c, sendlib.c, smime.c, smtp.c: Use safe_fclose() instead of fclose(), add fclose() to check_sec.sh 2009-03-10 18:39 +0100 NONAKA Kimihiro (cc6fede605d4) * mh.c: Fix crashes with 64bit time_t. Closes #3184. 2009-03-09 12:04 +0100 Vincent Lefevre (4ce562b7f5d7) * mbyte.h: Unbreak compilation on OS X with --with-regex/--without-wc- funcs. Closes #3149. 2009-03-09 11:58 +0100 Rocco Rutte (f3a33b77dc90) * mutt.h, regex.c: Unbreak compilation with --without-wc- funcs on OS X 10.5.*, see #3149. * init.h: Fix 11cd72da743a * init.h: Sort SSL-related variables, see #3191. * hash.c, hash.h, init.c, mh.c, thread.c: Restore $reverse_alias feature by using case-insensitive hash keys The fix is implemented as callbacks in the hash table so we can avoid working with copies of the mailbox keys but work on the originals instead and don't pollute the code with lower-case conversions all over the place. While I'm at it, turn int hashes into unsigned values since the hash function returns unsigned values now, too. Closes #3185. 2009-03-07 13:49 +0100 Rocco Rutte (ff1906f70b1b) * init.h: Sort most variables (except crypto), see #3191. * doc/manual.xml.head: Fix typo, see #2430. 2009-02-20 22:14 +0100 Rocco Rutte (35fbea209c6e) * doc/manual.xml.head: Manual: verbosely document how the initial folder is determined, see #3189. * doc/manual.xml.head: Document address normalization. Closes #2430. * headers.c: Simplify and fix Attach: header parsing With ee5e696a9d08 we would skip beyond the filename to look for a description. This changeset fixes it. * main.c: Set magic from -m before processing queries (-Q) or dumping variables (-D) * doc/mutt.man, init.h: Better document how the initial folder is determined. Closes #3189. 2009-02-15 16:09 +0100 Rocco Rutte (ee5e696a9d08) * doc/manual.xml.head, headers.c: Support spaces in Attach: pseudoheader. Closes #3179. 2009-02-10 13:05 +0100 Rocco Rutte (a21f8bf84149) * init.h: Fix documentation typos. Closes #3178. 2009-01-27 12:58 -0800 Brendan Cully (7ddf1d1cc490) * imap/imap.c: Move socket close into imap_logout from imap_logout_all * imap/imap.c: IMAP: only close socket when not already disconnected. 2009-01-27 18:48 +0100 Rocco Rutte (d7e44862a08a) * help.c, main.c, mh.c: Update copyright years * help.c: Fix help alignment for escape sequences at screen boundary. Closes #3146. * mh.c: Unconditionally inode-sort Maildir and MH folders. Closes #3166. 2009-01-26 12:32 -0800 Brendan Cully (da94a92c3ba0) * bcache.c: Remove old bcache tmpfile before trying to create new one. Closes #3163. 2009-01-20 12:34 -0800 Renİ Clerc (2006526d1d26) * po/nl.po: Updated Dutch translation 2009-01-19 20:39 -0800 Ivan Vilata i Balaguer (038f1e5cdaea) * po/ca.po: Updated Catalan translation 2009-01-14 20:04 +0000 Emanuele Giaquinta (ddf48761aacf) * imap/browse.c: Use imap_utf7_encode instead of imap_munge_mbox_name+imap_unquote_string. 2009-01-14 11:45 -0800 Brendan Cully (cd0b17c80372) * doc/manual.xml.head: Add missing hooks to manual section 4 2009-01-13 06:51 -0800 Brendan Cully (10e224e86f0b) * hook.c: Do not allow a command in an account-hook to trigger another account-hook. Recent changes in the IMAP path canonifier mean that account-hooks that set variables to URLs (eg folder, spoolfile) can trigger a recursive account-hook. Now we just bail out of account- hook early if we are called recursively, but perhaps we should warn the user to use a folder-hook instead. Thanks to Kyle Wheeler for finding this one. 2009-01-12 10:27 -0800 Brendan Cully (6976aca75d04) * init.h: Correct defaults for new ssl options (fixes manual generation) 2009-01-11 21:47 -0800 Brendan Cully (ff74e612f790) * mutt_ssl_gnutls.c: GNUTLS: check all available certs noninteractively before presenting any menus * UPDATING, init.h, mutt.h, mutt_ssl.c, mutt_ssl_gnutls.c: Add $ssl_verify_dates option to relax certificate date validation * UPDATING, init.h, mutt.h, mutt_ssl.c, mutt_ssl_gnutls.c: Add $ssl_verify_host to allow skipping host name validation 2009-01-10 22:09 -0800 Brendan Cully (db3a61fcde35) * imap/util.c: Assume INBOX for ""/NULL in imap_mxcmp * imap/util.c: Use known connection delimiter in imap_expand_path * imap/util.c: Guard against NULL pointers in imap_mxcmp * imap/imap_private.h, imap/util.c: Canonicalize IMAP mailboxes before comparing them. * imap/util.c: Fix last commit * imap/util.c: Prioritize the entered IMAP folder delimiter. First priority is the connection delimiter. Second priority is the user's delimiter if it is in imap_delim_chars. We no longer use the first character in imap_delim_chars. 2009-01-06 18:34 -0800 Vsevolod Volkov (4032dfd52118) * po/ru.po: Updated Russian translation 2009-01-05 16:43 -0800 Brendan Cully (0d81ef9d40fd) * build-release: Sign tagged revision, not the one after * .hgsigs: mutt-1.5.19 signed * .hgtags: Added tag mutt-1-5-19-rel for changeset a4b47ac32d32 * VERSION, po/bg.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/eu.po, po/fr.po, po/ga.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po: automatic post-release commit for mutt-1.5.19 * build-release: Fall back to vi if VISUAL is unset in build-release * UPDATING: Update UPDATING * imap/command.c, imap/imap.c, imap/imap_private.h: Report CREATE failures * browser.c: Style fixes * browser.c: Leave error message on screen if imap_mailbox_create fails * doc/mutt.man: Add pointer to the full manual to the front of mutt.1 2009-01-05 09:16 -0800 Petr P­saĊ™ (990f1e841dd4) * po/cs.po: Updated Czech translation 2009-01-04 22:36 -0800 Vincent Lefevre (9af288ee9e91) * po/fr.po: Updated French translation 2009-01-04 18:32 -0800 Emanuele Giaquinta (e47d05dc2633) * imap/util.c: Indentation fix 2009-01-04 18:12 -0800 Brendan Cully (1947c370fcd9) * Makefile.am: Remove obsolete make target * doc/manual.xml.head: Update copyright in manual 2009-01-04 17:07 -0800 Vincent Lefevre (bbe8694acc33) * po/fr.po: Updated French translation 2009-01-04 17:04 -0800 Brendan Cully (d98ab9a591e5) * pgpkey.c: Remove dead code. Thanks to Ingo Schwarze. * COPYRIGHT: Update copyrights * addrbook.c, ascii.h, attach.c, bcache.c, bcache.h, browser.c, browser.h, charset.c, charset.h, commands.c, complete.c, compose.c, crypt-gpgme.c, crypt.c, curs_main.c, dotlock.c, editmsg.c, enter.c, functions.h, gnupgparse.c, handler.c, hdrline.c, hook.c, init.h, lib.c, lib.h, menu.c, mh.c, mutt_idna.c, mutt_idna.h, mutt_sasl.h, mutt_socket.c, muttlib.c, mx.c, pager.c, pattern.c, pgp.c, pgp.h, pgpinvoke.c, pgpkey.c, pgplib.c, pgplib.h, pgppacket.c, pgppubring.c, pop.c, postpone.c, protos.h, query.c, recvattach.c, recvcmd.c, remailer.c, rfc1524.c, rfc2047.c, rfc2231.c, rfc3676.h, send.c, setenv.c, status.c, url.c: Update copyrights. Closes #3016. I went through the logs of each file with a copyright header and updated the years for the authors in the headers for any non-comment changes they introduced. What a pain! * imap/auth_anon.c, imap/auth_cram.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/imap.h, imap/message.h, imap/utf7.c: IMAP copyright header updates * imap/auth_gss.c, imap/command.c, imap/imap.c, imap/message.c: Updated copyrights * smtp.c: SMTP: complain when authentication fails. Closes #2117. Now each failed attempt emits an error before mutt tries the next method. Possibly we should just fail immediately? * parse.c, snprintf.c: Use ! instead of testing pointers against 0. Closes #3125. 2009-01-04 20:12 +0100 Rocco Rutte (33fa1ca4b6af) * doc/gen-map-doc, init.h: Documentation: Minor fixes and improvements 2009-01-03 21:02 -0800 Brendan Cully (5a80ee54a05f) * imap/command.c, imap/imap.c, init.c, muttlib.c, postpone.c: Raise debug level for several messages * imap/auth_gss.c: Guard against unused variable warning. Thanks to Ingo Schwarze. * doc/Makefile.am: Remove obsolete reference to ChangeLog.old. Thanks to Ingo Schwarze. * imap/message.c: Ignore unexpected FETCH responses during imap_read_headers. Thanks to Chris Li for the excellent bug report in #3041. See #2902, #2935, #2985, #3028, #3041, #3143. With luck, this may close them. In truth, imap_read_headers is still a horrible kludge of duct tape and chicken wire. * hash.c, hash.h: Make hash_string work in unsigned domain * main.c: Another copyright update * main.c, smtp.c: Update some copyrights 2009-01-02 23:13 -0800 Brendan Cully (87ef3e3550e4) * smtp.c: SMTP: Use Hostname if Fqdn is bogus. Closes #3142. * init.h: More tyops * doc/manual.xml.head: Tyops * mutt_ssl_gnutls.c: Add SSL intermediate certificate support for gnutls * mutt_ssl.c: Simplify intermediate certificate handling. Return immediately if a certificate is interactively accepted. Display index of current certificate in chain in menu title. 2009-01-02 12:46 -0800 TAKAHASHI Tamotsu (5db868a874b6) * globals.h, mutt_ssl.c: Add support for intermediate certificates to openssl code. Gnutls support is not included in this patch. 2009-01-01 17:02 -0800 Marcel Telka (532f695b4352) * smtp.c: SMTP: Require SP after AUTH response (strict RFC conformance). Closes #3141. 2009-01-01 16:55 -0800 Brendan Cully (859009a507d8) * smtp.c: SMTP: guard against short server responses 2008-12-30 00:58 +0100 Rocco Rutte (ac870203179d) * doc/manual.xml.head: Manual: Add missing maps to bind command docs * doc/TODO: Documentation: Update TODO 2008-12-26 14:36 +0100 Rocco Rutte (4917897ac9b1) * init.c: Ignore NULL/empty lines in rc parser, fixes mutt -e '' crashing 2008-12-20 15:33 -0800 TAKAHASHI Tamotsu (349986b1af09) * po/ja.po: Updated Japanese translation. 2008-12-20 15:31 -0800 Brendan Cully (a715dca3610c) * main.c: Cosmetics for mutt -v 2008-11-26 01:15 +0000 Peter Collingbourne (2fefd56f440c) * sendlib.c: Disable line wrapping for Message-ID header 2008-12-16 20:19 -0800 Erik Hovland (f6ae8dc70850) * imap/util.c: Remove unused #include directives * crypt.c, curs_main.c, flags.c, group.c, hcache.c, mh.c, pager.c, pgpmicalg.c, pgppacket.c, postpone.c, query.c, recvattach.c, recvcmd.c, send.c: Remove unused #include directives * sendlib.c: mutt_gen_msgid() allocates the msgid off of the heap. Since mutt_gen_msgid() allocates the msgid string with strdup, it is getting it off of the heap. When the fprintf writes the msgid, the string is no longer tracked and that string is leaked. * parse.c: Match variable type to getch return type * alias.c: Fix fread rc check * hash.c: Remove redundant int clamping * smime.c: Remove check that always succeeds * pattern.c: fclose correct fp * rfc822.c: buflen cannot be 0 here 2008-12-16 12:36 -0800 Brendan Cully (bbf4dfc2aa41) * ChangeLog.old, Makefile.am: Remove ChangeLog.old * imap/Makefile.am: Remove imap/BUGS from Makefile.am 2008-12-15 23:45 -0800 Erik Hovland (adaf24e4117d) * mh.c: Fix bad parentheses in stat rc * bcache.c: snprintf returns int, not size_t * muttlib.c: Always va_end(ap_retry) in mutt_buffer_printf 2008-12-15 23:11 -0800 Brendan Cully (101a8bcba613) * imap/BUGS: imap/BUGS is superseded by the BTS 2008-12-10 20:00 +0100 Rocco Rutte (817e5987633b) * doc/manual.xml.head: Manual: Fix typos found by by Vincent Lefevre, see #3109. * doc/manual.xml.head: Manual: trim into chapter, add notes about contributing * doc/mutt.css: Make mutt.css apply for all media types * doc/manual.xml.head, doc/mutt.css: Manual: Wrap important notes in * doc/Makefile.am, doc/chunk.xsl, doc/html.xsl, doc/mutt.xsl: Move common XSLT params to mutt.xsl imported into (chunk|html).xsl * doc/gen-map-doc, doc/makedoc.c, doc/manual.xml.head, doc/manual.xml.tail, init.h: Manual: Only wrap real text paragraphs in Elements such as lists, tables, synopsis don't need it and produce hundreds of warnings in tidy because of empty paragraphs. With this change, the manual should be fully XHTML 1.0 Transitional and validate without warnings and errors. * hg-commit: hg-commit: Work even in subdirectories * doc/chunk.xsl, doc/html.xsl: Manual: Use right XSLT-way to embed CSS to avoid invalid xmlns="" attributes on

The Mutt E-Mail Client

Michael Elkins

version 1.5.21 (2010-09-15)

Abstract

“All mail clients suck. This one just sucks less.” — me, circa 1995


Table of Contents

1. Introduction
1. Mutt Home Page
2. Mailing Lists
3. Getting Mutt
4. Mutt Online Resources
5. Contributing to Mutt
6. Typographical Conventions
7. Copyright
2. Getting Started
1. Core Concepts
2. Screens and Menus
2.1. Index
2.2. Pager
2.3. File Browser
2.4. Help
2.5. Compose Menu
2.6. Alias Menu
2.7. Attachment Menu
3. Moving Around in Menus
4. Editing Input Fields
4.1. Introduction
4.2. History
5. Reading Mail
5.1. The Message Index
5.2. The Pager
5.3. Threaded Mode
5.4. Miscellaneous Functions
6. Sending Mail
6.1. Introduction
6.2. Editing the Message Header
6.3. Sending Cryptographically Signed/Encrypted Messages
6.4. Sending Format=Flowed Messages
7. Forwarding and Bouncing Mail
8. Postponing Mail
3. Configuration
1. Location of Initialization Files
2. Syntax of Initialization Files
3. Address Groups
4. Defining/Using Aliases
5. Changing the Default Key Bindings
6. Defining Aliases for Character Sets
7. Setting Variables Based Upon Mailbox
8. Keyboard Macros
9. Using Color and Mono Video Attributes
10. Message Header Display
10.1. Header Display
10.2. Selecting Headers
10.3. Ordering Displayed Headers
11. Alternative Addresses
12. Mailing Lists
13. Using Multiple Spool Mailboxes
14. Monitoring Incoming Mail
15. User-Defined Headers
16. Specify Default Save Mailbox
17. Specify Default Fcc: Mailbox When Composing
18. Specify Default Save Filename and Default Fcc: Mailbox at Once
19. Change Settings Based Upon Message Recipients
20. Change Settings Before Formatting a Message
21. Choosing the Cryptographic Key of the Recipient
22. Adding Key Sequences to the Keyboard Buffer
23. Executing Functions
24. Message Scoring
25. Spam Detection
26. Setting and Querying Variables
26.1. Variable Types
26.2. Commands
26.3. User-Defined Variables
26.4. Type Conversions
27. Reading Initialization Commands From Another File
28. Removing Hooks
29. Format Strings
29.1. Basic usage
29.2. Conditionals
29.3. Filters
29.4. Padding
4. Advanced Usage
1. Character Set Handling
2. Regular Expressions
3. Patterns: Searching, Limiting and Tagging
3.1. Pattern Modifier
3.2. Simple Searches
3.3. Nesting and Boolean Operators
3.4. Searching by Date
4. Using Tags
5. Using Hooks
5.1. Message Matching in Hooks
6. External Address Queries
7. Mailbox Formats
8. Mailbox Shortcuts
9. Handling Mailing Lists
10. New Mail Detection
10.1. How New Mail Detection Works
10.2. Polling For New Mail
11. Editing Threads
11.1. Linking Threads
11.2. Breaking Threads
12. Delivery Status Notification (DSN) Support
13. Start a WWW Browser on URLs
14. Miscellany
5. Mutt's MIME Support
1. Using MIME in Mutt
1.1. MIME Overview
1.2. Viewing MIME Messages in the Pager
1.3. The Attachment Menu
1.4. The Compose Menu
2. MIME Type Configuration with mime.types
3. MIME Viewer Configuration with Mailcap
3.1. The Basics of the Mailcap File
3.2. Secure Use of Mailcap
3.3. Advanced Mailcap Usage
3.4. Example Mailcap Files
4. MIME Autoview
5. MIME Multipart/Alternative
6. Attachment Searching and Counting
7. MIME Lookup
6. Optional Features
1. General Notes
1.1. Enabling/Disabling Features
1.2. URL Syntax
2. SSL/TLS Support
3. POP3 Support
4. IMAP Support
4.1. The IMAP Folder Browser
4.2. Authentication
5. SMTP Support
6. Managing Multiple Accounts
7. Local Caching
7.1. Header Caching
7.2. Body Caching
7.3. Cache Directories
7.4. Maintenance
8. Exact Address Generation
9. Sending Anonymous Messages via Mixmaster
7. Security Considerations
1. Passwords
2. Temporary Files
3. Information Leaks
3.1. Message-Id: headers
3.2. mailto:-style Links
4. External Applications
8. Performance Tuning
1. Reading and Writing Mailboxes
2. Reading Messages from Remote Folders
3. Searching and Limiting
9. Reference
1. Command-Line Options
2. Configuration Commands
3. Configuration Variables
3.1. abort_nosubject
3.2. abort_unmodified
3.3. alias_file
3.4. alias_format
3.5. allow_8bit
3.6. allow_ansi
3.7. arrow_cursor
3.8. ascii_chars
3.9. askbcc
3.10. askcc
3.11. assumed_charset
3.12. attach_charset
3.13. attach_format
3.14. attach_sep
3.15. attach_split
3.16. attribution
3.17. auto_tag
3.18. autoedit
3.19. beep
3.20. beep_new
3.21. bounce
3.22. bounce_delivered
3.23. braille_friendly
3.24. certificate_file
3.25. charset
3.26. check_mbox_size
3.27. check_new
3.28. collapse_unread
3.29. compose_format
3.30. config_charset
3.31. confirmappend
3.32. confirmcreate
3.33. connect_timeout
3.34. content_type
3.35. copy
3.36. crypt_autoencrypt
3.37. crypt_autopgp
3.38. crypt_autosign
3.39. crypt_autosmime
3.40. crypt_replyencrypt
3.41. crypt_replysign
3.42. crypt_replysignencrypted
3.43. crypt_timestamp
3.44. crypt_use_gpgme
3.45. crypt_use_pka
3.46. crypt_verify_sig
3.47. date_format
3.48. default_hook
3.49. delete
3.50. delete_untag
3.51. digest_collapse
3.52. display_filter
3.53. dotlock_program
3.54. dsn_notify
3.55. dsn_return
3.56. duplicate_threads
3.57. edit_headers
3.58. editor
3.59. encode_from
3.60. entropy_file
3.61. envelope_from_address
3.62. escape
3.63. fast_reply
3.64. fcc_attach
3.65. fcc_clear
3.66. folder
3.67. folder_format
3.68. followup_to
3.69. force_name
3.70. forward_decode
3.71. forward_decrypt
3.72. forward_edit
3.73. forward_format
3.74. forward_quote
3.75. from
3.76. gecos_mask
3.77. hdrs
3.78. header
3.79. header_cache
3.80. header_cache_compress
3.81. header_cache_pagesize
3.82. help
3.83. hidden_host
3.84. hide_limited
3.85. hide_missing
3.86. hide_thread_subject
3.87. hide_top_limited
3.88. hide_top_missing
3.89. history
3.90. history_file
3.91. honor_disposition
3.92. honor_followup_to
3.93. hostname
3.94. ignore_linear_white_space
3.95. ignore_list_reply_to
3.96. imap_authenticators
3.97. imap_check_subscribed
3.98. imap_delim_chars
3.99. imap_headers
3.100. imap_idle
3.101. imap_keepalive
3.102. imap_list_subscribed
3.103. imap_login
3.104. imap_pass
3.105. imap_passive
3.106. imap_peek
3.107. imap_pipeline_depth
3.108. imap_servernoise
3.109. imap_user
3.110. implicit_autoview
3.111. include
3.112. include_onlyfirst
3.113. indent_string
3.114. index_format
3.115. ispell
3.116. keep_flagged
3.117. locale
3.118. mail_check
3.119. mail_check_recent
3.120. mailcap_path
3.121. mailcap_sanitize
3.122. maildir_header_cache_verify
3.123. maildir_trash
3.124. mark_old
3.125. markers
3.126. mask
3.127. mbox
3.128. mbox_type
3.129. menu_context
3.130. menu_move_off
3.131. menu_scroll
3.132. message_cache_clean
3.133. message_cachedir
3.134. message_format
3.135. meta_key
3.136. metoo
3.137. mh_purge
3.138. mh_seq_flagged
3.139. mh_seq_replied
3.140. mh_seq_unseen
3.141. mime_forward
3.142. mime_forward_decode
3.143. mime_forward_rest
3.144. mix_entry_format
3.145. mixmaster
3.146. move
3.147. narrow_tree
3.148. net_inc
3.149. pager
3.150. pager_context
3.151. pager_format
3.152. pager_index_lines
3.153. pager_stop
3.154. pgp_auto_decode
3.155. pgp_autoinline
3.156. pgp_check_exit
3.157. pgp_clearsign_command
3.158. pgp_decode_command
3.159. pgp_decrypt_command
3.160. pgp_encrypt_only_command
3.161. pgp_encrypt_sign_command
3.162. pgp_entry_format
3.163. pgp_export_command
3.164. pgp_getkeys_command
3.165. pgp_good_sign
3.166. pgp_ignore_subkeys
3.167. pgp_import_command
3.168. pgp_list_pubring_command
3.169. pgp_list_secring_command
3.170. pgp_long_ids
3.171. pgp_mime_auto
3.172. pgp_replyinline
3.173. pgp_retainable_sigs
3.174. pgp_show_unusable
3.175. pgp_sign_as
3.176. pgp_sign_command
3.177. pgp_sort_keys
3.178. pgp_strict_enc
3.179. pgp_timeout
3.180. pgp_use_gpg_agent
3.181. pgp_verify_command
3.182. pgp_verify_key_command
3.183. pipe_decode
3.184. pipe_sep
3.185. pipe_split
3.186. pop_auth_try_all
3.187. pop_authenticators
3.188. pop_checkinterval
3.189. pop_delete
3.190. pop_host
3.191. pop_last
3.192. pop_pass
3.193. pop_reconnect
3.194. pop_user
3.195. post_indent_string
3.196. postpone
3.197. postponed
3.198. preconnect
3.199. print
3.200. print_command
3.201. print_decode
3.202. print_split
3.203. prompt_after
3.204. query_command
3.205. query_format
3.206. quit
3.207. quote_regexp
3.208. read_inc
3.209. read_only
3.210. realname
3.211. recall
3.212. record
3.213. reply_regexp
3.214. reply_self
3.215. reply_to
3.216. resolve
3.217. reverse_alias
3.218. reverse_name
3.219. reverse_realname
3.220. rfc2047_parameters
3.221. save_address
3.222. save_empty
3.223. save_history
3.224. save_name
3.225. score
3.226. score_threshold_delete
3.227. score_threshold_flag
3.228. score_threshold_read
3.229. search_context
3.230. send_charset
3.231. sendmail
3.232. sendmail_wait
3.233. shell
3.234. sig_dashes
3.235. sig_on_top
3.236. signature
3.237. simple_search
3.238. sleep_time
3.239. smart_wrap
3.240. smileys
3.241. smime_ask_cert_label
3.242. smime_ca_location
3.243. smime_certificates
3.244. smime_decrypt_command
3.245. smime_decrypt_use_default_key
3.246. smime_default_key
3.247. smime_encrypt_command
3.248. smime_encrypt_with
3.249. smime_get_cert_command
3.250. smime_get_cert_email_command
3.251. smime_get_signer_cert_command
3.252. smime_import_cert_command
3.253. smime_is_default
3.254. smime_keys
3.255. smime_pk7out_command
3.256. smime_sign_command
3.257. smime_sign_opaque_command
3.258. smime_timeout
3.259. smime_verify_command
3.260. smime_verify_opaque_command
3.261. smtp_authenticators
3.262. smtp_pass
3.263. smtp_url
3.264. sort
3.265. sort_alias
3.266. sort_aux
3.267. sort_browser
3.268. sort_re
3.269. spam_separator
3.270. spoolfile
3.271. ssl_ca_certificates_file
3.272. ssl_client_cert
3.273. ssl_force_tls
3.274. ssl_min_dh_prime_bits
3.275. ssl_starttls
3.276. ssl_use_sslv2
3.277. ssl_use_sslv3
3.278. ssl_use_tlsv1
3.279. ssl_usesystemcerts
3.280. ssl_verify_dates
3.281. ssl_verify_host
3.282. status_chars
3.283. status_format
3.284. status_on_top
3.285. strict_threads
3.286. suspend
3.287. text_flowed
3.288. thorough_search
3.289. thread_received
3.290. tilde
3.291. time_inc
3.292. timeout
3.293. tmpdir
3.294. to_chars
3.295. tunnel
3.296. uncollapse_jump
3.297. use_8bitmime
3.298. use_domain
3.299. use_envelope_from
3.300. use_from
3.301. use_idn
3.302. use_ipv6
3.303. user_agent
3.304. visual
3.305. wait_key
3.306. weed
3.307. wrap
3.308. wrap_headers
3.309. wrap_search
3.310. wrapmargin
3.311. write_bcc
3.312. write_inc
4. Functions
4.1. Generic Menu
4.2. Index Menu
4.3. Pager Menu
4.4. Alias Menu
4.5. Query Menu
4.6. Attachment Menu
4.7. Compose Menu
4.8. Postpone Menu
4.9. Browser Menu
4.10. Pgp Menu
4.11. Smime Menu
4.12. Mixmaster Menu
4.13. Editor Menu
10. Miscellany
1. Acknowledgements
2. About This Document

Chapter 1. Introduction

Mutt is a small but very powerful text-based MIME mail client. Mutt is highly configurable, and is well suited to the mail power user with advanced features like key bindings, keyboard macros, mail threading, regular expression searches and a powerful pattern matching language for selecting groups of messages.

1. Mutt Home Page

The official homepage can be found at http://www.mutt.org/.

2. Mailing Lists

To subscribe to one of the following mailing lists, send a message with the word subscribe in the body to list-name-request@mutt.org.

All messages posted to mutt-announce are automatically forwarded to mutt-users, so you do not need to be subscribed to both lists.

3. Getting Mutt

Mutt releases can be downloaded from ftp://ftp.mutt.org/mutt/. For a list of mirror sites, please refer to http://www.mutt.org/download.html.

For nightly tarballs and version control access, please refer to the Mutt development site.

4. Mutt Online Resources

Bug Tracking System

The official Mutt bug tracking system can be found at http://bugs.mutt.org/

Wiki

An (unofficial) wiki can be found at http://wiki.mutt.org/.

IRC

For the IRC user community, visit channel #mutt on irc.freenode.net.

USENET

For USENET, see the newsgroup comp.mail.mutt.

5. Contributing to Mutt

There are various ways to contribute to the Mutt project.

Especially for new users it may be helpful to meet other new and experienced users to chat about Mutt, talk about problems and share tricks.

Since translations of Mutt into other languages are highly appreciated, the Mutt developers always look for skilled translators that help improve and continue to maintain stale translations.

For contributing code patches for new features and bug fixes, please refer to the developer pages at http://dev.mutt.org/ for more details.

6. Typographical Conventions

This section lists typographical conventions followed throughout this manual. See table Table 1.1, “Typographical conventions for special terms” for typographical conventions for special terms.

Table 1.1. Typographical conventions for special terms

ItemRefers to...
printf(3)UNIX manual pages, execute man 3 printf
<PageUp>named keys
<create-alias>named Mutt function
^GControl+G key combination
$mail_checkMutt configuration option
$HOMEenvironment variable

Examples are presented as:

mutt -v

Within command synopsis, curly brackets (“{}”) denote a set of options of which one is mandatory, square brackets (“[]”) denote optional arguments, three dots denote that the argument may be repeated arbitrary times.

7. Copyright

Mutt is Copyright Âİ 1996-2009 Michael R. Elkins and others.

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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Chapter 2. Getting Started

This section is intended as a brief overview of how to use Mutt. There are many other features which are described elsewhere in the manual. There is even more information available in the Mutt FAQ and various web pages. See the Mutt homepage for more details.

The keybindings described in this section are the defaults as distributed. Your local system administrator may have altered the defaults for your site. You can always type “?” in any menu to display the current bindings.

The first thing you need to do is invoke Mutt, simply by typing mutt at the command line. There are various command-line options, see either the Mutt man page or the reference.

1. Core Concepts

Mutt is a text-based application which interacts with users through different menus which are mostly line-/entry-based or page-based. A line-based menu is the so-called “index” menu (listing all messages of the currently opened folder) or the “alias” menu (allowing you to select recipients from a list). Examples for page-based menus are the “pager” (showing one message at a time) or the “help” menu listing all available key bindings.

The user interface consists of a context sensitive help line at the top, the menu's contents followed by a context sensitive status line and finally the command line. The command line is used to display informational and error messages as well as for prompts and for entering interactive commands.

Mutt is configured through variables which, if the user wants to permanently use a non-default value, are written to configuration files. Mutt supports a rich config file syntax to make even complex configuration files readable and commentable.

Because Mutt allows for customizing almost all key bindings, there are so-called “functions” which can be executed manually (using the command line) or in macros. Macros allow the user to bind a sequence of commands to a single key or a short key sequence instead of repeating a sequence of actions over and over.

Many commands (such as saving or copying a message to another folder) can be applied to a single message or a set of messages (so-called “tagged” messages). To help selecting messages, Mutt provides a rich set of message patterns (such as recipients, sender, body contents, date sent/received, etc.) which can be combined into complex expressions using the boolean and and or operations as well as negating. These patterns can also be used to (for example) search for messages or to limit the index to show only matching messages.

Mutt supports a “hook” concept which allows the user to execute arbitrary configuration commands and functions in certain situations such as entering a folder, starting a new message or replying to an existing one. These hooks can be used to highly customize Mutt's behavior including managing multiple identities, customizing the display for a folder or even implementing auto-archiving based on a per-folder basis and much more.

Besides an interactive mode, Mutt can also be used as a command-line tool only send messages. It also supports a mailx(1)-compatible interface, see Table 9.1, “Command line options” for a complete list of command-line options.

2. Screens and Menus

2.1. Index

The index is the screen that you usually see first when you start Mutt. It gives an overview over your emails in the currently opened mailbox. By default, this is your system mailbox. The information you see in the index is a list of emails, each with its number on the left, its flags (new email, important email, email that has been forwarded or replied to, tagged email, ...), the date when email was sent, its sender, the email size, and the subject. Additionally, the index also shows thread hierarchies: when you reply to an email, and the other person replies back, you can see the other person's email in a "sub-tree" below. This is especially useful for personal email between a group of people or when you've subscribed to mailing lists.

2.2. Pager

The pager is responsible for showing the email content. On the top of the pager you have an overview over the most important email headers like the sender, the recipient, the subject, and much more information. How much information you actually see depends on your configuration, which we'll describe below.

Below the headers, you see the email body which usually contains the message. If the email contains any attachments, you will see more information about them below the email body, or, if the attachments are text files, you can view them directly in the pager.

To give the user a good overview, it is possible to configure Mutt to show different things in the pager with different colors. Virtually everything that can be described with a regular expression can be colored, e.g. URLs, email addresses or smileys.

2.3. File Browser

The file browser is the interface to the local or remote file system. When selecting a mailbox to open, the browser allows custom sorting of items, limiting the items shown by a regular expression and a freely adjustable format of what to display in which way. It also allows for easy navigation through the file system when selecting file(s) to attach to a message, select multiple files to attach and many more.

2.4. Help

The help screen is meant to offer a quick help to the user. It lists the current configuration of key bindings and their associated commands including a short description, and currently unbound functions that still need to be associated with a key binding (or alternatively, they can be called via the Mutt command prompt).

2.5. Compose Menu

The compose menu features a split screen containing the information which really matter before actually sending a message by mail: who gets the message as what (recipients and who gets what kind of copy). Additionally, users may set security options like deciding whether to sign, encrypt or sign and encrypt a message with/for what keys. Also, it's used to attach messages, to re-edit any attachment including the message itself.

2.6. Alias Menu

The alias menu is used to help users finding the recipients of messages. For users who need to contact many people, there's no need to remember addresses or names completely because it allows for searching, too. The alias mechanism and thus the alias menu also features grouping several addresses by a shorter nickname, the actual alias, so that users don't have to select each single recipient manually.

2.7. Attachment Menu

As will be later discussed in detail, Mutt features a good and stable MIME implementation, that is, it supports sending and receiving messages of arbitrary MIME types. The attachment menu displays a message's structure in detail: what content parts are attached to which parent part (which gives a true tree structure), which type is of what type and what size. Single parts may saved, deleted or modified to offer great and easy access to message's internals.

3. Moving Around in Menus

The most important navigation keys common to line- or entry-based menus are shown in Table 2.1, “Most common navigation keys in entry-based menus” and in Table 2.2, “Most common navigation keys in page-based menus” for page-based menus.

Table 2.1. Most common navigation keys in entry-based menus

KeyFunctionDescription
j or <Down><next-entry>move to the next entry
k or <Up><previous-entry>move to the previous entry
z or <PageDn><page-down>go to the next page
Z or <PageUp><page-up>go to the previous page
= or <Home><first-entry>jump to the first entry
* or <End><last-entry>jump to the last entry
q<quit>exit the current menu
?<help>list all keybindings for the current menu

Table 2.2. Most common navigation keys in page-based menus

KeyFunctionDescription
J or <Return><next-line>scroll down one line
<Backspace><previous-line>scroll up one line
K, <Space> or <PageDn><next-page>move to the next page
- or <PageUp><previous-page>move the previous page
<Home><top>move to the top
<End><bottom>move to the bottom

4. Editing Input Fields

4.1. Introduction

Mutt has a built-in line editor for inputting text, e.g. email addresses or filenames. The keys used to manipulate text input are very similar to those of Emacs. See Table 2.3, “Most common line editor keys” for a full reference of available functions, their default key bindings, and short descriptions.

Table 2.3. Most common line editor keys

KeyFunctionDescription
^A or <Home><bol>move to the start of the line
^B or <Left><backward-char>move back one char
Esc B<backward-word>move back one word
^D or <Delete><delete-char>delete the char under the cursor
^E or <End><eol>move to the end of the line
^F or <Right><forward-char>move forward one char
Esc F<forward-word>move forward one word
<Tab><complete>complete filename or alias
^T<complete-query>complete address with query
^K<kill-eol>delete to the end of the line
Esc d<kill-eow>delete to the end of the word
^W<kill-word>kill the word in front of the cursor
^U<kill-line>delete entire line
^V<quote-char>quote the next typed key
<Up><history-up>recall previous string from history
<Down><history-down>recall next string from history
<BackSpace><backspace>kill the char in front of the cursor
Esc u<upcase-word>convert word to upper case
Esc l<downcase-word>convert word to lower case
Esc c<capitalize-word>capitalize the word
^Gn/aabort
<Return>n/afinish editing

You can remap the editor functions using the bind command. For example, to make the <Delete> key delete the character in front of the cursor rather than under, you could use:

bind editor <delete> backspace

4.2. History

Mutt maintains a history for the built-in editor. The number of items is controlled by the $history variable and can be made persistent using an external file specified using $history_file. You may cycle through them at an editor prompt by using the <history-up> and/or <history-down> commands. But notice that Mutt does not remember the currently entered text, it only cycles through history and wraps around at the end or beginning.

Mutt maintains several distinct history lists, one for each of the following categories:

  • .muttrc commands

  • addresses and aliases

  • shell commands

  • filenames

  • patterns

  • everything else

Mutt automatically filters out consecutively repeated items from the history. It also mimics the behavior of some shells by ignoring items starting with a space. The latter feature can be useful in macros to not clobber the history's valuable entries with unwanted entries.

5. Reading Mail

Similar to many other mail clients, there are two modes in which mail is read in Mutt. The first is a list of messages in the mailbox, which is called the “index” menu in Mutt. The second mode is the display of the message contents. This is called the “pager.”

The next few sections describe the functions provided in each of these modes.

5.1. The Message Index

Common keys used to navigate through and manage messages in the index are shown in Table 2.4, “Most common message index keys”. How messages are presented in the index menu can be customized using the $index_format variable.

Table 2.4. Most common message index keys

KeyDescription
cchange to a different mailbox
Esc cchange to a folder in read-only mode
Ccopy the current message to another mailbox
Esc Cdecode a message and copy it to a folder
Esc sdecode a message and save it to a folder
Ddelete messages matching a pattern
ddelete the current message
Fmark as important
lshow messages matching a pattern
Nmark message as new
ochange the current sort method
Oreverse sort the mailbox
qsave changes and exit
ssave-message
Ttag messages matching a pattern
ttoggle the tag on a message
Esc ttoggle tag on entire message thread
Uundelete messages matching a pattern
uundelete-message
vview-attachments
xabort changes and exit
<Return>display-message
<Tab>jump to the next new or unread message
@show the author's full e-mail address
$save changes to mailbox
/search
Esc /search-reverse
^Lclear and redraw the screen
^Tuntag messages matching a pattern

In addition to who sent the message and the subject, a short summary of the disposition of each message is printed beside the message number. Zero or more of the “flags” in Table 2.5, “Message status flags” may appear, some of which can be turned on or off using these functions: <set-flag> and <clear-flag> bound by default to “w” and “W” respectively.

Furthermore, the flags in Table 2.6, “Message recipient flags” reflect who the message is addressed to. They can be customized with the $to_chars variable.

Table 2.5. Message status flags

FlagDescription
Dmessage is deleted (is marked for deletion)
dmessage has attachments marked for deletion
Kcontains a PGP public key
Nmessage is new
Omessage is old
Pmessage is PGP encrypted
rmessage has been replied to
Smessage is signed, and the signature is successfully verified
smessage is signed
!message is flagged
*message is tagged
nthread contains new messages (only if collapsed)
othread contains old messages (only if collapsed)

Table 2.6. Message recipient flags

FlagDescription
+message is to you and you only
Tmessage is to you, but also to or CC'ed to others
Cmessage is CC'ed to you
Fmessage is from you
Lmessage is sent to a subscribed mailing list

5.2. The Pager

By default, Mutt uses its built-in pager to display the contents of messages (an external pager such as less(1) can be configured, see $pager variable). The pager is very similar to the Unix program less(1) though not nearly as featureful.

Table 2.7. Most common pager keys

KeyDescription
<Return>go down one line
<Space>display the next page (or next message if at the end of a message)
-go back to the previous page
nsearch for next match
Sskip beyond quoted text
Ttoggle display of quoted text
?show keybindings
/regular expression search
Esc /backward regular expression search
\toggle highlighting of search matches
^jump to the top of the message

In addition to key bindings in Table 2.7, “Most common pager keys”, many of the functions from the index menu are also available in the pager, such as <delete-message> or <copy-message> (this is one advantage over using an external pager to view messages).

Also, the internal pager supports a couple other advanced features. For one, it will accept and translate the “standard” nroff sequences for bold and underline. These sequences are a series of either the letter, backspace (“^H”), the letter again for bold or the letter, backspace, “_” for denoting underline. Mutt will attempt to display these in bold and underline respectively if your terminal supports them. If not, you can use the bold and underline color objects to specify a color or mono attribute for them.

Additionally, the internal pager supports the ANSI escape sequences for character attributes. Mutt translates them into the correct color and character settings. The sequences Mutt supports are:

\e[Ps;Ps;..Ps;m

where Ps can be one of the codes shown in Table 2.8, “ANSI escape sequences”.

Table 2.8. ANSI escape sequences

Escape codeDescription
0All attributes off
1Bold on
4Underline on
5Blink on
7Reverse video on
3<color>Foreground color is <color> (see Table 2.9, “Color sequences”)
4<color>Background color is <color> (see Table 2.9, “Color sequences”)

Table 2.9. Color sequences

Color codeColor
0Black
1Red
2Green
3Yellow
4Blue
5Magenta
6Cyan
7White

Mutt uses these attributes for handling text/enriched messages, and they can also be used by an external autoview script for highlighting purposes.

Note

If you change the colors for your display, for example by changing the color associated with color2 for your xterm, then that color will be used instead of green.

Note

Note that the search commands in the pager take regular expressions, which are not quite the same as the more complex patterns used by the search command in the index. This is because patterns are used to select messages by criteria whereas the pager already displays a selected message.

5.3. Threaded Mode

So-called “threads” provide a hierarchy of messages where replies are linked to their parent message(s). This organizational form is extremely useful in mailing lists where different parts of the discussion diverge. Mutt displays threads as a tree structure.

In Mutt, when a mailbox is sorted by threads, there are a few additional functions available in the index and pager modes as shown in Table 2.10, “Most common thread mode keys”.

Table 2.10. Most common thread mode keys

KeyFunctionDescription
^D<delete-thread>delete all messages in the current thread
^U<undelete-thread>undelete all messages in the current thread
^N<next-thread>jump to the start of the next thread
^P<previous-thread>jump to the start of the previous thread
^R<read-thread>mark the current thread as read
Esc d<delete-subthread>delete all messages in the current subthread
Esc u<undelete-subthread>undelete all messages in the current subthread
Esc n<next-subthread>jump to the start of the next subthread
Esc p<previous-subthread>jump to the start of the previous subthread
Esc r<read-subthread>mark the current subthread as read
Esc t<tag-thread>toggle the tag on the current thread
Esc v<collapse-thread>toggle collapse for the current thread
Esc V<collapse-all>toggle collapse for all threads
P<parent-message>jump to parent message in thread

Collapsing a thread displays only the first message in the thread and hides the others. This is useful when threads contain so many messages that you can only see a handful of threads on the screen. See %M in $index_format. For example, you could use “%?M?(#%03M)&(%4l)?” in $index_format to optionally display the number of hidden messages if the thread is collapsed. The %?<char>?<if-part>&<else-part>? syntax is explained in detail in format string conditionals.

Technically, every reply should contain a list of its parent messages in the thread tree, but not all do. In these cases, Mutt groups them by subject which can be controlled using the $strict_threads variable.

5.4. Miscellaneous Functions

In addition, the index and pager menus have these interesting functions:

<create-alias> (default: a)

Creates a new alias based upon the current message (or prompts for a new one). Once editing is complete, an alias command is added to the file specified by the $alias_file variable for future use

Note

Mutt does not read the $alias_file upon startup so you must explicitly source the file.

<check-traditional-pgp> (default: Esc P)

This function will search the current message for content signed or encrypted with PGP the “traditional” way, that is, without proper MIME tagging. Technically, this function will temporarily change the MIME content types of the body parts containing PGP data; this is similar to the <edit-type> function's effect.

<edit> (default: e)

This command (available in the index and pager) allows you to edit the raw current message as it's present in the mail folder. After you have finished editing, the changed message will be appended to the current folder, and the original message will be marked for deletion; if the message is unchanged it won't be replaced.

<edit-type> (default: ^E on the attachment menu, and in the pager and index menus; ^T on the compose menu)

This command is used to temporarily edit an attachment's content type to fix, for instance, bogus character set parameters. When invoked from the index or from the pager, you'll have the opportunity to edit the top-level attachment's content type. On the attachment menu, you can change any attachment's content type. These changes are not persistent, and get lost upon changing folders.

Note that this command is also available on the compose menu. There, it's used to fine-tune the properties of attachments you are going to send.

<enter-command> (default: “:”)

This command is used to execute any command you would normally put in a configuration file. A common use is to check the settings of variables, or in conjunction with macros to change settings on the fly.

<extract-keys> (default: ^K)

This command extracts PGP public keys from the current or tagged message(s) and adds them to your PGP public key ring.

<forget-passphrase> (default: ^F)

This command wipes the passphrase(s) from memory. It is useful, if you misspelled the passphrase.

<list-reply> (default: L)

Reply to the current or tagged message(s) by extracting any addresses which match the regular expressions given by the lists or subscribe commands, but also honor any Mail-Followup-To header(s) if the $honor_followup_to configuration variable is set. Using this when replying to messages posted to mailing lists helps avoid duplicate copies being sent to the author of the message you are replying to.

<pipe-message> (default: |)

Asks for an external Unix command and pipes the current or tagged message(s) to it. The variables $pipe_decode, $pipe_split, $pipe_sep and $wait_key control the exact behavior of this function.

<resend-message> (default: Esc e)

Mutt takes the current message as a template for a new message. This function is best described as "recall from arbitrary folders". It can conveniently be used to forward MIME messages while preserving the original mail structure. Note that the amount of headers included here depends on the value of the $weed variable.

This function is also available from the attachment menu. You can use this to easily resend a message which was included with a bounce message as a message/rfc822 body part.

<shell-escape> (default: !)

Asks for an external Unix command and executes it. The $wait_key can be used to control whether Mutt will wait for a key to be pressed when the command returns (presumably to let the user read the output of the command), based on the return status of the named command. If no command is given, an interactive shell is executed.

<toggle-quoted> (default: T)

The pager uses the $quote_regexp variable to detect quoted text when displaying the body of the message. This function toggles the display of the quoted material in the message. It is particularly useful when being interested in just the response and there is a large amount of quoted text in the way.

<skip-quoted> (default: S)

This function will go to the next line of non-quoted text which comes after a line of quoted text in the internal pager.

6. Sending Mail

6.1. Introduction

The bindings shown in Table 2.11, “Most common mail sending keys” are available in the index and pager to start a new message.

Table 2.11. Most common mail sending keys

KeyFunctionDescription
m<compose>compose a new message
r<reply>reply to sender
g<group-reply>reply to all recipients
L<list-reply>reply to mailing list address
f<forward>forward message
b<bounce>bounce (remail) message
Esc k<mail-key>mail a PGP public key to someone

Bouncing a message sends the message as-is to the recipient you specify. Forwarding a message allows you to add comments or modify the message you are forwarding. These items are discussed in greater detail in the next section “Forwarding and Bouncing Mail.”

Mutt will then enter the compose menu and prompt you for the recipients to place on the “To:” header field when you hit m to start a new message. Next, it will ask you for the “Subject:” field for the message, providing a default if you are replying to or forwarding a message. You again have the chance to adjust recipients, subject, and security settings right before actually sending the message. See also $askcc, $askbcc, $autoedit, $bounce, $fast_reply, and $include for changing how and if Mutt asks these questions.

When replying, Mutt fills these fields with proper values depending on the reply type. The types of replying supported are:

Simple reply

Reply to the author directly.

Group reply

Reply to the author as well to all recipients except you; this consults alternates.

List reply

Reply to all mailing list addresses found, either specified via configuration or auto-detected. See Section 12, “Mailing Lists” for details.

After getting recipients for new messages, forwards or replies, Mutt will then automatically start your $editor on the message body. If the $edit_headers variable is set, the headers will be at the top of the message in your editor. Any messages you are replying to will be added in sort order to the message, with appropriate $attribution, $indent_string and $post_indent_string. When forwarding a message, if the $mime_forward variable is unset, a copy of the forwarded message will be included. If you have specified a $signature, it will be appended to the message.

Once you have finished editing the body of your mail message, you are returned to the compose menu providing the functions shown in Table 2.12, “Most common compose menu keys” to modify, send or postpone the message.

Table 2.12. Most common compose menu keys

KeyFunctionDescription
a<attach-file>attach a file
A<attach-message>attach message(s) to the message
Esc k<attach-key>attach a PGP public key
d<edit-description>edit description on attachment
D<detach-file>detach a file
t<edit-to>edit the To field
Esc f<edit-from>edit the From field
r<edit-reply-to>edit the Reply-To field
c<edit-cc>edit the Cc field
b<edit-bcc>edit the Bcc field
y<send-message>send the message
s<edit-subject>edit the Subject
S<smime-menu>select S/MIME options
f<edit-fcc>specify an “Fcc” mailbox
p<pgp-menu>select PGP options
P<postpone-message>postpone this message until later
q<quit>quit (abort) sending the message
w<write-fcc>write the message to a folder
i<ispell>check spelling (if available on your system)
^F<forget-passphrase>wipe passphrase(s) from memory

The compose menu is also used to edit the attachments for a message which can be either files or other messages. The <attach-message> function to will prompt you for a folder to attach messages from. You can now tag messages in that folder and they will be attached to the message you are sending.

Note

Note that certain operations like composing a new mail, replying, forwarding, etc. are not permitted when you are in that folder. The %r in $status_format will change to a “A” to indicate that you are in attach-message mode.

6.2. Editing the Message Header

When editing the header because of $edit_headers being set, there are a several pseudo headers available which will not be included in sent messages but trigger special Mutt behavior.

6.2.1. Fcc: Pseudo Header

If you specify

Fcc: filename

as a header, Mutt will pick up filename just as if you had used the <edit-fcc> function in the compose menu. It can later be changed from the compose menu.

6.2.2. Attach: Pseudo Header

You can also attach files to your message by specifying

Attach: filename [ description ]

where filename is the file to attach and description is an optional string to use as the description of the attached file. Spaces in filenames have to be escaped using backslash (“\”). The file can be removed as well as more added from the compose menu.

6.2.3. Pgp: Pseudo Header

If you want to use PGP, you can specify

Pgp: [ E | S | S<id> ]

“E” selects encryption, “S” selects signing and “S<id>” selects signing with the given key, setting $pgp_sign_as permanently. The selection can later be changed in the compose menu.

6.2.4. In-Reply-To: Header

When replying to messages, the In-Reply-To: header contains the Message-Id of the message(s) you reply to. If you remove or modify its value, Mutt will not generate a References: field, which allows you to create a new message thread, for example to create a new message to a mailing list without having to enter the mailing list's address.

If you intend to start a new thread by replying, please make really sure you remove the In-Reply-To: header in your editor. Otherwise, though you'll produce a technically valid reply, some netiquette guardians will be annoyed by this so-called “thread hijacking”.

6.3. Sending Cryptographically Signed/Encrypted Messages

If you have told Mutt to PGP or S/MIME encrypt a message, it will guide you through a key selection process when you try to send the message. Mutt will not ask you any questions about keys which have a certified user ID matching one of the message recipients' mail addresses. However, there may be situations in which there are several keys, weakly certified user ID fields, or where no matching keys can be found.

In these cases, you are dropped into a menu with a list of keys from which you can select one. When you quit this menu, or Mutt can't find any matching keys, you are prompted for a user ID. You can, as usually, abort this prompt using ^G. When you do so, Mutt will return to the compose screen.

Once you have successfully finished the key selection, the message will be encrypted using the selected public keys when sent out.

Most fields of the entries in the key selection menu (see also $pgp_entry_format) have obvious meanings. But some explanations on the capabilities, flags, and validity fields are in order.

The flags sequence (“%f”) will expand to one of the flags in Table 2.13, “PGP key menu flags”.

Table 2.13. PGP key menu flags

FlagDescription
RThe key has been revoked and can't be used.
XThe key is expired and can't be used.
dYou have marked the key as disabled.
cThere are unknown critical self-signature packets.

The capabilities field (“%c”) expands to a two-character sequence representing a key's capabilities. The first character gives the key's encryption capabilities: A minus sign (“-”) means that the key cannot be used for encryption. A dot (“.”) means that it's marked as a signature key in one of the user IDs, but may also be used for encryption. The letter “e” indicates that this key can be used for encryption.

The second character indicates the key's signing capabilities. Once again, a “-” implies “not for signing”, “.” implies that the key is marked as an encryption key in one of the user-ids, and “s” denotes a key which can be used for signing.

Finally, the validity field (“%t”) indicates how well-certified a user-id is. A question mark (“?”) indicates undefined validity, a minus character (“-”) marks an untrusted association, a space character means a partially trusted association, and a plus character (“+”) indicates complete validity.

6.4. Sending Format=Flowed Messages

6.4.1. Concept

format=flowed-style messages (or f=f for short) are text/plain messages that consist of paragraphs which a receiver's mail client may reformat to its own needs which mostly means to customize line lengths regardless of what the sender sent. Technically this is achieved by letting lines of a “flowable” paragraph end in spaces except for the last line.

While for text-mode clients like Mutt it's the best way to assume only a standard 80x25 character cell terminal, it may be desired to let the receiver decide completely how to view a message.

6.4.2. Mutt Support

Mutt only supports setting the required format=flowed MIME parameter on outgoing messages if the $text_flowed variable is set, specifically it does not add the trailing spaces.

After editing the initial message text and before entering the compose menu, Mutt properly space-stuffs the message. Space-stuffing is required by RfC3676 defining format=flowed and means to prepend a space to:

  • all lines starting with a space

  • lines starting with the word “From” followed by space

  • all lines starting with “>” which is not intended to be a quote character

Note

Mutt only supports space-stuffing for the first two types of lines but not for the third: It is impossible to safely detect whether a leading > character starts a quote or not. Furthermore, Mutt only applies space-stuffing once after the initial edit is finished.

All leading spaces are to be removed by receiving clients to restore the original message prior to further processing.

6.4.3. Editor Considerations

As Mutt provides no additional features to compose f=f messages, it's completely up to the user and his editor to produce proper messages. Please consider your editor's documentation if you intend to send f=f messages.

Please note that when editing messages from the compose menu several times before really sending a mail, it's up to the user to ensure that the message is properly space-stuffed.

For example, vim provides the w flag for its formatoptions setting to assist in creating f=f messages, see :help fo-table for details.

7. Forwarding and Bouncing Mail

Bouncing and forwarding let you send an existing message to recipients that you specify. Bouncing a message sends a verbatim copy of a message to alternative addresses as if they were the message's original recipients specified in the Bcc header. Forwarding a message, on the other hand, allows you to modify the message before it is resent (for example, by adding your own comments). Bouncing is done using the <bounce> function and forwarding using the <forward> function bound to “b” and “f” respectively.

Forwarding can be done by including the original message in the new message's body (surrounded by indicating lines) or including it as a MIME attachment, depending on the value of the $mime_forward variable. Decoding of attachments, like in the pager, can be controlled by the $forward_decode and $mime_forward_decode variables, respectively. The desired forwarding format may depend on the content, therefore $mime_forward is a quadoption which, for example, can be set to “ask-no”.

The inclusion of headers is controlled by the current setting of the $weed variable, unless $mime_forward is set.

Editing the message to forward follows the same procedure as sending or replying to a message does.

8. Postponing Mail

At times it is desirable to delay sending a message that you have already begun to compose. When the <postpone-message> function is used in the compose menu, the body of your message and attachments are stored in the mailbox specified by the $postponed variable. This means that you can recall the message even if you exit Mutt and then restart it at a later time.

Once a message is postponed, there are several ways to resume it. From the command line you can use the “-p” option, or if you compose a new message from the index or pager you will be prompted if postponed messages exist. If multiple messages are currently postponed, the postponed menu will pop up and you can select which message you would like to resume.

Note

If you postpone a reply to a message, the reply setting of the message is only updated when you actually finish the message and send it. Also, you must be in the same folder with the message you replied to for the status of the message to be updated.

See also the $postpone quad-option.

Chapter 3. Configuration

1. Location of Initialization Files

While the default configuration (or “preferences”) make Mutt usable right out of the box, it is often desirable to tailor Mutt to suit your own tastes. When Mutt is first invoked, it will attempt to read the “system” configuration file (defaults set by your local system administrator), unless the “-n” command line option is specified. This file is typically /usr/local/share/mutt/Muttrc or /etc/Muttrc. Mutt will next look for a file named .muttrc in your home directory. If this file does not exist and your home directory has a subdirectory named .mutt, Mutt tries to load a file named .mutt/muttrc.

.muttrc is the file where you will usually place your commands to configure Mutt.

In addition, Mutt supports version specific configuration files that are parsed instead of the default files as explained above. For instance, if your system has a Muttrc-0.88 file in the system configuration directory, and you are running version 0.88 of Mutt, this file will be sourced instead of the Muttrc file. The same is true of the user configuration file, if you have a file .muttrc-0.88.6 in your home directory, when you run Mutt version 0.88.6, it will source this file instead of the default .muttrc file. The version number is the same which is visible using the “-v” command line switch or using the show-version key (default: V) from the index menu.

2. Syntax of Initialization Files

An initialization file consists of a series of commands. Each line of the file may contain one or more commands. When multiple commands are used, they must be separated by a semicolon (“;”).

Example 3.1. Multiple configuration commands per line

set realname='Mutt user' ; ignore x-

The hash mark, or pound sign (“#”), is used as a “comment” character. You can use it to annotate your initialization file. All text after the comment character to the end of the line is ignored.

Example 3.2. Commenting configuration files

my_hdr X-Disclaimer: Why are you listening to me? # This is a comment

Single quotes (“'”) and double quotes (“"”) can be used to quote strings which contain spaces or other special characters. The difference between the two types of quotes is similar to that of many popular shell programs, namely that a single quote is used to specify a literal string (one that is not interpreted for shell variables or quoting with a backslash [see next paragraph]), while double quotes indicate a string for which should be evaluated. For example, backticks are evaluated inside of double quotes, but not for single quotes.

“\” quotes the next character, just as in shells such as bash and zsh. For example, if want to put quotes “"” inside of a string, you can use “\” to force the next character to be a literal instead of interpreted character.

Example 3.3. Escaping quotes in configuration files

set realname="Michael \"MuttDude\" Elkins"

“\\” means to insert a literal “\” into the line. “\n” and “\r” have their usual C meanings of linefeed and carriage-return, respectively.

A “\” at the end of a line can be used to split commands over multiple lines as it “escapes” the line end, provided that the split points don't appear in the middle of command names. Lines are first concatenated before interpretation so that a multi-line can be commented by commenting out the first line only.

Example 3.4. Splitting long configuration commands over several lines

set status_format="some very \
long value split \
over several lines"

It is also possible to substitute the output of a Unix command in an initialization file. This is accomplished by enclosing the command in backticks (``). In Example 3.5, “Using external command's output in configuration files”, the output of the Unix command “uname -a” will be substituted before the line is parsed. Since initialization files are line oriented, only the first line of output from the Unix command will be substituted.

Example 3.5. Using external command's output in configuration files

my_hdr X-Operating-System: `uname -a`

Both environment variables and Mutt variables can be accessed by prepending “$” to the name of the variable. For example,

Example 3.6. Using environment variables in configuration files

set record=+sent_on_$HOSTNAME

will cause Mutt to save outgoing messages to a folder named “sent_on_kremvax” if the environment variable $HOSTNAME is set to “kremvax.” (See $record for details.)

Mutt expands the variable when it is assigned, not when it is used. If the value of a variable on the right-hand side of an assignment changes after the assignment, the variable on the left-hand side will not be affected.

The commands understood by Mutt are explained in the next paragraphs. For a complete list, see the command reference.

All configuration files are expected to be in the current locale as specified by the $charset variable which doesn't have a default value since it's determined by Mutt at startup. If a configuration file is not encoded in the same character set the $config_charset variable should be used: all lines starting with the next are recoded from $config_charset to $charset.

This mechanism should be avoided if possible as it has the following implications:

  • These variables should be set early in a configuration file with $charset preceding $config_charset so Mutt knows what character set to convert to.

  • If $config_charset is set, it should be set in each configuration file because the value is global and not per configuration file.

  • Because Mutt first recodes a line before it attempts to parse it, a conversion introducing question marks or other characters as part of errors (unconvertable characters, transliteration) may introduce syntax errors or silently change the meaning of certain tokens (e.g. inserting question marks into regular expressions).

3. Address Groups

Usage:

group [ -group name ...] { -rx expr ... | -addr expr ... }
ungroup [ -group name ...] { * | -rx expr ... | -addr expr ... }

Mutt supports grouping addresses logically into named groups. An address or address pattern can appear in several groups at the same time. These groups can be used in patterns (for searching, limiting and tagging) and in hooks by using group patterns. This can be useful to classify mail and take certain actions depending on in what groups the message is. For example, the mutt user's mailing list would fit into the categories “mailing list” and “mutt-related”. Using send-hook, the sender can be set to a dedicated one for writing mailing list messages, and the signature could be set to a mutt-related one for writing to a mutt list — for other lists, the list sender setting still applies but a different signature can be selected. Or, given a group only containing recipients known to accept encrypted mail, “auto-encryption” can be achieved easily.

The group command is used to directly add either addresses or regular expressions to the specified group or groups. The different categories of arguments to the group command can be in any order. The flags -rx and -addr specify what the following strings (that cannot begin with a hyphen) should be interpreted as: either a regular expression or an email address, respectively.

These address groups can also be created implicitly by the alias, lists, subscribe and alternates commands by specifying the optional -group option. For example,

alternates -group me address1 address2
alternates -group me -group work address3

would create a group named “me” which contains all your addresses and a group named “work” which contains only your work address address3. Besides many other possibilities, this could be used to automatically mark your own messages in a mailing list folder as read or use a special signature for work-related messages.

The ungroup command is used to remove addresses or regular expressions from the specified group or groups. The syntax is similar to the group command, however the special character * can be used to empty a group of all of its contents. As soon as a group gets empty because all addresses and regular expressions have been removed, it'll internally be removed, too (i.e. there cannot be an empty group). When removing regular expressions from a group, the pattern must be specified exactly as given to the group command or -group argument.

4. Defining/Using Aliases

Usage:

alias [ -group name ...] key address [ address ...]
unalias [ -group name ...] { * | key ... }

It's usually very cumbersome to remember or type out the address of someone you are communicating with. Mutt allows you to create “aliases” which map a short string to a full address.

Note

If you want to create an alias for more than one address, you must separate the addresses with a comma (“,”).

The optional -group argument to alias causes the aliased address(es) to be added to the named group.

To remove an alias or aliases (“*” means all aliases):

alias muttdude me@cs.hmc.edu (Michael Elkins)
alias theguys manny, moe, jack

Unlike other mailers, Mutt doesn't require aliases to be defined in a special file. The alias command can appear anywhere in a configuration file, as long as this file is sourced. Consequently, you can have multiple alias files, or you can have all aliases defined in your .muttrc.

On the other hand, the <create-alias> function can use only one file, the one pointed to by the $alias_file variable (which is ~/.muttrc by default). This file is not special either, in the sense that Mutt will happily append aliases to any file, but in order for the new aliases to take effect you need to explicitly source this file too.

Example 3.7. Configuring external alias files

source /usr/local/share/Mutt.aliases
source ~/.mail_aliases
set alias_file=~/.mail_aliases

To use aliases, you merely use the alias at any place in Mutt where Mutt prompts for addresses, such as the To: or Cc: prompt. You can also enter aliases in your editor at the appropriate headers if you have the $edit_headers variable set.

In addition, at the various address prompts, you can use the tab character to expand a partial alias to the full alias. If there are multiple matches, Mutt will bring up a menu with the matching aliases. In order to be presented with the full list of aliases, you must hit tab without a partial alias, such as at the beginning of the prompt or after a comma denoting multiple addresses.

In the alias menu, you can select as many aliases as you want with the select-entry key (default: <Return>), and use the exit key (default: q) to return to the address prompt.

5. Changing the Default Key Bindings

Usage:

bind map key function

This command allows you to change the default key bindings (operation invoked when pressing a key).

map specifies in which menu the binding belongs. Multiple maps may be specified by separating them with commas (no additional whitespace is allowed). The currently defined maps are:

generic

This is not a real menu, but is used as a fallback for all of the other menus except for the pager and editor modes. If a key is not defined in another menu, Mutt will look for a binding to use in this menu. This allows you to bind a key to a certain function in multiple menus instead of having multiple bind statements to accomplish the same task.

alias

The alias menu is the list of your personal aliases as defined in your .muttrc. It is the mapping from a short alias name to the full email address(es) of the recipient(s).

attach

The attachment menu is used to access the attachments on received messages.

browser

The browser is used for both browsing the local directory structure, and for listing all of your incoming mailboxes.

editor

The editor is used to allow the user to enter a single line of text, such as the To or Subject prompts in the compose menu.

index

The index is the list of messages contained in a mailbox.

compose

The compose menu is the screen used when sending a new message.

pager

The pager is the mode used to display message/attachment data, and help listings.

pgp

The pgp menu is used to select the OpenPGP keys used to encrypt outgoing messages.

smime

The smime menu is used to select the OpenSSL certificates used to encrypt outgoing messages.

postpone

The postpone menu is similar to the index menu, except is used when recalling a message the user was composing, but saved until later.

query

The query menu is the browser for results returned by $query_command.

mix

The mixmaster screen is used to select remailer options for outgoing messages (if Mutt is compiled with Mixmaster support).

key is the key (or key sequence) you wish to bind. To specify a control character, use the sequence \Cx, where x is the letter of the control character (for example, to specify control-A use “\Ca”). Note that the case of x as well as \C is ignored, so that \CA, \Ca, \cA and \ca are all equivalent. An alternative form is to specify the key as a three digit octal number prefixed with a “\” (for example \177 is equivalent to \c?). In addition, key may be a symbolic name as shown in Table 3.1, “Symbolic key names”.

Table 3.1. Symbolic key names

Symbolic nameMeaning
\ttab
<tab>tab
<backtab>backtab / shift-tab
\rcarriage return
\nnewline
\eescape
<esc>escape
<up>up arrow
<down>down arrow
<left>left arrow
<right>right arrow
<pageup>Page Up
<pagedown>Page Down
<backspace>Backspace
<delete>Delete
<insert>Insert
<enter>Enter
<return>Return
<home>Home
<end>End
<space>Space bar
<f1>function key 1
<f10>function key 10

key does not need to be enclosed in quotes unless it contains a space (“ ”) or semi-colon (“;”).

function specifies which action to take when key is pressed. For a complete list of functions, see the reference. Note that the bind expects function to be specified without angle brackets.

The special function <noop> unbinds the specified key sequence.

6. Defining Aliases for Character Sets

Usage:

charset-hook alias charset
iconv-hook charset local-charset

The charset-hook command defines an alias for a character set. This is useful to properly display messages which are tagged with a character set name not known to Mutt.

The iconv-hook command defines a system-specific name for a character set. This is helpful when your systems character conversion library insists on using strange, system-specific names for character sets.

7. Setting Variables Based Upon Mailbox

Usage:

folder-hook [!]regexp command

It is often desirable to change settings based on which mailbox you are reading. The folder-hook command provides a method by which you can execute any configuration command. regexp is a regular expression specifying in which mailboxes to execute command before loading. If a mailbox matches multiple folder-hooks, they are executed in the order given in the .muttrc.

Note

If you use the “!” shortcut for $spoolfile at the beginning of the pattern, you must place it inside of double or single quotes in order to distinguish it from the logical not operator for the expression.

Note

Settings are not restored when you leave the mailbox. For example, a command action to perform is to change the sorting method based upon the mailbox being read:

folder-hook mutt "set sort=threads"

However, the sorting method is not restored to its previous value when reading a different mailbox. To specify a default command, use the pattern “.” before other folder-hooks adjusting a value on a per-folder basis because folder-hooks are evaluated in the order given in the configuration file.

The following example will set the sort variable to date-sent for all folders but to threads for all folders containing “mutt” in their name.

Example 3.8. Setting sort method based on mailbox name

folder-hook . "set sort=date-sent"
folder-hook mutt "set sort=threads"

8. Keyboard Macros

Usage:

macro menu key sequence [ description ]

Macros are useful when you would like a single key to perform a series of actions. When you press key in menu menu, Mutt will behave as if you had typed sequence. So if you have a common sequence of commands you type, you can create a macro to execute those commands with a single key or fewer keys.

menu is the map which the macro will be bound in. Multiple maps may be specified by separating multiple menu arguments by commas. Whitespace may not be used in between the menu arguments and the commas separating them.

key and sequence are expanded by the same rules as the key bindings with some additions. The first is that control characters in sequence can also be specified as ^x. In order to get a caret (“^”) you need to use ^^. Secondly, to specify a certain key such as up or to invoke a function directly, you can use the format <key name> and <function name>. For a listing of key names see the section on key bindings. Functions are listed in the reference.

The advantage with using function names directly is that the macros will work regardless of the current key bindings, so they are not dependent on the user having particular key definitions. This makes them more robust and portable, and also facilitates defining of macros in files used by more than one user (e.g., the system Muttrc).

Optionally you can specify a descriptive text after sequence, which is shown in the help screens if they contain a description.

Note

Macro definitions (if any) listed in the help screen(s), are silently truncated at the screen width, and are not wrapped.

9. Using Color and Mono Video Attributes

Usage:

color object foreground background
color { header | body } foreground background regexp
color index foreground background pattern
uncolor { index | header | body } { * | pattern ... }

If your terminal supports color, you can spice up Mutt by creating your own color scheme. To define the color of an object (type of information), you must specify both a foreground color and a background color (it is not possible to only specify one or the other).

header and body match regexp in the header/body of a message, index matches pattern (see Section 3, “Patterns: Searching, Limiting and Tagging”) in the message index.

object can be one of:

  • attachment

  • bold (highlighting bold patterns in the body of messages)

  • error (error messages printed by Mutt)

  • hdrdefault (default color of the message header in the pager)

  • indicator (arrow or bar used to indicate the current item in a menu)

  • markers (the “+” markers at the beginning of wrapped lines in the pager)

  • message (informational messages)

  • normal

  • quoted (text matching $quote_regexp in the body of a message)

  • quoted1, quoted2, ..., quotedN (higher levels of quoting)

  • search (highlighting of words in the pager)

  • signature

  • status (mode lines used to display info about the mailbox or message)

  • tilde (the “~” used to pad blank lines in the pager)

  • tree (thread tree drawn in the message index and attachment menu)

  • underline (highlighting underlined patterns in the body of messages)

foreground and background can be one of the following:

  • white

  • black

  • green

  • magenta

  • blue

  • cyan

  • yellow

  • red

  • default

  • colorx

foreground can optionally be prefixed with the keyword bright to make the foreground color boldfaced (e.g., brightred).

If your terminal supports it, the special keyword default can be used as a transparent color. The value brightdefault is also valid. If Mutt is linked against the S-Lang library, you also need to set the $COLORFGBG environment variable to the default colors of your terminal for this to work; for example (for Bourne-like shells):

set COLORFGBG="green;black"
export COLORFGBG

Note

The S-Lang library requires you to use the lightgray and brown keywords instead of white and yellow when setting this variable.

Note

The uncolor command can be applied to the index, header and body objects only. It removes entries from the list. You must specify the same pattern specified in the color command for it to be removed. The pattern “*” is a special token which means to clear the color list of all entries.

Mutt also recognizes the keywords color0, color1, ..., colorN-1 (N being the number of colors supported by your terminal). This is useful when you remap the colors for your display (for example by changing the color associated with color2 for your xterm), since color names may then lose their normal meaning.

If your terminal does not support color, it is still possible change the video attributes through the use of the “mono” command. Usage:

mono object attribute
mono { header | body } attribute regexp
mono index attribute pattern
unmono { index | header | body } { * | pattern ... }

For object, see the color command. attribute can be one of the following:

  • none

  • bold

  • underline

  • reverse

  • standout

10. Message Header Display

10.1. Header Display

When displaying a message in the pager, Mutt folds long header lines at $wrap columns. Though there're precise rules about where to break and how, Mutt always folds headers using a tab for readability. (Note that the sending side is not affected by this, Mutt tries to implement standards compliant folding.)

10.2. Selecting Headers

Usage:

ignore pattern [ pattern ...]
unignore { * | pattern ... }

Messages often have many header fields added by automatic processing systems, or which may not seem useful to display on the screen. This command allows you to specify header fields which you don't normally want to see in the pager.

You do not need to specify the full header field name. For example, “ignore content-” will ignore all header fields that begin with the pattern “content-”. “ignore *” will ignore all headers.

To remove a previously added token from the list, use the “unignore” command. The “unignore” command will make Mutt display headers with the given pattern. For example, if you do “ignore x-” it is possible to “unignore x-mailer”.

“unignore *” will remove all tokens from the ignore list.

Example 3.9. Header weeding

# Sven's draconian header weeding
ignore *
unignore from date subject to cc
unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
unignore posted-to:

10.3. Ordering Displayed Headers

Usage:

hdr_order header [ header ...]
unhdr_order { * | header ... }

With the hdr_order command you can specify an order in which Mutt will attempt to present these headers to you when viewing messages.

“unhdr_order *” will clear all previous headers from the order list, thus removing the header order effects set by the system-wide startup file.

Example 3.10. Configuring header display order

hdr_order From Date: From: To: Cc: Subject:

11. Alternative Addresses

Usage:

alternates [ -group name ...] regexp [ regexp ...]
unalternates [ -group name ...] { * | regexp ... }

With various functions, Mutt will treat messages differently, depending on whether you sent them or whether you received them from someone else. For instance, when replying to a message that you sent to a different party, Mutt will automatically suggest to send the response to the original message's recipients — responding to yourself won't make much sense in many cases. (See $reply_to.)

Many users receive e-mail under a number of different addresses. To fully use Mutt's features here, the program must be able to recognize what e-mail addresses you receive mail under. That's the purpose of the alternates command: It takes a list of regular expressions, each of which can identify an address under which you receive e-mail.

As addresses are matched using regular expressions and not exact strict comparisons, you should make sure you specify your addresses as precise as possible to avoid mismatches. For example, if you specify:

alternates user@example

Mutt will consider “some-user@example” as being your address, too which may not be desired. As a solution, in such cases addresses should be specified as:

alternates '^user@example$'

The -group flag causes all of the subsequent regular expressions to be added to the named group.

The unalternates command can be used to write exceptions to alternates patterns. If an address matches something in an alternates command, but you nonetheless do not think it is from you, you can list a more precise pattern under an unalternates command.

To remove a regular expression from the alternates list, use the unalternates command with exactly the same regexp. Likewise, if the regexp for an alternates command matches an entry on the unalternates list, that unalternates entry will be removed. If the regexp for unalternates is “*”, all entries on alternates will be removed.

12. Mailing Lists

Usage:

lists [ -group name ...] regexp [ regexp ...]
unlists { * | regexp ... }
subscribe [ -group name ...] regexp [ regexp ...]
unsubscribe { * | regexp ... }

Mutt has a few nice features for handling mailing lists. In order to take advantage of them, you must specify which addresses belong to mailing lists, and which mailing lists you are subscribed to. Mutt also has limited support for auto-detecting mailing lists: it supports parsing mailto: links in the common List-Post: header which has the same effect as specifying the list address via the lists command (except the group feature). Once you have done this, the <list-reply> function will work for all known lists. Additionally, when you send a message to a subscribed list, Mutt will add a Mail-Followup-To header to tell other users' mail user agents not to send copies of replies to your personal address.

Note

The Mail-Followup-To header is a non-standard extension which is not supported by all mail user agents. Adding it is not bullet-proof against receiving personal CCs of list messages. Also note that the generation of the Mail-Followup-To header is controlled by the $followup_to configuration variable since it's common practice on some mailing lists to send Cc upon replies (which is more a group- than a list-reply).

More precisely, Mutt maintains lists of patterns for the addresses of known and subscribed mailing lists. Every subscribed mailing list is known. To mark a mailing list as known, use the list command. To mark it as subscribed, use subscribe.

You can use regular expressions with both commands. To mark all messages sent to a specific bug report's address on Debian's bug tracking system as list mail, for instance, you could say

subscribe [0-9]*.*@bugs.debian.org

as it's often sufficient to just give a portion of the list's e-mail address.

Specify as much of the address as you need to to remove ambiguity. For example, if you've subscribed to the Mutt mailing list, you will receive mail addressed to mutt-users@mutt.org. So, to tell Mutt that this is a mailing list, you could add lists mutt-users@ to your initialization file. To tell Mutt that you are subscribed to it, add subscribe mutt-users to your initialization file instead. If you also happen to get mail from someone whose address is mutt-users@example.com, you could use lists ^mutt-users@mutt\\.org$ or subscribe ^mutt-users@mutt\\.org$ to match only mail from the actual list.

The -group flag adds all of the subsequent regular expressions to the named address group in addition to adding to the specified address list.

The “unlists” command is used to remove a token from the list of known and subscribed mailing-lists. Use “unlists *” to remove all tokens.

To remove a mailing list from the list of subscribed mailing lists, but keep it on the list of known mailing lists, use unsubscribe.

13. Using Multiple Spool Mailboxes

Usage:

mbox-hook [!]pattern mailbox

This command is used to move read messages from a specified mailbox to a different mailbox automatically when you quit or change folders. pattern is a regular expression specifying the mailbox to treat as a “spool” mailbox and mailbox specifies where mail should be saved when read.

Unlike some of the other hook commands, only the first matching pattern is used (it is not possible to save read mail in more than a single mailbox).

14. Monitoring Incoming Mail

Usage:

mailboxes mailbox [ mailbox ...]
unmailboxes { * | mailbox ... }

This command specifies folders which can receive mail and which will be checked for new messages periodically.

folder can either be a local file or directory (Mbox/Mmdf or Maildir/Mh). If Mutt was built with POP and/or IMAP support, folder can also be a POP/IMAP folder URL. The URL syntax is described in Section 1.2, “URL Syntax”, POP and IMAP are described in Section 3, “POP3 Support” and Section 4, “IMAP Support” respectively.

Mutt provides a number of advanced features for handling (possibly many) folders and new mail within them, please refer to Section 10, “New Mail Detection” for details (including in what situations and how often Mutt checks for new mail).

The “unmailboxes” command is used to remove a token from the list of folders which receive mail. Use “unmailboxes *” to remove all tokens.

Note

The folders in the mailboxes command are resolved when the command is executed, so if these names contain shortcut characters (such as “=” and “!”), any variable definition that affects these characters (like $folder and $spoolfile) should be set before the mailboxes command. If none of these shortcuts are used, a local path should be absolute as otherwise Mutt tries to find it relative to the directory from where Mutt was started which may not always be desired.

15. User-Defined Headers

Usage:

my_hdr string
unmy_hdr { * | field ... }

The my_hdr command allows you to create your own header fields which will be added to every message you send and appear in the editor if $edit_headers is set.

For example, if you would like to add an “Organization:” header field to all of your outgoing messages, you can put the command something like shown in Example 3.11, “Defining custom headers” in your .muttrc.

Example 3.11. Defining custom headers

my_hdr Organization: A Really Big Company, Anytown, USA

Note

Space characters are not allowed between the keyword and the colon (“:”). The standard for electronic mail (RFC2822) says that space is illegal there, so Mutt enforces the rule.

If you would like to add a header field to a single message, you should either set the $edit_headers variable, or use the <edit-headers> function (default: “E”) in the compose menu so that you can edit the header of your message along with the body.

To remove user defined header fields, use the unmy_hdr command. You may specify an asterisk (“*”) to remove all header fields, or the fields to remove. For example, to remove all “To” and “Cc” header fields, you could use:

unmy_hdr to cc

16. Specify Default Save Mailbox

Usage:

save-hook [!]pattern mailbox

This command is used to override the default mailbox used when saving messages. mailbox will be used as the default if the message matches pattern, see Message Matching in Hooks for information on the exact format.

To provide more flexibility and good defaults, Mutt applies the expandos of $index_format to mailbox after it was expanded.

Example 3.12. Using %-expandos in save-hook

# default: save all to ~/Mail/<author name>
save-hook . ~/Mail/%F

# save from me@turing.cs.hmc.edu and me@cs.hmc.edu to $folder/elkins
save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins

# save from aol.com to $folder/spam
save-hook aol\\.com$ +spam

Also see the fcc-save-hook command.

17. Specify Default Fcc: Mailbox When Composing

Usage:

fcc-hook [!]pattern mailbox

This command is used to save outgoing mail in a mailbox other than $record. Mutt searches the initial list of message recipients for the first matching regexp and uses mailbox as the default Fcc: mailbox. If no match is found the message will be saved to $record mailbox.

To provide more flexibility and good defaults, Mutt applies the expandos of $index_format to mailbox after it was expanded.

See Message Matching in Hooks for information on the exact format of pattern.

fcc-hook [@.]aol\\.com$ +spammers

...will save a copy of all messages going to the aol.com domain to the `+spammers' mailbox by default. Also see the fcc-save-hook command.

18. Specify Default Save Filename and Default Fcc: Mailbox at Once

Usage:

fcc-save-hook [!]pattern mailbox

This command is a shortcut, equivalent to doing both a fcc-hook and a save-hook with its arguments, including %-expansion on mailbox according to $index_format.

19. Change Settings Based Upon Message Recipients

Usage:

reply-hook [!]pattern command
send-hook [!]pattern command
send2-hook [!]pattern command

These commands can be used to execute arbitrary configuration commands based upon recipients of the message. pattern is used to match the message, see Message Matching in Hooks for details. command is executed when pattern matches.

reply-hook is matched against the message you are replying to, instead of the message you are sending. send-hook is matched against all messages, both new and replies.

Note

reply-hooks are matched before the send-hook, regardless of the order specified in the user's configuration file.

send2-hook is matched every time a message is changed, either by editing it, or by using the compose menu to change its recipients or subject. send2-hook is executed after send-hook, and can, e.g., be used to set parameters such as the $sendmail variable depending on the message's sender address.

For each type of send-hook or reply-hook, when multiple matches occur, commands are executed in the order they are specified in the .muttrc (for that type of hook).

Example: send-hook mutt "set mime_forward signature=''"

Another typical use for this command is to change the values of the $attribution, $signature and $locale variables in order to change the language of the attributions and signatures based upon the recipients.

Note

send-hook's are only executed once after getting the initial list of recipients. Adding a recipient after replying or editing the message will not cause any send-hook to be executed, similarly if $autoedit is set (as then the initial list of recipients is empty). Also note that my_hdr commands which modify recipient headers, or the message's subject, don't have any effect on the current message when executed from a send-hook.

20. Change Settings Before Formatting a Message

Usage:

message-hook [!]pattern command

This command can be used to execute arbitrary configuration commands before viewing or formatting a message based upon information about the message. command is executed if the pattern matches the message to be displayed. When multiple matches occur, commands are executed in the order they are specified in the .muttrc.

See Message Matching in Hooks for information on the exact format of pattern.

Example:

message-hook ~A 'set pager=builtin'
message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'

21. Choosing the Cryptographic Key of the Recipient

Usage:

crypt-hook pattern keyid

When encrypting messages with PGP/GnuPG or OpenSSL, you may want to associate a certain key with a given e-mail address automatically, either because the recipient's public key can't be deduced from the destination address, or because, for some reasons, you need to override the key Mutt would normally use. The crypt-hook command provides a method by which you can specify the ID of the public key to be used when encrypting messages to a certain recipient.

The meaning of keyid is to be taken broadly in this context: You can either put a numerical key ID here, an e-mail address, or even just a real name.

22. Adding Key Sequences to the Keyboard Buffer

Usage:

push string

This command adds the named string to the keyboard buffer. The string may contain control characters, key names and function names like the sequence string in the macro command. You may use it to automatically run a sequence of commands at startup, or when entering certain folders. For example, Example 3.13, “Embedding push in folder-hook” shows how to automatically collapse all threads when entering a folder.

Example 3.13. Embedding push in folder-hook

folder-hook . 'push <collapse-all>'

For using functions like shown in the example, it's important to use angle brackets (“<” and “>”) to make Mutt recognize the input as a function name. Otherwise it will simulate individual just keystrokes, i.e. “push collapse-all” would be interpreted as if you had typed “c”, followed by “o”, followed by “l”, ..., which is not desired and may lead to very unexpected behavior.

Keystrokes can be used, too, but are less portable because of potentially changed key bindings. With default bindings, this is equivalent to the above example:

folder-hook . 'push \eV'

because it simulates that Esc+V was pressed (which is the default binding of <collapse-all>).

23. Executing Functions

Usage:

exec function [ function ...]

This command can be used to execute any function. Functions are listed in the function reference. “exec function” is equivalent to “push <function>”.

24. Message Scoring

Usage:

score pattern value
unscore { * | pattern ... }

The score commands adds value to a message's score if pattern matches it. pattern is a string in the format described in the patterns section (note: For efficiency reasons, patterns which scan information not available in the index, such as ~b, ~B or ~h, may not be used). value is a positive or negative integer. A message's final score is the sum total of all matching score entries. However, you may optionally prefix value with an equal sign (“=”) to cause evaluation to stop at a particular entry if there is a match. Negative final scores are rounded up to 0.

The unscore command removes score entries from the list. You must specify the same pattern specified in the score command for it to be removed. The pattern “*” is a special token which means to clear the list of all score entries.

25. Spam Detection

Usage:

spam pattern format
nospam { * | pattern }

Mutt has generalized support for external spam-scoring filters. By defining your spam patterns with the spam and nospam commands, you can limit, search, and sort your mail based on its spam attributes, as determined by the external filter. You also can display the spam attributes in your index display using the %H selector in the $index_format variable. (Tip: try %?H?[%H] ? to display spam tags only when they are defined for a given message.)

Your first step is to define your external filter's spam patterns using the spam command. pattern should be a regular expression that matches a header in a mail message. If any message in the mailbox matches this regular expression, it will receive a “spam tag” or “spam attribute” (unless it also matches a nospam pattern — see below.) The appearance of this attribute is entirely up to you, and is governed by the format parameter. format can be any static text, but it also can include back-references from the pattern expression. (A regular expression “back-reference” refers to a sub-expression contained within parentheses.) %1 is replaced with the first back-reference in the regex, %2 with the second, etc.

To match spam tags, mutt needs the corresponding header information which is always the case for local and POP folders but not for IMAP in the default configuration. Depending on the spam header to be analyzed, $imap_headers may need to be adjusted.

If you're using multiple spam filters, a message can have more than one spam-related header. You can define spam patterns for each filter you use. If a message matches two or more of these patterns, and the $spam_separator variable is set to a string, then the message's spam tag will consist of all the format strings joined together, with the value of $spam_separator separating them.

For example, suppose one uses DCC, SpamAssassin, and PureMessage, then the configuration might look like in Example 3.14, “Configuring spam detection”.

Example 3.14. Configuring spam detection

spam "X-DCC-.*-Metrics:.*(....)=many"         "90+/DCC-%1"
spam "X-Spam-Status: Yes"                     "90+/SA"
spam "X-PerlMX-Spam: .*Probability=([0-9]+)%" "%1/PM"
set spam_separator=", "

If then a message is received that DCC registered with “many” hits under the “Fuz2” checksum, and that PureMessage registered with a 97% probability of being spam, that message's spam tag would read 90+/DCC-Fuz2, 97/PM. (The four characters before “=many” in a DCC report indicate the checksum used — in this case, “Fuz2”.)

If the $spam_separator variable is unset, then each spam pattern match supersedes the previous one. Instead of getting joined format strings, you'll get only the last one to match.

The spam tag is what will be displayed in the index when you use %H in the $index_format variable. It's also the string that the ~H pattern-matching expression matches against for <search> and <limit> functions. And it's what sorting by spam attribute will use as a sort key.

That's a pretty complicated example, and most people's actual environments will have only one spam filter. The simpler your configuration, the more effective Mutt can be, especially when it comes to sorting.

Generally, when you sort by spam tag, Mutt will sort lexically — that is, by ordering strings alphanumerically. However, if a spam tag begins with a number, Mutt will sort numerically first, and lexically only when two numbers are equal in value. (This is like UNIX's sort -n.) A message with no spam attributes at all — that is, one that didn't match any of your spam patterns — is sorted at lowest priority. Numbers are sorted next, beginning with 0 and ranging upward. Finally, non-numeric strings are sorted, with “a” taking lower priority than “z”. Clearly, in general, sorting by spam tags is most effective when you can coerce your filter to give you a raw number. But in case you can't, Mutt can still do something useful.

The nospam command can be used to write exceptions to spam patterns. If a header pattern matches something in a spam command, but you nonetheless do not want it to receive a spam tag, you can list a more precise pattern under a nospam command.

If the pattern given to nospam is exactly the same as the pattern on an existing spam list entry, the effect will be to remove the entry from the spam list, instead of adding an exception. Likewise, if the pattern for a spam command matches an entry on the nospam list, that nospam entry will be removed. If the pattern for nospam is “*”, all entries on both lists will be removed. This might be the default action if you use spam and nospam in conjunction with a folder-hook.

You can have as many spam or nospam commands as you like. You can even do your own primitive spam detection within Mutt — for example, if you consider all mail from MAILER-DAEMON to be spam, you can use a spam command like this:

spam "^From: .*MAILER-DAEMON"       "999"

26. Setting and Querying Variables

26.1. Variable Types

Mutt supports these types of configuration variables:

boolean

A boolean expression, either “yes” or “no”.

number

A signed integer number in the range -32768 to 32767.

string

Arbitrary text.

path

A specialized string for representing paths including support for mailbox shortcuts (see Section 8, “Mailbox Shortcuts”) as well as tilde (“~”) for a user's home directory and more.

quadoption

Like a boolean but triggers a prompt when set to “ask-yes” or “ask-no” with “yes” and “no” preselected respectively.

sort order

A specialized string allowing only particular words as values depending on the variable.

regular expression

A regular expression, see Section 2, “Regular Expressions” for an introduction.

folder magic

Specifies the type of folder to use: mbox, mmdf, mh or maildir. Currently only used to determine the type for newly created folders.

e-mail address

An e-mail address either with or without realname. The older “user@example.org (Joe User)” form is supported but strongly deprecated.

user-defined

Arbitrary text, see Section 26.3, “User-Defined Variables” for details.

26.2. Commands

The following commands are available to manipulate and query variables:

Usage:

set { [ no | inv ] variable | variable=value } [...]
toggle variable [ variable ...]
unset variable [ variable ...]
reset variable [ variable ...]

This command is used to set (and unset) configuration variables. There are four basic types of variables: boolean, number, string and quadoption. boolean variables can be set (true) or unset (false). number variables can be assigned a positive integer value. string variables consist of any number of printable characters and must be enclosed in quotes if they contain spaces or tabs. You may also use the escape sequences “\n” and “\t” for newline and tab, respectively. quadoption variables are used to control whether or not to be prompted for certain actions, or to specify a default action. A value of yes will cause the action to be carried out automatically as if you had answered yes to the question. Similarly, a value of no will cause the action to be carried out as if you had answered “no.” A value of ask-yes will cause a prompt with a default answer of “yes” and ask-no will provide a default answer of “no.”

Prefixing a variable with “no” will unset it. Example: set noaskbcc.

For boolean variables, you may optionally prefix the variable name with inv to toggle the value (on or off). This is useful when writing macros. Example: set invsmart_wrap.

The toggle command automatically prepends the inv prefix to all specified variables.

The unset command automatically prepends the no prefix to all specified variables.

Using the <enter-command> function in the index menu, you can query the value of a variable by prefixing the name of the variable with a question mark:

set ?allow_8bit

The question mark is actually only required for boolean and quadoption variables.

The reset command resets all given variables to the compile time defaults (hopefully mentioned in this manual). If you use the command set and prefix the variable with “&” this has the same behavior as the reset command.

With the reset command there exists the special variable “all”, which allows you to reset all variables to their system defaults.

26.3. User-Defined Variables

26.3.1. Introduction

Along with the variables listed in the Configuration variables section, Mutt supports user-defined variables with names starting with my_ as in, for example, my_cfgdir.

The set command either creates a custom my_ variable or changes its value if it does exist already. The unset and reset commands remove the variable entirely.

Since user-defined variables are expanded in the same way that environment variables are (except for the shell-escape command and backtick expansion), this feature can be used to make configuration files more readable.

26.3.2. Examples

The following example defines and uses the variable my_cfgdir to abbreviate the calls of the source command:

Example 3.15. Using user-defined variables for config file readability

set my_cfgdir = $HOME/mutt/config

source $my_cfgdir/hooks
source $my_cfgdir/macros
# more source commands...

A custom variable can also be used in macros to backup the current value of another variable. In the following example, the value of the $delete is changed temporarily while its original value is saved as my_delete. After the macro has executed all commands, the original value of $delete is restored.

Example 3.16. Using user-defined variables for backing up other config option values

macro pager ,x '\
<enter-command>set my_delete=$delete<enter>\
<enter-command>set delete=yes<enter>\
...\
<enter-command>set delete=$my_delete<enter>'

Since Mutt expands such values already when parsing the configuration file(s), the value of $my_delete in the last example would be the value of $delete exactly as it was at that point during parsing the configuration file. If another statement would change the value for $delete later in the same or another file, it would have no effect on $my_delete. However, the expansion can be deferred to runtime, as shown in the next example, when escaping the dollar sign.

Example 3.17. Deferring user-defined variable expansion to runtime

macro pager <PageDown> "\
<enter-command> set my_old_pager_stop=\$pager_stop pager_stop<Enter>\
<next-page>\
<enter-command> set pager_stop=\$my_old_pager_stop<Enter>\
<enter-command> unset my_old_pager_stop<Enter>"

Note that there is a space between <enter-command> and the set configuration command, preventing Mutt from recording the macro's commands into its history.

26.4. Type Conversions

Variables are always assigned string values which Mutt parses into its internal representation according to the type of the variable, for example an integer number for numeric types. For all queries (including $-expansion) the value is converted from its internal type back into string. As a result, any variable can be assigned any value given that its content is valid for the target. This also counts for custom variables which are of type string. In case of parsing errors, Mutt will print error messages. Example 3.18, “Type conversions using variables” demonstrates type conversions.

Example 3.18. Type conversions using variables

set my_lines = "5"                # value is string "5"
set pager_index_lines = $my_lines # value is integer 5

set my_sort = "date-received"     # value is string "date-received"
set sort = "last-$my_sort"        # value is sort last-date-received

set my_inc = $read_inc            # value is string "10" (default of $read_inc)
set my_foo = $my_inc              # value is string "10"

These assignments are all valid. If, however, the value of $my_lines would have been “five” (or something else that cannot be parsed into a number), the assignment to $pager_index_lines would have produced an error message.

Type conversion applies to all configuration commands which take arguments. But please note that every expanded value of a variable is considered just a single token. A working example is:

set my_pattern = "~A"
set my_number = "10"

# same as: score ~A +10
score $my_pattern +$my_number

What does not work is:

set my_mx = "+mailbox1 +mailbox2"
mailboxes $my_mx +mailbox3

because the value of $my_mx is interpreted as a single mailbox named “+mailbox1 +mailbox2” and not two distinct mailboxes.

27. Reading Initialization Commands From Another File

Usage:

source filename

This command allows the inclusion of initialization commands from other files. For example, I place all of my aliases in ~/.mail_aliases so that I can make my ~/.muttrc readable and keep my aliases private.

If the filename begins with a tilde (“~”), it will be expanded to the path of your home directory.

If the filename ends with a vertical bar (“|”), then filename is considered to be an executable program from which to read input (e.g. source ~/bin/myscript|).

28. Removing Hooks

Usage:

unhook { * | hook-type }

This command permits you to flush hooks you have previously defined. You can either remove all hooks by giving the “*” character as an argument, or you can remove all hooks of a specific type by saying something like unhook send-hook.

29. Format Strings

29.1. Basic usage

Format strings are a general concept you'll find in several locations through the Mutt configuration, especially in the $index_format, $pager_format, $status_format, and other related variables. These can be very straightforward, and it's quite possible you already know how to use them.

The most basic format string element is a percent symbol followed by another character. For example, %s represents a message's Subject: header in the $index_format variable. The “expandos” available are documented with each format variable, but there are general modifiers available with all formatting expandos, too. Those are our concern here.

Some of the modifiers are borrowed right out of C (though you might know them from Perl, Python, shell, or another language). These are the [-]m.n modifiers, as in %-12.12s. As with such programming languages, these modifiers allow you to specify the minimum and maximum size of the resulting string, as well as its justification. If the “-” sign follows the percent, the string will be left-justified instead of right-justified. If there's a number immediately following that, it's the minimum amount of space the formatted string will occupy — if it's naturally smaller than that, it will be padded out with spaces. If a decimal point and another number follow, that's the maximum space allowable — the string will not be permitted to exceed that width, no matter its natural size. Each of these three elements is optional, so that all these are legal format strings: %-12s, %4c, %.15F and %-12.15L.

Mutt adds some other modifiers to format strings. If you use an equals symbol (=) as a numeric prefix (like the minus above), it will force the string to be centered within its minimum space range. For example, %=14y will reserve 14 characters for the %y expansion — that's the X-Label: header, in $index_format. If the expansion results in a string less than 14 characters, it will be centered in a 14-character space. If the X-Label for a message were “test”, that expansion would look like “     test     ”.

There are two very little-known modifiers that affect the way that an expando is replaced. If there is an underline (“_”) character between any format modifiers (as above) and the expando letter, it will expands in all lower case. And if you use a colon (“:”), it will replace all decimal points with underlines.

29.2. Conditionals

Depending on the format string variable, some of its sequences can be used to optionally print a string if their value is nonzero. For example, you may only want to see the number of flagged messages if such messages exist, since zero is not particularly meaningful. To optionally print a string based upon one of the above sequences, the following construct is used:

%?<sequence_char>?<optional_string>?

where sequence_char is an expando, and optional_string is the string you would like printed if sequence_char is nonzero. optional_string may contain other sequences as well as normal text, but you may not nest optional strings.

Here is an example illustrating how to optionally print the number of new messages in a mailbox in $status_format:

%?n?%n new messages.?

You can also switch between two strings using the following construct:

%?<sequence_char>?<if_string>&<else_string>?

If the value of sequence_char is non-zero, if_string will be expanded, otherwise else_string will be expanded.

29.3. Filters

Any format string ending in a vertical bar (“|”) will be expanded and piped through the first word in the string, using spaces as separator. The string returned will be used for display. If the returned string ends in %, it will be passed through the formatter a second time. This allows the filter to generate a replacement format string including % expandos.

All % expandos in a format string are expanded before the script is called so that:

Example 3.19. Using external filters in format strings

set status_format="script.sh '%r %f (%L)'|"

will make Mutt expand %r, %f and %L before calling the script. The example also shows that arguments can be quoted: the script will receive the expanded string between the single quotes as the only argument.

A practical example is the mutt_xtitle script installed in the samples subdirectory of the Mutt documentation: it can be used as filter for $status_format to set the current terminal's title, if supported.

29.4. Padding

In most format strings, Mutt supports different types of padding using special %-expandos:

%|X

When this occurs, Mutt will fill the rest of the line with the character X. For example, filling the rest of the line with dashes is done by setting:

set status_format = "%v on %h: %B: %?n?%n&no? new messages %|-"
%>X

Since the previous expando stops at the end of line, there must be a way to fill the gap between two items via the %>X expando: it puts as many characters X in between two items so that the rest of the line will be right-justified. For example, to not put the version string and hostname the above example on the left but on the right and fill the gap with spaces, one might use (note the space after %>):

set status_format = "%B: %?n?%n&no? new messages %> (%v on %h)"
%*X

Normal right-justification will print everything to the left of the %>, displaying padding and whatever lies to the right only if there's room. By contrast, “soft-fill” gives priority to the right-hand side, guaranteeing space to display it and showing padding only if there's still room. If necessary, soft-fill will eat text leftwards to make room for rightward text. For example, to right-justify the subject making sure as much as possible of it fits on screen, one might use (note two spaces after %* : the second ensures there's a space between the truncated right-hand side and the subject):

set index_format="%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?)%*  %s"

Chapter 4. Advanced Usage

1. Character Set Handling

A “character set” is basically a mapping between bytes and glyphs and implies a certain character encoding scheme. For example, for the ISO 8859 family of character sets, an encoding of 8bit per character is used. For the Unicode character set, different character encodings may be used, UTF-8 being the most popular. In UTF-8, a character is represented using a variable number of bytes ranging from 1 to 4.

Since Mutt is a command-line tool run from a shell, and delegates certain tasks to external tools (such as an editor for composing/editing messages), all of these tools need to agree on a character set and encoding. There exists no way to reliably deduce the character set a plain text file has. Interoperability is gained by the use of well-defined environment variables. The full set can be printed by issuing locale on the command line.

Upon startup, Mutt determines the character set on its own using routines that inspect locale-specific environment variables. Therefore, it is generally not necessary to set the $charset variable in Mutt. It may even be counter-productive as Mutt uses system and library functions that derive the character set themselves and on which Mutt has no influence. It's safest to let Mutt work out the locale setup itself.

If you happen to work with several character sets on a regular basis, it's highly advisable to use Unicode and an UTF-8 locale. Unicode can represent nearly all characters in a message at the same time. When not using a Unicode locale, it may happen that you receive messages with characters not representable in your locale. When displaying such a message, or replying to or forwarding it, information may get lost possibly rendering the message unusable (not only for you but also for the recipient, this breakage is not reversible as lost information cannot be guessed).

A Unicode locale makes all conversions superfluous which eliminates the risk of conversion errors. It also eliminates potentially wrong expectations about the character set between Mutt and external programs.

The terminal emulator used also must be properly configured for the current locale. Terminal emulators usually do not derive the locale from environment variables, they need to be configured separately. If the terminal is incorrectly configured, Mutt may display random and unexpected characters (question marks, octal codes, or just random glyphs), format strings may not work as expected, you may not be abled to enter non-ascii characters, and possible more. Data is always represented using bytes and so a correct setup is very important as to the machine, all character sets “look” the same.

Warning: A mismatch between what system and library functions think the locale is and what Mutt was told what the locale is may make it behave badly with non-ascii input: it will fail at seemingly random places. This warning is to be taken seriously since not only local mail handling may suffer: sent messages may carry wrong character set information the receiver has too deal with. The need to set $charset directly in most cases points at terminal and environment variable setup problems, not Mutt problems.

A list of officially assigned and known character sets can be found at IANA, a list of locally supported locales can be obtained by running locale -a.

2. Regular Expressions

All string patterns in Mutt including those in more complex patterns must be specified using regular expressions (regexp) in the “POSIX extended” syntax (which is more or less the syntax used by egrep and GNU awk). For your convenience, we have included below a brief description of this syntax.

The search is case sensitive if the pattern contains at least one upper case letter, and case insensitive otherwise.

Note

“\” must be quoted if used for a regular expression in an initialization command: “\\”.

A regular expression is a pattern that describes a set of strings. Regular expressions are constructed analogously to arithmetic expressions, by using various operators to combine smaller expressions.

Note

The regular expression can be enclosed/delimited by either " or ' which is useful if the regular expression includes a white-space character. See Syntax of Initialization Files for more information on " and ' delimiter processing. To match a literal " or ' you must preface it with \ (backslash).

The fundamental building blocks are the regular expressions that match a single character. Most characters, including all letters and digits, are regular expressions that match themselves. Any metacharacter with special meaning may be quoted by preceding it with a backslash.

The period “.” matches any single character. The caret “^” and the dollar sign “$” are metacharacters that respectively match the empty string at the beginning and end of a line.

A list of characters enclosed by “[” and “]” matches any single character in that list; if the first character of the list is a caret “^” then it matches any character not in the list. For example, the regular expression [0123456789] matches any single digit. A range of ASCII characters may be specified by giving the first and last characters, separated by a hyphen “-”. Most metacharacters lose their special meaning inside lists. To include a literal “]” place it first in the list. Similarly, to include a literal “^” place it anywhere but first. Finally, to include a literal hyphen “-” place it last.

Certain named classes of characters are predefined. Character classes consist of “[:”, a keyword denoting the class, and “:]”. The following classes are defined by the POSIX standard in Table 4.1, “POSIX regular expression character classes”

Table 4.1. POSIX regular expression character classes

Character classDescription
[:alnum:]Alphanumeric characters
[:alpha:]Alphabetic characters
[:blank:]Space or tab characters
[:cntrl:]Control characters
[:digit:]Numeric characters
[:graph:]Characters that are both printable and visible. (A space is printable, but not visible, while an “a” is both)
[:lower:]Lower-case alphabetic characters
[:print:]Printable characters (characters that are not control characters)
[:punct:]Punctuation characters (characters that are not letter, digits, control characters, or space characters)
[:space:]Space characters (such as space, tab and formfeed, to name a few)
[:upper:]Upper-case alphabetic characters
[:xdigit:]Characters that are hexadecimal digits

A character class is only valid in a regular expression inside the brackets of a character list.

Note

Note that the brackets in these class names are part of the symbolic names, and must be included in addition to the brackets delimiting the bracket list. For example, [[:digit:]] is equivalent to [0-9].

Two additional special sequences can appear in character lists. These apply to non-ASCII character sets, which can have single symbols (called collating elements) that are represented with more than one character, as well as several characters that are equivalent for collating or sorting purposes:

Collating Symbols

A collating symbol is a multi-character collating element enclosed in “[.” and “.]”. For example, if “ch” is a collating element, then [[.ch.]] is a regexp that matches this collating element, while [ch] is a regexp that matches either “c” or “h”.

Equivalence Classes

An equivalence class is a locale-specific name for a list of characters that are equivalent. The name is enclosed in “[=” and “=]”. For example, the name “e” might be used to represent all of “e” with grave (“¨â€), “e” with acute (“İ”) and “e”. In this case, [[=e=]] is a regexp that matches any of: “e” with grave (“¨â€), “e” with acute (“İ”) and “e”.

A regular expression matching a single character may be followed by one of several repetition operators described in Table 4.2, “Regular expression repetition operators”.

Table 4.2. Regular expression repetition operators

OperatorDescription
?The preceding item is optional and matched at most once
*The preceding item will be matched zero or more times
+The preceding item will be matched one or more times
{n}The preceding item is matched exactly n times
{n,}The preceding item is matched n or more times
{,m}The preceding item is matched at most m times
{n,m}The preceding item is matched at least n times, but no more than m times

Two regular expressions may be concatenated; the resulting regular expression matches any string formed by concatenating two substrings that respectively match the concatenated subexpressions.

Two regular expressions may be joined by the infix operator “|”; the resulting regular expression matches any string matching either subexpression.

Repetition takes precedence over concatenation, which in turn takes precedence over alternation. A whole subexpression may be enclosed in parentheses to override these precedence rules.

Note

If you compile Mutt with the included regular expression engine, the following operators may also be used in regular expressions as described in Table 4.3, “GNU regular expression extensions”.

Table 4.3. GNU regular expression extensions

ExpressionDescription
\\yMatches the empty string at either the beginning or the end of a word
\\BMatches the empty string within a word
\\<Matches the empty string at the beginning of a word
\\>Matches the empty string at the end of a word
\\wMatches any word-constituent character (letter, digit, or underscore)
\\WMatches any character that is not word-constituent
\\`Matches the empty string at the beginning of a buffer (string)
\\'Matches the empty string at the end of a buffer

Please note however that these operators are not defined by POSIX, so they may or may not be available in stock libraries on various systems.

3. Patterns: Searching, Limiting and Tagging

3.1. Pattern Modifier

Many of Mutt's commands allow you to specify a pattern to match (limit, tag-pattern, delete-pattern, etc.). Table 4.4, “Pattern modifiers” shows several ways to select messages.

Table 4.4. Pattern modifiers

Pattern modifierDescription
~Aall messages
~b EXPRmessages which contain EXPR in the message body
=b STRINGmessages which contain STRING in the message body. If IMAP is enabled, searches for STRING on the server, rather than downloading each message and searching it locally.
~B EXPRmessages which contain EXPR in the whole message
~c EXPRmessages carbon-copied to EXPR
%c GROUPmessages carbon-copied to any member of GROUP
~C EXPRmessages either to: or cc: EXPR
%C GROUPmessages either to: or cc: to any member of GROUP
~d [MIN]-[MAX]messages with “date-sent” in a Date range
~Ddeleted messages
~e EXPRmessages which contains EXPR in the “Sender” field
%e GROUPmessages which contain a member of GROUP in the “Sender” field
~Eexpired messages
~Fflagged messages
~f EXPRmessages originating from EXPR
%f GROUPmessages originating from any member of GROUP
~gcryptographically signed messages
~Gcryptographically encrypted messages
~h EXPRmessages which contain EXPR in the message header
~H EXPRmessages with a spam attribute matching EXPR
~i EXPRmessages which match EXPR in the “Message-ID” field
~kmessages which contain PGP key material
~L EXPRmessages either originated or received by EXPR
%L GROUPmessage either originated or received by any member of GROUP
~lmessages addressed to a known mailing list
~m [MIN]-[MAX]messages in the range MIN to MAX *)
~n [MIN]-[MAX]messages with a score in the range MIN to MAX *)
~Nnew messages
~Oold messages
~pmessages addressed to you (consults alternates)
~Pmessages from you (consults alternates)
~Qmessages which have been replied to
~r [MIN]-[MAX]messages with “date-received” in a Date range
~Rread messages
~s EXPRmessages having EXPR in the “Subject” field.
~Ssuperseded messages
~t EXPRmessages addressed to EXPR
~Ttagged messages
~umessages addressed to a subscribed mailing list
~Uunread messages
~vmessages part of a collapsed thread.
~Vcryptographically verified messages
~x EXPRmessages which contain EXPR in the “References” or “In-Reply-To” field
~X [MIN]-[MAX]messages with MIN to MAX attachments *)
~y EXPRmessages which contain EXPR in the “X-Label” field
~z [MIN]-[MAX]messages with a size in the range MIN to MAX *) **)
~=duplicated messages (see $duplicate_threads)
~$unreferenced messages (requires threaded view)
~(PATTERN)messages in threads containing messages matching PATTERN, e.g. all threads containing messages from you: ~(~P)

Where EXPR is a regular expression, and GROUP is an address group.

*) The forms “<[MAX]”, “>[MIN]”, “[MIN]-” and “-[MAX]” are allowed, too.

**) The suffixes “K” and “M” are allowed to specify kilobyte and megabyte respectively.

Special attention has to be payed when using regular expressions inside of patterns. Specifically, Mutt's parser for these patterns will strip one level of backslash (“\”), which is normally used for quoting. If it is your intention to use a backslash in the regular expression, you will need to use two backslashes instead (“\\”). You can force Mutt to treat EXPR as a simple string instead of a regular expression by using = instead of ~ in the pattern name. For example, =b *.* will find all messages that contain the literal string “*.*”. Simple string matches are less powerful than regular expressions but can be considerably faster. This is especially true for IMAP folders, because string matches can be performed on the server instead of by fetching every message. IMAP treats =h specially: it must be of the form “header: substring” and will not partially match header names. The substring part may be omitted if you simply wish to find messages containing a particular header without regard to its value.

Patterns matching lists of addresses (notably c, C, p, P and t) match if there is at least one match in the whole list. If you want to make sure that all elements of that list match, you need to prefix your pattern with “^”. This example matches all mails which only has recipients from Germany.

Example 4.1. Matching all addresses in address lists

^~C \.de$

3.2. Simple Searches

Mutt supports two versions of so called “simple searches”. These are issued if the query entered for searching, limiting and similar operations does not seem to contain a valid pattern modifier (i.e. it does not contain one of these characters: “~”, “=” or “%”). If the query is supposed to contain one of these special characters, they must be escaped by prepending a backslash (“\”).

The first type is by checking whether the query string equals a keyword case-insensitively from Table 4.5, “Simple search keywords”: If that is the case, Mutt will use the shown pattern modifier instead. If a keyword would conflict with your search keyword, you need to turn it into a regular expression to avoid matching the keyword table. For example, if you want to find all messages matching “flag” (using $simple_search) but don't want to match flagged messages, simply search for “[f]lag”.

Table 4.5. Simple search keywords

KeywordPattern modifier
all~A
.~A
^~A
del~D
flag~F
new~N
old~O
repl~Q
read~R
tag~T
unread~U

The second type of simple search is to build a complex search pattern using $simple_search as a template. Mutt will insert your query properly quoted and search for the composed complex query.

3.3. Nesting and Boolean Operators

Logical AND is performed by specifying more than one criterion. For example:

~t mutt ~f elkins

would select messages which contain the word “mutt” in the list of recipients and that have the word “elkins” in the “From” header field.

Mutt also recognizes the following operators to create more complex search patterns:

  • ! — logical NOT operator

  • | — logical OR operator

  • () — logical grouping operator

Here is an example illustrating a complex search pattern. This pattern will select all messages which do not contain “mutt” in the “To” or “Cc” field and which are from “elkins”.

Example 4.2. Using boolean operators in patterns

!(~t mutt|~c mutt) ~f elkins

Here is an example using white space in the regular expression (note the “'” and “"” delimiters). For this to match, the mail's subject must match the “^Junk +From +Me$” and it must be from either “Jim +Somebody” or “Ed +SomeoneElse”:

'~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'

Note

If a regular expression contains parenthesis, or a vertical bar ("|"), you must enclose the expression in double or single quotes since those characters are also used to separate different parts of Mutt's pattern language. For example: ~f "me@(mutt\.org|cs\.hmc\.edu)" Without the quotes, the parenthesis wouldn't end. This would be separated to two OR'd patterns: ~f me@(mutt\.org and cs\.hmc\.edu). They are never what you want.

3.4. Searching by Date

Mutt supports two types of dates, absolute and relative.

3.4.1. Absolute Dates

Dates must be in DD/MM/YY format (month and year are optional, defaulting to the current month and year). An example of a valid range of dates is:

Limit to messages matching: ~d 20/1/95-31/10

If you omit the minimum (first) date, and just specify “-DD/MM/YY”, all messages before the given date will be selected. If you omit the maximum (second) date, and specify “DD/MM/YY-”, all messages after the given date will be selected. If you specify a single date with no dash (“-”), only messages sent on the given date will be selected.

You can add error margins to absolute dates. An error margin is a sign (+ or -), followed by a digit, followed by one of the units in Table 4.6, “Date units”. As a special case, you can replace the sign by a “*” character, which is equivalent to giving identical plus and minus error margins.

Table 4.6. Date units

UnitDescription
yYears
mMonths
wWeeks
dDays

Example: To select any messages two weeks around January 15, 2001, you'd use the following pattern:

Limit to messages matching: ~d 15/1/2001*2w

3.4.2. Relative Dates

This type of date is relative to the current date, and may be specified as:

  • >offset for messages older than offset units

  • <offset for messages newer than offset units

  • =offset for messages exactly offset units old

offset is specified as a positive number with one of the units from Table 4.6, “Date units”.

Example: to select messages less than 1 month old, you would use

Limit to messages matching: ~d <1m

Note

All dates used when searching are relative to the local time zone, so unless you change the setting of your $index_format to include a %[...] format, these are not the dates shown in the main index.

4. Using Tags

Sometimes it is desirable to perform an operation on a group of messages all at once rather than one at a time. An example might be to save messages to a mailing list to a separate folder, or to delete all messages with a given subject. To tag all messages matching a pattern, use the <tag-pattern> function, which is bound to “shift-T” by default. Or you can select individual messages by hand using the <tag-message> function, which is bound to “t” by default. See patterns for Mutt's pattern matching syntax.

Once you have tagged the desired messages, you can use the “tag-prefix” operator, which is the “;” (semicolon) key by default. When the “tag-prefix” operator is used, the next operation will be applied to all tagged messages if that operation can be used in that manner. If the $auto_tag variable is set, the next operation applies to the tagged messages automatically, without requiring the “tag-prefix”.

In macros or push commands, you can use the <tag-prefix-cond> operator. If there are no tagged messages, Mutt will “eat” the rest of the macro to abort it's execution. Mutt will stop “eating” the macro when it encounters the <end-cond> operator; after this operator the rest of the macro will be executed as normal.

5. Using Hooks

A hook is a concept found in many other programs which allows you to execute arbitrary commands before performing some operation. For example, you may wish to tailor your configuration based upon which mailbox you are reading, or to whom you are sending mail. In the Mutt world, a hook consists of a regular expression or pattern along with a configuration option/command. See:

for specific details on each type of hook available.

Note

If a hook changes configuration settings, these changes remain effective until the end of the current Mutt session. As this is generally not desired, a “default” hook needs to be added before all other hooks of that type to restore configuration defaults.

Example 4.3. Specifying a “default” hook

send-hook . 'unmy_hdr From:'
send-hook ~C'^b@b\.b$' my_hdr from: c@c.c

In Example 4.3, “Specifying a “default” hook”, by default the value of $from and $realname is not overridden. When sending messages either To: or Cc: to <b@b.b>, the From: header is changed to <c@c.c>.

5.1. Message Matching in Hooks

Hooks that act upon messages (message-hook, reply-hook, send-hook, send2-hook, save-hook, fcc-hook) are evaluated in a slightly different manner. For the other types of hooks, a regular expression is sufficient. But in dealing with messages a finer grain of control is needed for matching since for different purposes you want to match different criteria.

Mutt allows the use of the search pattern language for matching messages in hook commands. This works in exactly the same way as it would when limiting or searching the mailbox, except that you are restricted to those operators which match information Mutt extracts from the header of the message (i.e., from, to, cc, date, subject, etc.).

For example, if you wanted to set your return address based upon sending mail to a specific address, you could do something like:

send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>'

which would execute the given command when sending mail to me@cs.hmc.edu.

However, it is not required that you write the pattern to match using the full searching language. You can still specify a simple regular expression like the other hooks, in which case Mutt will translate your pattern into the full language, using the translation specified by the $default_hook variable. The pattern is translated at the time the hook is declared, so the value of $default_hook that is in effect at that time will be used.

6. External Address Queries

Mutt supports connecting to external directory databases such as LDAP, ph/qi, bbdb, or NIS through a wrapper script which connects to Mutt using a simple interface. Using the $query_command variable, you specify the wrapper command to use. For example:

set query_command = "mutt_ldap_query.pl %s"

The wrapper script should accept the query on the command-line. It should return a one line message, then each matching response on a single line, each line containing a tab separated address then name then some other optional information. On error, or if there are no matching addresses, return a non-zero exit code and a one line error message.

An example multiple response output:

Searching database ... 20 entries ... 3 matching:
me@cs.hmc.edu           Michael Elkins  mutt dude
blong@fiction.net       Brandon Long    mutt and more
roessler@does-not-exist.org        Thomas Roessler mutt pgp

There are two mechanisms for accessing the query function of Mutt. One is to do a query from the index menu using the <query> function (default: Q). This will prompt for a query, then bring up the query menu which will list the matching responses. From the query menu, you can select addresses to create aliases, or to mail. You can tag multiple addresses to mail, start a new query, or have a new query appended to the current responses.

The other mechanism for accessing the query function is for address completion, similar to the alias completion. In any prompt for address entry, you can use the <complete-query> function (default: ^T) to run a query based on the current address you have typed. Like aliases, Mutt will look for what you have typed back to the last space or comma. If there is a single response for that query, Mutt will expand the address in place. If there are multiple responses, Mutt will activate the query menu. At the query menu, you can select one or more addresses to be added to the prompt.

7. Mailbox Formats

Mutt supports reading and writing of four different local mailbox formats: mbox, MMDF, MH and Maildir. The mailbox type is auto detected, so there is no need to use a flag for different mailbox types. When creating new mailboxes, Mutt uses the default specified with the $mbox_type variable. A short description of the formats follows.

mbox. This is a widely used mailbox format for UNIX. All messages are stored in a single file. Each message has a line of the form:

From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST

to denote the start of a new message (this is often referred to as the “From_” line). The mbox format requires mailbox locking, is prone to mailbox corruption with concurrently writing clients or misinterpreted From_ lines. Depending on the environment, new mail detection can be unreliable. Mbox folders are fast to open and easy to archive.

MMDF. This is a variant of the mbox format. Each message is surrounded by lines containing “^A^A^A^A” (four times control-A's). The same problems as for mbox apply (also with finding the right message separator as four control-A's may appear in message bodies).

MH. A radical departure from mbox and MMDF, a mailbox consists of a directory and each message is stored in a separate file. The filename indicates the message number (however, this is may not correspond to the message number Mutt displays). Deleted messages are renamed with a comma (“,”) prepended to the filename. Mutt detects this type of mailbox by looking for either .mh_sequences or .xmhcache files (needed to distinguish normal directories from MH mailboxes). MH is more robust with concurrent clients writing the mailbox, but still may suffer from lost flags; message corruption is less likely to occur than with mbox/mmdf. It's usually slower to open compared to mbox/mmdf since many small files have to be read (Mutt provides Section 7.1, “Header Caching” to greatly speed this process up). Depending on the environment, MH is not very disk-space efficient.

Maildir. The newest of the mailbox formats, used by the Qmail MTA (a replacement for sendmail). Similar to MH, except that it adds three subdirectories of the mailbox: tmp, new and cur. Filenames for the messages are chosen in such a way they are unique, even when two programs are writing the mailbox over NFS, which means that no file locking is needed and corruption is very unlikely. Maildir maybe slower to open without caching in Mutt, it too is not very disk-space efficient depending on the environment. Since no additional files are used for metadata (which is embedded in the message filenames) and Maildir is locking-free, it's easy to sync across different machines using file-level synchronization tools.

8. Mailbox Shortcuts

There are a number of built in shortcuts which refer to specific mailboxes. These shortcuts can be used anywhere you are prompted for a file or mailbox path or in path-related configuration variables. Note that these only work at the beginning of a string.

Table 4.7. Mailbox shortcuts

ShortcutRefers to...
!your $spoolfile (incoming) mailbox
>your $mbox file
<your $record file
^the current mailbox
- or !!the file you've last visited
~your home directory
= or +your $folder directory
@aliasto the default save folder as determined by the address of the alias

For example, to store a copy of outgoing messages in the folder they were composed in, a folder-hook can be used to set $record:

folder-hook . 'set record=^'

9. Handling Mailing Lists

Mutt has a few configuration options that make dealing with large amounts of mail easier. The first thing you must do is to let Mutt know what addresses you consider to be mailing lists (technically this does not have to be a mailing list, but that is what it is most often used for), and what lists you are subscribed to. This is accomplished through the use of the lists and subscribe commands in your .muttrc.

Now that Mutt knows what your mailing lists are, it can do several things, the first of which is the ability to show the name of a list through which you received a message (i.e., of a subscribed list) in the index menu display. This is useful to distinguish between personal and list mail in the same mailbox. In the $index_format variable, the expando “%L” will print the string “To <list>” when “list” appears in the “To” field, and “Cc <list>” when it appears in the “Cc” field (otherwise it prints the name of the author).

Often times the “To” and “Cc” fields in mailing list messages tend to get quite large. Most people do not bother to remove the author of the message they reply to from the list, resulting in two or more copies being sent to that person. The <list-reply> function, which by default is bound to “L” in the index menu and pager, helps reduce the clutter by only replying to the known mailing list addresses instead of all recipients (except as specified by Mail-Followup-To, see below).

Mutt also supports the Mail-Followup-To header. When you send a message to a list of recipients which includes one or several subscribed mailing lists, and if the $followup_to option is set, Mutt will generate a Mail-Followup-To header which contains all the recipients to whom you send this message, but not your address. This indicates that group-replies or list-replies (also known as “followups”) to this message should only be sent to the original recipients of the message, and not separately to you - you'll receive your copy through one of the mailing lists you are subscribed to.

Conversely, when group-replying or list-replying to a message which has a Mail-Followup-To header, Mutt will respect this header if the $honor_followup_to configuration variable is set. Using list-reply will in this case also make sure that the reply goes to the mailing list, even if it's not specified in the list of recipients in the Mail-Followup-To.

Note

When header editing is enabled, you can create a Mail-Followup-To header manually. Mutt will only auto-generate this header if it doesn't exist when you send the message.

The other method some mailing list admins use is to generate a “Reply-To” field which points back to the mailing list address rather than the author of the message. This can create problems when trying to reply directly to the author in private, since most mail clients will automatically reply to the address given in the “Reply-To” field. Mutt uses the $reply_to variable to help decide which address to use. If set to ask-yes or ask-no, you will be prompted as to whether or not you would like to use the address given in the “Reply-To” field, or reply directly to the address given in the “From” field. When set to yes, the “Reply-To” field will be used when present.

The “X-Label:” header field can be used to further identify mailing lists or list subject matter (or just to annotate messages individually). The $index_format variable's “%y” and “%Y” expandos can be used to expand “X-Label:” fields in the index, and Mutt's pattern-matcher can match regular expressions to “X-Label:” fields with the “~y” selector. “X-Label:” is not a standard message header field, but it can easily be inserted by procmail and other mail filtering agents.

Lastly, Mutt has the ability to sort the mailbox into threads. A thread is a group of messages which all relate to the same subject. This is usually organized into a tree-like structure where a message and all of its replies are represented graphically. If you've ever used a threaded news client, this is the same concept. It makes dealing with large volume mailing lists easier because you can easily delete uninteresting threads and quickly find topics of value.

10. New Mail Detection

Mutt supports setups with multiple folders, allowing all of them to be monitored for new mail (see Section 14, “Monitoring Incoming Mail” for details).

10.1. How New Mail Detection Works

For Mbox and Mmdf folders, new mail is detected by comparing access and/or modification times of files: Mutt assumes a folder has new mail if it wasn't accessed after it was last modified. Utilities like biff or frm or any other program which accesses the mailbox might cause Mutt to never detect new mail for that mailbox if they do not properly reset the access time. Other possible causes of Mutt not detecting new mail in these folders are backup tools (updating access times) or filesystems mounted without access time update support (for Linux systems, see the relatime option).

Note

Contrary to older Mutt releases, it now maintains the new mail status of a folder by properly resetting the access time if the folder contains at least one message which is neither read, nor deleted, nor marked as old.

In cases where new mail detection for Mbox or Mmdf folders appears to be unreliable, the $check_mbox_size option can be used to make Mutt track and consult file sizes for new mail detection instead which won't work for size-neutral changes.

New mail for Maildir is assumed if there is one message in the new/ subdirectory which is not marked deleted (see $maildir_trash). For MH folders, a mailbox is considered having new mail if there's at least one message in the “unseen” sequence as specified by $mh_seq_unseen.

Mutt does not poll POP3 folders for new mail, it only periodically checks the currently opened folder (if it's a POP3 folder).

For IMAP, by default Mutt uses recent message counts provided by the server to detect new mail. If the $imap_idle option is set, it'll use the IMAP IDLE extension if advertised by the server.

10.2. Polling For New Mail

When in the index menu and being idle (also see $timeout), Mutt periodically checks for new mail in all folders which have been configured via the mailboxes command. The interval depends on the folder type: for local/IMAP folders it consults $mail_check and $pop_checkinterval for POP folders.

Outside the index menu the directory browser supports checking for new mail using the <check-new> function which is unbound by default. Pressing TAB will bring up a menu showing the files specified by the mailboxes command, and indicate which contain new messages. Mutt will automatically enter this mode when invoked from the command line with the -y option.

For the pager, index and directory browser menus, Mutt contains the <buffy-list> function (bound to “.” by default) which will print a list of folders with new mail in the command line at the bottom of the screen.

For the index, by default Mutt displays the number of mailboxes with new mail in the status bar, please refer to the $status_format variable for details.

When changing folders, Mutt fills the prompt with the first folder from the mailboxes list containing new mail (if any), pressing <Space> will cycle through folders with new mail. The (by default unbound) function <next-unread-mailbox> in the index can be used to immediately open the next folder with unread mail (if any).

11. Editing Threads

Mutt has the ability to dynamically restructure threads that are broken either by misconfigured software or bad behavior from some correspondents. This allows to clean your mailboxes from these annoyances which make it hard to follow a discussion.

11.1. Linking Threads

Some mailers tend to “forget” to correctly set the “In-Reply-To:” and “References:” headers when replying to a message. This results in broken discussions because Mutt has not enough information to guess the correct threading. You can fix this by tagging the reply, then moving to the parent message and using the <link-threads> function (bound to & by default). The reply will then be connected to this parent message.

You can also connect multiple children at once, tagging them and using the <tag-prefix> command (“;”) or the $auto_tag option.

11.2. Breaking Threads

On mailing lists, some people are in the bad habit of starting a new discussion by hitting “reply” to any message from the list and changing the subject to a totally unrelated one. You can fix such threads by using the <break-thread> function (bound by default to #), which will turn the subthread starting from the current message into a whole different thread.

12. Delivery Status Notification (DSN) Support

RFC1894 defines a set of MIME content types for relaying information about the status of electronic mail messages. These can be thought of as “return receipts.”

To support DSN, there are two variables. $dsn_notify is used to request receipts for different results (such as failed message, message delivered, etc.). $dsn_return requests how much of your message should be returned with the receipt (headers or full message).

When using $sendmail for mail delivery, you need to use either Berkeley sendmail 8.8.x (or greater) a MTA supporting DSN command line options compatible to Sendmail: The -N and -R options can be used by the mail client to make requests as to what type of status messages should be returned. Please consider your MTA documentation whether DSN is supported.

For SMTP delivery using $smtp_url, it depends on the capabilities announced by the server whether Mutt will attempt to request DSN or not.

13. Start a WWW Browser on URLs

If a message contains URLs, it is efficient to get a menu with all the URLs and start a WWW browser on one of them. This functionality is provided by the external urlview program which can be retrieved at ftp://ftp.mutt.org/mutt/contrib/ and the configuration commands:

macro index \cb |urlview\n
macro pager \cb |urlview\n

14. Miscellany

This section documents various features that fit nowhere else.

Address normalization

Mutt normalizes all e-mail addresses to the simplest form possible. If an address contains a realname, the form Joe User <joe@example.com> is used and the pure e-mail address without angle brackets otherwise, i.e. just joe@example.com.

This normalization affects all headers Mutt generates including aliases.

Initial folder selection

The folder Mutt opens at startup is determined as follows: the folder specified in the $MAIL environment variable if present. Otherwise, the value of $MAILDIR is taken into account. If that isn't present either, Mutt takes the user's mailbox in the mailspool as determined at compile-time (which may also reside in the home directory). The $spoolfile setting overrides this selection. Highest priority has the mailbox given with the -f command line option.

Chapter 5. Mutt's MIME Support

Quite a bit of effort has been made to make Mutt the premier text-mode MIME MUA. Every effort has been made to provide the functionality that the discerning MIME user requires, and the conformance to the standards wherever possible. When configuring Mutt for MIME, there are two extra types of configuration files which Mutt uses. One is the mime.types file, which contains the mapping of file extensions to IANA MIME types. The other is the mailcap file, which specifies the external commands to use for handling specific MIME types.

1. Using MIME in Mutt

1.1. MIME Overview

MIME is short for “Multipurpose Internet Mail Extension” and describes mechanisms to internationalize and structure mail messages. Before the introduction of MIME, messages had a single text part and were limited to us-ascii header and content. With MIME, messages can have attachments (and even attachments which itself have attachments and thus form a tree structure), nearly arbitrary characters can be used for sender names, recipients and subjects.

Besides the handling of non-ascii characters in message headers, to Mutt the most important aspect of MIME are so-called MIME types. These are constructed using a major and minor type separated by a forward slash. These specify details about the content that follows. Based upon these, Mutt decides how to handle this part. The most popular major type is “text” with minor types for plain text, HTML and various other formats. Major types also exist for images, audio, video and of course general application data (e.g. to separate cryptographically signed data with a signature, send office documents, and in general arbitrary binary data). There's also the multipart major type which represents the root of a subtree of MIME parts. A list of supported MIME types can be found in Table 5.1, “Supported MIME types”.

MIME also defines a set of encoding schemes for transporting MIME content over the network: 7bit, 8bit, quoted-printable, base64 and binary. There're some rules when to choose what for encoding headers and/or body (if needed), and Mutt will in general make a good choice.

Mutt does most of MIME encoding/decoding behind the scenes to form messages conforming to MIME on the sending side. On reception, it can be flexibly configured as to how what MIME structure is displayed (and if it's displayed): these decisions are based on the content's MIME type. There are three areas/menus in dealing with MIME: the pager (while viewing a message), the attachment menu and the compose menu.

1.2. Viewing MIME Messages in the Pager

When you select a message from the index and view it in the pager, Mutt decodes as much of a message as possible to a text representation. Mutt internally supports a number of MIME types, including the text major type (with all minor types), the message/rfc822 (mail messages) type and some multipart types. In addition, it recognizes a variety of PGP MIME types, including PGP/MIME and application/pgp.

Mutt will denote attachments with a couple lines describing them. These lines are of the form:

[-- Attachment #1: Description --]
[-- Type: text/plain, Encoding: 7bit, Size: 10000 --]

Where the Description is the description or filename given for the attachment, and the Encoding is one of the already mentioned content encodings.

If Mutt cannot deal with a MIME type, it will display a message like:

[-- image/gif is unsupported (use 'v' to view this part) --]

1.3. The Attachment Menu

The default binding for <view-attachments> is “v”, which displays the attachment menu for a message. The attachment menu displays a list of the attachments in a message. From the attachment menu, you can save, print, pipe, delete, and view attachments. You can apply these operations to a group of attachments at once, by tagging the attachments and by using the <tag-prefix> operator. You can also reply to the current message from this menu, and only the current attachment (or the attachments tagged) will be quoted in your reply. You can view attachments as text, or view them using the mailcap viewer definition (the mailcap mechanism is explained later in detail).

Finally, you can apply the usual message-related functions (like <resend-message>, and the <reply> and <forward> functions) to attachments of type message/rfc822.

See table Table 9.7, “Default Attachment Menu Bindings” for all available functions.

1.4. The Compose Menu

The compose menu is the menu you see before you send a message. It allows you to edit the recipient list, the subject, and other aspects of your message. It also contains a list of the attachments of your message, including the main body. From this menu, you can print, copy, filter, pipe, edit, compose, review, and rename an attachment or a list of tagged attachments. You can also modifying the attachment information, notably the type, encoding and description.

Attachments appear as follows by default:

- 1 [text/plain, 7bit, 1K]           /tmp/mutt-euler-8082-0 <no description>
  2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description>

The “-” denotes that Mutt will delete the file after sending (or postponing, or canceling) the message. It can be toggled with the <toggle-unlink> command (default: u). The next field is the MIME content-type, and can be changed with the <edit-type> command (default: ^T). The next field is the encoding for the attachment, which allows a binary message to be encoded for transmission on 7bit links. It can be changed with the <edit-encoding> command (default: ^E). The next field is the size of the attachment, rounded to kilobytes or megabytes. The next field is the filename, which can be changed with the <rename-file> command (default: R). The final field is the description of the attachment, and can be changed with the <edit-description> command (default: d). See $attach_format for a full list of available expandos to format this display to your needs.

2. MIME Type Configuration with mime.types

To get most out of MIME, it's important that a MIME part's content type matches the content as closely as possible so that the recipient's client can automatically select the right viewer for the content. However, there's no reliable for Mutt to know how to detect every possible file type. Instead, it uses a simple plain text mapping file that specifies what file extension corresponds to what MIME type. This file is called mime.types.

When you add an attachment to your mail message, Mutt searches your personal mime.types file at $HOME/.mime.types, and then the system mime.types file at /usr/local/share/mutt/mime.types or /etc/mime.types

Each line starts with the full MIME type, followed by a space and space-separated list of file extensions. For example you could use:

Example 5.1. mime.types

application/postscript          ps eps
application/pgp                 pgp
audio/x-aiff                    aif aifc aiff

A sample mime.types file comes with the Mutt distribution, and should contain most of the MIME types you are likely to use.

If Mutt can not determine the MIME type by the extension of the file you attach, it will look at the file. If the file is free of binary information, Mutt will assume that the file is plain text, and mark it as text/plain. If the file contains binary information, then Mutt will mark it as application/octet-stream. You can change the MIME type that Mutt assigns to an attachment by using the <edit-type> command from the compose menu (default: ^T), see Table 5.1, “Supported MIME types” for supported major types. Mutt recognizes all of these if the appropriate entry is found in the mime.types file. Non-recognized mime types should only be used if the recipient of the message is likely to be expecting such attachments.

Table 5.1. Supported MIME types

MIME major typeStandardDescription
applicationyesGeneral application data
audioyesAudio data
imageyesImage data
messageyesMail messages, message status information
modelyesVRML and other modeling data
multipartyesContainer for other MIME parts
textyesText data
videoyesVideo data
chemicalnoMostly molecular data

MIME types are not arbitrary, they need to be assigned by IANA.

3. MIME Viewer Configuration with Mailcap

Mutt supports RFC 1524 MIME Configuration, in particular the Unix specific format specified in Appendix A of RFC 1524. This file format is commonly referred to as the “mailcap” format. Many MIME compliant programs utilize the mailcap format, allowing you to specify handling for all MIME types in one place for all programs. Programs known to use this format include Firefox, lynx and metamail.

In order to handle various MIME types that Mutt doesn't have built-in support for, it parses a series of external configuration files to find an external handler. The default search string for these files is a colon delimited list containing the following files:

  1. $HOME/.mailcap

  2. $PKGDATADIR/mailcap

  3. $SYSCONFDIR/mailcap

  4. /etc/mailcap

  5. /usr/etc/mailcap

  6. /usr/local/etc/mailcap

where $HOME is your home directory. The $PKGDATADIR and the $SYSCONFDIR directories depend on where Mutt is installed: the former is the default for shared data, the latter for system configuration files.

The default search path can be obtained by running the following command:

mutt -nF /dev/null -Q mailcap_path

In particular, the metamail distribution will install a mailcap file, usually as /usr/local/etc/mailcap, which contains some baseline entries.

3.1. The Basics of the Mailcap File

A mailcap file consists of a series of lines which are comments, blank, or definitions.

A comment line consists of a # character followed by anything you want.

A blank line is blank.

A definition line consists of a content type, a view command, and any number of optional fields. Each field of a definition line is divided by a semicolon “;” character.

The content type is specified in the MIME standard “type/subtype” notation. For example, text/plain, text/html, image/gif, etc. In addition, the mailcap format includes two formats for wildcards, one using the special “*” subtype, the other is the implicit wild, where you only include the major type. For example, image/*, or video will match all image types and video types, respectively.

The view command is a Unix command for viewing the type specified. There are two different types of commands supported. The default is to send the body of the MIME message to the command on stdin. You can change this behavior by using %s as a parameter to your view command. This will cause Mutt to save the body of the MIME message to a temporary file, and then call the view command with the %s replaced by the name of the temporary file. In both cases, Mutt will turn over the terminal to the view program until the program quits, at which time Mutt will remove the temporary file if it exists. This means that mailcap does not work out of the box with programs which detach themselves from the terminal right after starting, like open on Mac OS X. In order to nevertheless use these programs with mailcap, you probably need custom shell scripts.

So, in the simplest form, you can send a text/plain message to the external pager more on standard input:

text/plain; more

Or, you could send the message as a file:

text/plain; more %s

Perhaps you would like to use lynx to interactively view a text/html message:

text/html; lynx %s

In this case, lynx does not support viewing a file from standard input, so you must use the %s syntax.

Note

Some older versions of lynx contain a bug where they will check the mailcap file for a viewer for text/html. They will find the line which calls lynx, and run it. This causes lynx to continuously spawn itself to view the object.

On the other hand, maybe you don't want to use lynx interactively, you just want to have it convert the text/html to text/plain, then you can use:

text/html; lynx -dump %s | more

Perhaps you wish to use lynx to view text/html files, and a pager on all other text formats, then you would use the following:

text/html; lynx %s
text/*; more

3.2. Secure Use of Mailcap

The interpretation of shell meta-characters embedded in MIME parameters can lead to security problems in general. Mutt tries to quote parameters in expansion of %s syntaxes properly, and avoids risky characters by substituting them, see the $mailcap_sanitize variable.

Although Mutt's procedures to invoke programs with mailcap seem to be safe, there are other applications parsing mailcap, maybe taking less care of it. Therefore you should pay attention to the following rules:

Keep the %-expandos away from shell quoting. Don't quote them with single or double quotes. Mutt does this for you, the right way, as should any other program which interprets mailcap. Don't put them into backtick expansions. Be highly careful with evil statements, and avoid them if possible at all. Trying to fix broken behavior with quotes introduces new leaks — there is no alternative to correct quoting in the first place.

If you have to use the %-expandos' values in context where you need quoting or backtick expansions, put that value into a shell variable and reference the shell variable where necessary, as in the following example (using $charset inside the backtick expansion is safe, since it is not itself subject to any further expansion):

text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1

3.3. Advanced Mailcap Usage

3.3.1. Optional Fields

In addition to the required content-type and view command fields, you can add semi-colon “;” separated fields to set flags and other options. Mutt recognizes the following optional fields:

copiousoutput

This flag tells Mutt that the command passes possibly large amounts of text on standard output. This causes Mutt to invoke a pager (either the internal pager or the external pager defined by the pager variable) on the output of the view command. Without this flag, Mutt assumes that the command is interactive. One could use this to replace the pipe to more in the lynx -dump example in the Basic section:

text/html; lynx -dump %s ; copiousoutput

This will cause lynx to format the text/html output as text/plain and Mutt will use your standard pager to display the results.

Note that when using the built-in pager, only entries with this flag will be considered a handler for a MIME type — all other entries will be ignored.

needsterminal

Mutt uses this flag when viewing attachments with auto_view, in order to decide whether it should honor the setting of the $wait_key variable or not. When an attachment is viewed using an interactive program, and the corresponding mailcap entry has a needsterminal flag, Mutt will use $wait_key and the exit status of the program to decide if it will ask you to press a key after the external program has exited. In all other situations it will not prompt you for a key.

compose=<command>

This flag specifies the command to use to create a new attachment of a specific MIME type. Mutt supports this from the compose menu.

composetyped=<command>

This flag specifies the command to use to create a new attachment of a specific MIME type. This command differs from the compose command in that Mutt will expect standard MIME headers on the data. This can be used to specify parameters, filename, description, etc. for a new attachment. Mutt supports this from the compose menu.

print=<command>

This flag specifies the command to use to print a specific MIME type. Mutt supports this from the attachment and compose menus.

edit=<command>

This flag specifies the command to use to edit a specific MIME type. Mutt supports this from the compose menu, and also uses it to compose new attachments. Mutt will default to the defined $editor for text attachments.

nametemplate=<template>

This field specifies the format for the file denoted by %s in the command fields. Certain programs will require a certain file extension, for instance, to correctly view a file. For instance, lynx will only interpret a file as text/html if the file ends in .html. So, you would specify lynx as a text/html viewer with a line in the mailcap file like:

text/html; lynx %s; nametemplate=%s.html
test=<command>

This field specifies a command to run to test whether this mailcap entry should be used. The command is defined with the command expansion rules defined in the next section. If the command returns 0, then the test passed, and Mutt uses this entry. If the command returns non-zero, then the test failed, and Mutt continues searching for the right entry. Note that the content-type must match before Mutt performs the test. For example:

text/html; firefox -remote 'openURL(%s)' ; test=RunningX
text/html; lynx %s

In this example, Mutt will run the program RunningX which will return 0 if the X Window manager is running, and non-zero if it isn't. If RunningX returns 0, then Mutt will run firefox to display the text/html object. If RunningX doesn't return 0, then Mutt will go on to the next entry and use lynx to display the text/html object.

3.3.2. Search Order

When searching for an entry in the mailcap file, Mutt will search for the most useful entry for its purpose. For instance, if you are attempting to print an image/gif, and you have the following entries in your mailcap file, Mutt will search for an entry with the print command:

image/*;        xv %s
image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
                nametemplate=%s.gif

Mutt will skip the image/* entry and use the image/gif entry with the print command.

In addition, you can use this with auto_view to denote two commands for viewing an attachment, one to be viewed automatically, the other to be viewed interactively from the attachment menu using the <view-mailcap> function (bound to “m” by default). In addition, you can then use the test feature to determine which viewer to use interactively depending on your environment.

text/html;      firefox -remote 'openURL(%s)' ; test=RunningX
text/html;      lynx %s; nametemplate=%s.html
text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput

For auto_view, Mutt will choose the third entry because of the copiousoutput tag. For interactive viewing, Mutt will run the program RunningX to determine if it should use the first entry. If the program returns non-zero, Mutt will use the second entry for interactive viewing. The last entry is for inline display in the pager and the <view-attach> function in the attachment menu.

Entries with the copiousoutput tag should always be specified as the last one per type. For non-interactive use, the last entry will then actually be the first matching one with the tag set. For non-interactive use, only copiousoutput-tagged entries are considered. For interactive use, Mutt ignores this tag and treats all entries equally. Therefore, if not specified last, all following entries without this tag would never be considered for <view-attach> because the copiousoutput before them matched already.

3.3.3. Command Expansion

The various commands defined in the mailcap files are passed to the /bin/sh shell using the system(3) function. Before the command is passed to /bin/sh -c, it is parsed to expand various special parameters with information from Mutt. The keywords Mutt expands are:

%s

As seen in the basic mailcap section, this variable is expanded to a filename specified by the calling program. This file contains the body of the message to view/print/edit or where the composing program should place the results of composition. In addition, the use of this keyword causes Mutt to not pass the body of the message to the view/print/edit program on stdin.

%t

Mutt will expand %t to the text representation of the content type of the message in the same form as the first parameter of the mailcap definition line, i.e. text/html or image/gif.

%{<parameter>}

Mutt will expand this to the value of the specified parameter from the Content-Type: line of the mail message. For instance, if your mail message contains:

Content-Type: text/plain; charset=iso-8859-1

then Mutt will expand %{charset} to “iso-8859-1”. The default metamail mailcap file uses this feature to test the charset to spawn an xterm using the right charset to view the message.

\%

This will be replaced by a literal %.

Mutt does not currently support the %F and %n keywords specified in RFC 1524. The main purpose of these parameters is for multipart messages, which is handled internally by Mutt.

3.4. Example Mailcap Files

This mailcap file is fairly simple and standard:

# I'm always running X :)
video/*;        xanim %s > /dev/null
image/*;        xv %s > /dev/null

# I'm always running firefox (if my computer had more memory, maybe)
text/html;      firefox -remote 'openURL(%s)'

This mailcap file shows quite a number of examples:

# Use xanim to view all videos   Xanim produces a header on startup,
# send that to /dev/null so I don't see it
video/*;        xanim %s > /dev/null

# Send html to a running firefox by remote
text/html;      firefox -remote 'openURL(%s)'; test=RunningFirefox

# If I'm not running firefox but I am running X, start firefox on the
# object
text/html;      firefox %s; test=RunningX

# Else use lynx to view it as text
text/html;      lynx %s

# This version would convert the text/html to text/plain
text/html;      lynx -dump %s; copiousoutput

# I use enscript to print text in two columns to a page
text/*;         more %s; print=enscript -2Gr %s

# Firefox adds a flag to tell itself to view jpegs internally
image/jpeg;xv %s; x-mozilla-flags=internal

# Use xv to view images if I'm running X
# In addition, this uses the \ to extend the line and set my editor
# for images
image/*;xv %s; test=RunningX; \
        edit=xpaint %s

# Convert images to text using the netpbm tools
image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
pbmtoascii -1x2 ) 2>&1 ; copiousoutput

# Send excel spreadsheets to my NT box
application/ms-excel; open.pl %s

4. MIME Autoview

Usage:

auto_view mimetype [ mimetype ...]
unauto_view { * | mimetype ... }

In addition to explicitly telling Mutt to view an attachment with the MIME viewer defined in the mailcap file from the attachments menu, Mutt has support for automatically viewing MIME attachments while in the pager.

For this to work, you must define a viewer in the mailcap file which uses the copiousoutput option to denote that it is non-interactive. Usually, you also use the entry to convert the attachment to a text representation which you can view in the pager.

You then use the auto_view configuration command to list the content-types that you wish to view automatically. For instance, if you set it to:

auto_view text/html application/x-gunzip \
  application/postscript image/gif application/x-tar-gz

...Mutt would try to find corresponding entries for rendering attachments of these types as text. A corresponding mailcap could look like:

text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | \
                pgmtopbm | pbmtoascii ; copiousoutput
application/x-gunzip;   gzcat; copiousoutput
application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
application/postscript; ps2ascii %s; copiousoutput

unauto_view can be used to remove previous entries from the auto_view list. This can be used with message-hook to autoview messages based on size, etc. “unauto_view *” will remove all previous entries.

5. MIME Multipart/Alternative

The multipart/alternative container type only has child MIME parts which represent the same content in an alternative way. This is often used to send HTML messages which contain an alternative plain text representation.

Mutt has some heuristics for determining which attachment of a multipart/alternative type to display:

  1. First, Mutt will check the alternative_order list to determine if one of the available types is preferred. It consists of a number of MIME types in order, including support for implicit and explicit wildcards. For example:

    alternative_order text/enriched text/plain text \
      application/postscript image/*
    
  2. Next, Mutt will check if any of the types have a defined auto_view, and use that.

  3. Failing that, Mutt will look for any text type.

  4. As a last attempt, Mutt will look for any type it knows how to handle.

To remove a MIME type from the alternative_order list, use the unalternative_order command.

6. Attachment Searching and Counting

If you ever lose track of attachments in your mailboxes, Mutt's attachment-counting and -searching support might be for you. You can make your message index display the number of qualifying attachments in each message, or search for messages by attachment count. You also can configure what kinds of attachments qualify for this feature with the attachments and unattachments commands.

In order to provide this information, Mutt needs to fully MIME-parse all messages affected first. This can slow down operation especially for remote mail folders such as IMAP because all messages have to be downloaded first regardless whether the user really wants to view them or not though using Section 7.2, “Body Caching” usually means to download the message just once.

The syntax is:

attachments { + | - }disposition mime-type
unattachments { + | - }disposition mime-type
attachments ?

disposition is the attachment's Content-Disposition type — either inline or attachment. You can abbreviate this to I or A.

Disposition is prefixed by either a “+” symbol or a “-” symbol. If it's a “+”, you're saying that you want to allow this disposition and MIME type to qualify. If it's a “-”, you're saying that this disposition and MIME type is an exception to previous “+” rules. There are examples below of how this is useful.

mime-type is the MIME type of the attachment you want the command to affect. A MIME type is always of the format major/minor, where major describes the broad category of document you're looking at, and minor describes the specific type within that category. The major part of mime-type must be literal text (or the special token “*”), but the minor part may be a regular expression. (Therefore, “*/.*” matches any MIME type.)

The MIME types you give to the attachments directive are a kind of pattern. When you use the attachments directive, the patterns you specify are added to a list. When you use unattachments, the pattern is removed from the list. The patterns are not expanded and matched to specific MIME types at this time — they're just text in a list. They're only matched when actually evaluating a message.

Some examples might help to illustrate. The examples that are not commented out define the default configuration of the lists.

Example 5.2. Attachment counting


# Removing a pattern from a list removes that pattern literally. It
# does not remove any type matching the pattern.
#
#  attachments   +A */.*
#  attachments   +A image/jpeg
#  unattachments +A */.*
#
# This leaves "attached" image/jpeg files on the allowed attachments
# list. It does not remove all items, as you might expect, because the
# second */.* is not a matching expression at this time.
#
# Remember: "unattachments" only undoes what "attachments" has done!
# It does not trigger any matching on actual messages.

# Qualify any MIME part with an "attachment" disposition, EXCEPT for
# text/x-vcard and application/pgp parts. (PGP parts are already known
# to mutt, and can be searched for with ~g, ~G, and ~k.)
#
# I've added x-pkcs7 to this, since it functions (for S/MIME)
# analogously to PGP signature attachments. S/MIME isn't supported
# in a stock mutt build, but we can still treat it specially here.
#

attachments   +A */.*
attachments   -A text/x-vcard application/pgp.*
attachments   -A application/x-pkcs7-.*


# Discount all MIME parts with an "inline" disposition, unless they're
# text/plain. (Why inline a text/plain part unless it's external to the
# message flow?)

attachments   +I text/plain


# These two lines make Mutt qualify MIME containers.  (So, for example,
# a message/rfc822 forward will count as an attachment.)  The first
# line is unnecessary if you already have "attach-allow */.*", of
# course.  These are off by default!  The MIME elements contained
# within a message/* or multipart/* are still examined, even if the
# containers themselves don't qualify.

#attachments  +A message/.* multipart/.*
#attachments  +I message/.* multipart/.*


## You probably don't really care to know about deleted attachments.
attachments   -A message/external-body
attachments   -I message/external-body

Entering the command “attachments ?” as a command will list your current settings in Muttrc format, so that it can be pasted elsewhere.

7. MIME Lookup

Usage:

mime-lookup mimetype [ mimetype ...]
unmime-lookup { * | mimetype ... }

Mutt's mime_lookup list specifies a list of MIME types that should not be treated according to their mailcap entry. This option is designed to deal with binary types such as application/octet-stream. When an attachment's MIME type is listed in mime_lookup, then the extension of the filename will be compared to the list of extensions in the mime.types file. The MIME type associated with this extension will then be used to process the attachment according to the rules in the mailcap file and according to any other configuration options (such as auto_view) specified. Common usage would be:

mime_lookup application/octet-stream application/X-Lotus-Manuscript

In addition, the unmime_lookup command may be used to disable this feature for any particular MIME type if it had been set, for example, in a global .muttrc.

Chapter 6. Optional Features

1. General Notes

1.1. Enabling/Disabling Features

Mutt supports several of optional features which can be enabled or disabled at compile-time by giving the configure script certain arguments. These are listed in the “Optional features” section of the configure --help output.

Which features are enabled or disabled can later be determined from the output of mutt -v. If a compile option starts with “+” it is enabled and disabled if prefixed with “-”. For example, if Mutt was compiled using GnuTLS for encrypted communication instead of OpenSSL, mutt -v would contain:

-USE_SSL_OPENSSL +USE_SSL_GNUTLS

1.2. URL Syntax

Mutt optionally supports the IMAP, POP3 and SMTP protocols which require to access servers using URLs. The canonical syntax for specifying URLs in Mutt is (an item enclosed in [] means it is optional and may be omitted):

proto[s]://[username[:password]@]server[:port][/path]

proto is the communication protocol: imap for IMAP, pop for POP3 and smtp for SMTP. If “s” for “secure communication” is appended, Mutt will attempt to establish an encrypted communication using SSL or TLS.

Since all protocols supported by Mutt support/require authentication, login credentials may be specified in the URL. This has the advantage that multiple IMAP, POP3 or SMTP servers may be specified (which isn't possible using, for example, $imap_user). The username may contain the “@” symbol being used by many mail systems as part of the login name. The special characters “/” (%2F), “:” (%3A) and “%” (%25) have to be URL-encoded in usernames using the %-notation.

A password can be given, too but is not recommended if the URL is specified in a configuration file on disk.

If no port number is given, Mutt will use the system's default for the given protocol (usually consulting /etc/services).

The optional path is only relevant for IMAP and ignored elsewhere.

Example 6.1. URLs

pops://host/
imaps://user@host/INBOX/Sent
smtp://user@host:587/

2. SSL/TLS Support

If Mutt is compiled with IMAP, POP3 and/or SMTP support, it can also be compiled with support for SSL or TLS using either OpenSSL or GnuTLS ( by running the configure script with the --enable-ssl=... option for OpenSSL or --enable-gnutls=... for GnuTLS). Mutt can then attempt to encrypt communication with remote servers if these protocols are suffixed with “s” for “secure communication”.

3. POP3 Support

If Mutt is compiled with POP3 support (by running the configure script with the --enable-pop flag), it has the ability to work with mailboxes located on a remote POP3 server and fetch mail for local browsing.

Remote POP3 servers can be accessed using URLs with the pop protocol for unencrypted and pops for encrypted communication, see Section 1.2, “URL Syntax” for details.

Polling for new mail is more expensive over POP3 than locally. For this reason the frequency at which Mutt will check for mail remotely can be controlled by the $pop_checkinterval variable, which defaults to every 60 seconds.

POP is read-only which doesn't allow for some features like editing messages or changing flags. However, using Section 7.1, “Header Caching” and Section 7.2, “Body Caching” Mutt simulates the new/old/read flags as well as flagged and replied. Mutt applies some logic on top of remote messages but cannot change them so that modifications of flags are lost when messages are downloaded from the POP server (either by Mutt or other tools).

Another way to access your POP3 mail is the <fetch-mail> function (default: G). It allows to connect to $pop_host, fetch all your new mail and place it in the local $spoolfile. After this point, Mutt runs exactly as if the mail had always been local.

Note

If you only need to fetch all messages to a local mailbox you should consider using a specialized program, such as fetchmail(1), getmail(1) or similar.

4. IMAP Support

If Mutt was compiled with IMAP support (by running the configure script with the --enable-imap flag), it has the ability to work with folders located on a remote IMAP server.

You can access the remote inbox by selecting the folder by its URL (see Section 1.2, “URL Syntax” for details) using the imap or imaps protocol. Alternatively, a pine-compatible notation is also supported, i.e. {[username@]imapserver[:port][/ssl]}path/to/folder

Note that not all servers use “/” as the hierarchy separator. Mutt should correctly notice which separator is being used by the server and convert paths accordingly.

When browsing folders on an IMAP server, you can toggle whether to look at only the folders you are subscribed to, or all folders with the toggle-subscribed command. See also the $imap_list_subscribed variable.

Polling for new mail on an IMAP server can cause noticeable delays. So, you'll want to carefully tune the $mail_check and $timeout variables. Reasonable values are:

set mail_check=90
set timeout=15

with relatively good results even over slow modem lines.

Note

Note that if you are using mbox as the mail store on UW servers prior to v12.250, the server has been reported to disconnect a client if another client selects the same folder.

4.1. The IMAP Folder Browser

As of version 1.2, Mutt supports browsing mailboxes on an IMAP server. This is mostly the same as the local file browser, with the following differences:

  • In lieu of file permissions, Mutt displays the string “IMAP”, possibly followed by the symbol “+”, indicating that the entry contains both messages and subfolders. On Cyrus-like servers folders will often contain both messages and subfolders.

  • For the case where an entry can contain both messages and subfolders, the selection key (bound to enter by default) will choose to descend into the subfolder view. If you wish to view the messages in that folder, you must use view-file instead (bound to space by default).

  • You can create, delete and rename mailboxes with the <create-mailbox>, <delete-mailbox>, and <rename-mailbox> commands (default bindings: C, d and r, respectively). You may also <subscribe> and <unsubscribe> to mailboxes (normally these are bound to s and u, respectively).

4.2. Authentication

Mutt supports four authentication methods with IMAP servers: SASL, GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add NTLM authentication for you poor exchange users out there, but it has yet to be integrated into the main tree). There is also support for the pseudo-protocol ANONYMOUS, which allows you to log in to a public IMAP server without having an account. To use ANONYMOUS, simply make your username blank or “anonymous”.

SASL is a special super-authenticator, which selects among several protocols (including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure method available on your host and the server. Using some of these methods (including DIGEST-MD5 and possibly GSSAPI), your entire session will be encrypted and invisible to those teeming network snoops. It is the best option if you have it. To use it, you must have the Cyrus SASL library installed on your system and compile Mutt with the --with-sasl flag.

Mutt will try whichever methods are compiled in and available on the server, in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN.

There are a few variables which control authentication:

  • $imap_user - controls the username under which you request authentication on the IMAP server, for all authenticators. This is overridden by an explicit username in the mailbox path (i.e. by using a mailbox name of the form {user@host}).

  • $imap_pass - a password which you may preset, used by all authentication methods where a password is needed.

  • $imap_authenticators - a colon-delimited list of IMAP authentication methods to try, in the order you wish to try them. If specified, this overrides Mutt's default (attempt everything, in the order listed above).

5. SMTP Support

Besides supporting traditional mail delivery through a sendmail-compatible program, Mutt supports delivery through SMTP if it was configured and built with --enable-smtp.

If the configuration variable $smtp_url is set, Mutt will contact the given SMTP server to deliver messages; if it is unset, Mutt will use the program specified by $sendmail.

For details on the URL syntax, please see Section 1.2, “URL Syntax”.

The built-in SMTP support supports encryption (the smtps protocol using SSL or TLS) as well as SMTP authentication using SASL. The authentication mechanisms for SASL are specified in $smtp_authenticators defaulting to an empty list which makes Mutt try all available methods from most-secure to least-secure.

6. Managing Multiple Accounts

Usage:

account-hook pattern command

If you happen to have accounts on multiple IMAP, POP and/or SMTP servers, you may find managing all the authentication settings inconvenient and error-prone. The account-hook command may help. This hook works like folder-hook but is invoked whenever Mutt needs to access a remote mailbox (including inside the folder browser), not just when you open the mailbox. This includes (for example) polling for new mail, storing Fcc messages and saving messages to a folder. As a consequence, account-hook should only be used to set connection-related settings such as passwords or tunnel commands but not settings such as sender address or name (because in general it should be considered unpredictable which account-hook was last used).

Some examples:

account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
account-hook smtp://user@host3/ 'set tunnel="ssh host3 /usr/libexec/smtpd"'

To manage multiple accounts with, for example, different values of $record or sender addresses, folder-hook has to be be used together with the mailboxes command.

Example 6.2. Managing multiple accounts

mailboxes imap://user@host1/INBOX
folder-hook imap://user@host1/ 'set folder=imap://host1/ ; set record=+INBOX/Sent'

mailboxes imap://user@host2/INBOX
folder-hook imap://user@host2/ 'set folder=imap://host2/ ; set record=+INBOX/Sent'

In example Example 6.2, “Managing multiple accounts” the folders are defined using mailboxes so Mutt polls them for new mail. Each folder-hook triggers when one mailbox below each IMAP account is opened and sets $folder to the account's root folder. Next, it sets $record to the INBOX/Sent folder below the newly set $folder. Please notice that the value the “+” mailbox shortcut refers to depends on the current value of $folder and therefore has to be set separately per account. Setting other values like $from or $signature is analogous to setting $record.

7. Local Caching

Mutt contains two types of local caching: (1) the so-called “header caching” and (2) the so-called “body caching” which are both described in this section.

Header caching is optional as it depends on external libraries, body caching is always enabled if Mutt is compiled with POP and/or IMAP support as these use it (body caching requires no external library).

7.1. Header Caching

Mutt provides optional support for caching message headers for the following types of folders: IMAP, POP, Maildir and MH. Header caching greatly speeds up opening large folders because for remote folders, headers usually only need to be downloaded once. For Maildir and MH, reading the headers from a single file is much faster than looking at possibly thousands of single files (since Maildir and MH use one file per message.)

Header caching can be enabled via the configure script and the --enable-hcache option. It's not turned on by default because external database libraries are required: one of tokyocabinet, qdbm, gdbm or bdb must be present.

If enabled, $header_cache can be used to either point to a file or a directory. If set to point to a file, one database file for all folders will be used (which may result in lower performance), but one file per folder if it points to a directory.

7.2. Body Caching

Both cache methods can be combined using the same directory for storage (and for IMAP/POP even provide meaningful file names) which simplifies manual maintenance tasks.

In addition to caching message headers only, Mutt can also cache whole message bodies. This results in faster display of messages for POP and IMAP folders because messages usually have to be downloaded only once.

For configuration, the variable $message_cachedir must point to a directory. There, Mutt will create a hierarchy of subdirectories named like the account and mailbox path the cache is for.

7.3. Cache Directories

For using both, header and body caching, $header_cache and $message_cachedir can be safely set to the same value.

In a header or body cache directory, Mutt creates a directory hierarchy named like: proto:user@hostname where proto is either “pop” or “imap.” Within there, for each folder, Mutt stores messages in single files and header caches in files with the “.hcache” extension. All files can be removed as needed if the consumed disk space becomes an issue as Mutt will silently fetch missing items again. Pathnames are always stored in UTF-8 encoding.

For Maildir and MH, the header cache files are named after the MD5 checksum of the path.

7.4. Maintenance

Mutt does not (yet) support maintenance features for header cache database files so that files have to be removed in case they grow too big. It depends on the database library used for header caching whether disk space freed by removing messages is re-used.

For body caches, Mutt can keep the local cache in sync with the remote mailbox if the $message_cache_clean variable is set. Cleaning means to remove messages from the cache which are no longer present in the mailbox which only happens when other mail clients or instances of Mutt using a different body cache location delete messages (Mutt itself removes deleted messages from the cache when syncing a mailbox). As cleaning can take a noticeable amount of time, it should not be set in general but only occasionally.

8. Exact Address Generation

Mutt supports the “Name <user@host>” address syntax for reading and writing messages, the older “user@host (Name)” syntax is only supported when reading messages. The --enable-exact-address switch can be given to configure to build it with write-support for the latter syntax. EXACT_ADDRESS in the output of mutt -v indicates whether it's supported.

9. Sending Anonymous Messages via Mixmaster

You may also have compiled Mutt to co-operate with Mixmaster, an anonymous remailer. Mixmaster permits you to send your messages anonymously using a chain of remailers. Mixmaster support in Mutt is for mixmaster version 2.04 or later.

To use it, you'll have to obey certain restrictions. Most important, you cannot use the Cc and Bcc headers. To tell Mutt to use mixmaster, you have to select a remailer chain, using the mix function on the compose menu.

The chain selection screen is divided into two parts. In the (larger) upper part, you get a list of remailers you may use. In the lower part, you see the currently selected chain of remailers.

You can navigate in the chain using the <chain-prev> and <chain-next> functions, which are by default bound to the left and right arrows and to the h and l keys (think vi keyboard bindings). To insert a remailer at the current chain position, use the <insert> function. To append a remailer behind the current chain position, use <select-entry> or <append>. You can also delete entries from the chain, using the corresponding function. Finally, to abandon your changes, leave the menu, or <accept> them pressing (by default) the Return key.

Note that different remailers do have different capabilities, indicated in the %c entry of the remailer menu lines (see $mix_entry_format). Most important is the “middleman” capability, indicated by a capital “M”: This means that the remailer in question cannot be used as the final element of a chain, but will only forward messages to other mixmaster remailers. For details on the other capabilities, please have a look at the mixmaster documentation.

Chapter 7. Security Considerations

First of all, Mutt contains no security holes included by intention but may contain unknown security holes. As a consequence, please run Mutt only with as few permissions as possible. Especially, do not run Mutt as the super user.

When configuring Mutt, there're some points to note about secure setups so please read this chapter carefully.

1. Passwords

Although Mutt can be told the various passwords for accounts, please never store passwords in configuration files. Besides the fact that the system's operator can always read them, you could forget to mask it out when reporting a bug or asking for help via a mailing list. Even worse, your mail including your password could be archived by internet search engines, mail-to-news gateways etc. It may already be too late before you notice your mistake.

2. Temporary Files

Mutt uses many temporary files for viewing messages, verifying digital signatures, etc. As long as being used, these files are visible by other users and maybe even readable in case of misconfiguration. Also, a different location for these files may be desired which can be changed via the $tmpdir variable.

3. Information Leaks

3.1. Message-Id: headers

Message-Id: headers contain a local part that is to be created in a unique fashion. In order to do so, Mutt will “leak” some information to the outside world when sending messages: the generation of this header includes a step counter which is increased (and rotated) with every message sent. In a longer running mutt session, others can make assumptions about your mailing habits depending on the number of messages sent. If this is not desired, the header can be manually provided using $edit_headers (though not recommended).

3.2. mailto:-style Links

As Mutt be can be set up to be the mail client to handle mailto: style links in websites, there're security considerations, too. Arbitrary header fields can be embedded in these links which could override existing header fields or attach arbitrary files using the Attach: pseudoheader. This may be problematic if the $edit-headers variable is unset, i.e. the user doesn't want to see header fields while editing the message and doesn't pay enough attention to the compose menu's listing of attachments.

For example, following a link like

mailto:joe@host?Attach=~/.gnupg/secring.gpg

will send out the user's private gnupg keyring to joe@host if the user doesn't follow the information on screen carefully enough.

4. External Applications

Mutt in many places has to rely on external applications or for convenience supports mechanisms involving external applications.

One of these is the mailcap mechanism as defined by RfC1524. Details about a secure use of the mailcap mechanisms is given in Section 3.2, “Secure Use of Mailcap”.

Besides the mailcap mechanism, Mutt uses a number of other external utilities for operation, for example to provide crypto support, in backtick expansion in configuration files or format string filters. The same security considerations apply for these as for tools involved via mailcap.

Chapter 8. Performance Tuning

1. Reading and Writing Mailboxes

Mutt's performance when reading mailboxes can be improved in two ways:

  1. For remote folders (IMAP and POP) as well as folders using one-file-per message storage (Maildir and MH), Mutt's performance can be greatly improved using header caching. using a single database per folder.

  2. Mutt provides the $read_inc and $write_inc variables to specify at which rate to update progress counters. If these values are too low, Mutt may spend more time on updating the progress counter than it spends on actually reading/writing folders.

    For example, when opening a maildir folder with a few thousand messages, the default value for $read_inc may be too low. It can be tuned on on a folder-basis using folder-hooks:

    # use very high $read_inc to speed up reading hcache'd maildirs
    folder-hook . 'set read_inc=1000'
    # use lower value for reading slower remote IMAP folders
    folder-hook ^imap 'set read_inc=100'
    # use even lower value for reading even slower remote POP folders
    folder-hook ^pop 'set read_inc=1'

These settings work on a per-message basis. However, as messages may greatly differ in size and certain operations are much faster than others, even per-folder settings of the increment variables may not be desirable as they produce either too few or too much progress updates. Thus, Mutt allows to limit the number of progress updates per second it'll actually send to the terminal using the $time_inc variable.

2. Reading Messages from Remote Folders

Reading messages from remote folders such as IMAP an POP can be slow especially for large mailboxes since Mutt only caches a very limited number of recently viewed messages (usually 10) per session (so that it will be gone for the next session.)

To improve performance and permanently cache whole messages, please refer to Mutt's so-called body caching for details.

3. Searching and Limiting

When searching mailboxes either via a search or a limit action, for some patterns Mutt distinguishes between regular expression and string searches. For regular expressions, patterns are prefixed with “~” and with “=” for string searches.

Even though a regular expression search is fast, it's several times slower than a pure string search which is noticeable especially on large folders. As a consequence, a string search should be used instead of a regular expression search if the user already knows enough about the search pattern.

For example, when limiting a large folder to all messages sent to or by an author, it's much faster to search for the initial part of an e-mail address via =Luser@ instead of ~Luser@. This is especially true for searching message bodies since a larger amount of input has to be searched.

As for regular expressions, a lower case string search pattern makes Mutt perform a case-insensitive search except for IMAP (because for IMAP Mutt performs server-side searches which don't support case-insensitivity).

Chapter 9. Reference

Table of Contents

1. Command-Line Options
2. Configuration Commands
3. Configuration Variables
3.1. abort_nosubject
3.2. abort_unmodified
3.3. alias_file
3.4. alias_format
3.5. allow_8bit
3.6. allow_ansi
3.7. arrow_cursor
3.8. ascii_chars
3.9. askbcc
3.10. askcc
3.11. assumed_charset
3.12. attach_charset
3.13. attach_format
3.14. attach_sep
3.15. attach_split
3.16. attribution
3.17. auto_tag
3.18. autoedit
3.19. beep
3.20. beep_new
3.21. bounce
3.22. bounce_delivered
3.23. braille_friendly
3.24. certificate_file
3.25. charset
3.26. check_mbox_size
3.27. check_new
3.28. collapse_unread
3.29. compose_format
3.30. config_charset
3.31. confirmappend
3.32. confirmcreate
3.33. connect_timeout
3.34. content_type
3.35. copy
3.36. crypt_autoencrypt
3.37. crypt_autopgp
3.38. crypt_autosign
3.39. crypt_autosmime
3.40. crypt_replyencrypt
3.41. crypt_replysign
3.42. crypt_replysignencrypted
3.43. crypt_timestamp
3.44. crypt_use_gpgme
3.45. crypt_use_pka
3.46. crypt_verify_sig
3.47. date_format
3.48. default_hook
3.49. delete
3.50. delete_untag
3.51. digest_collapse
3.52. display_filter
3.53. dotlock_program
3.54. dsn_notify
3.55. dsn_return
3.56. duplicate_threads
3.57. edit_headers
3.58. editor
3.59. encode_from
3.60. entropy_file
3.61. envelope_from_address
3.62. escape
3.63. fast_reply
3.64. fcc_attach
3.65. fcc_clear
3.66. folder
3.67. folder_format
3.68. followup_to
3.69. force_name
3.70. forward_decode
3.71. forward_decrypt
3.72. forward_edit
3.73. forward_format
3.74. forward_quote
3.75. from
3.76. gecos_mask
3.77. hdrs
3.78. header
3.79. header_cache
3.80. header_cache_compress
3.81. header_cache_pagesize
3.82. help
3.83. hidden_host
3.84. hide_limited
3.85. hide_missing
3.86. hide_thread_subject
3.87. hide_top_limited
3.88. hide_top_missing
3.89. history
3.90. history_file
3.91. honor_disposition
3.92. honor_followup_to
3.93. hostname
3.94. ignore_linear_white_space
3.95. ignore_list_reply_to
3.96. imap_authenticators
3.97. imap_check_subscribed
3.98. imap_delim_chars
3.99. imap_headers
3.100. imap_idle
3.101. imap_keepalive
3.102. imap_list_subscribed
3.103. imap_login
3.104. imap_pass
3.105. imap_passive
3.106. imap_peek
3.107. imap_pipeline_depth
3.108. imap_servernoise
3.109. imap_user
3.110. implicit_autoview
3.111. include
3.112. include_onlyfirst
3.113. indent_string
3.114. index_format
3.115. ispell
3.116. keep_flagged
3.117. locale
3.118. mail_check
3.119. mail_check_recent
3.120. mailcap_path
3.121. mailcap_sanitize
3.122. maildir_header_cache_verify
3.123. maildir_trash
3.124. mark_old
3.125. markers
3.126. mask
3.127. mbox
3.128. mbox_type
3.129. menu_context
3.130. menu_move_off
3.131. menu_scroll
3.132. message_cache_clean
3.133. message_cachedir
3.134. message_format
3.135. meta_key
3.136. metoo
3.137. mh_purge
3.138. mh_seq_flagged
3.139. mh_seq_replied
3.140. mh_seq_unseen
3.141. mime_forward
3.142. mime_forward_decode
3.143. mime_forward_rest
3.144. mix_entry_format
3.145. mixmaster
3.146. move
3.147. narrow_tree
3.148. net_inc
3.149. pager
3.150. pager_context
3.151. pager_format
3.152. pager_index_lines
3.153. pager_stop
3.154. pgp_auto_decode
3.155. pgp_autoinline
3.156. pgp_check_exit
3.157. pgp_clearsign_command
3.158. pgp_decode_command
3.159. pgp_decrypt_command
3.160. pgp_encrypt_only_command
3.161. pgp_encrypt_sign_command
3.162. pgp_entry_format
3.163. pgp_export_command
3.164. pgp_getkeys_command
3.165. pgp_good_sign
3.166. pgp_ignore_subkeys
3.167. pgp_import_command
3.168. pgp_list_pubring_command
3.169. pgp_list_secring_command
3.170. pgp_long_ids
3.171. pgp_mime_auto
3.172. pgp_replyinline
3.173. pgp_retainable_sigs
3.174. pgp_show_unusable
3.175. pgp_sign_as
3.176. pgp_sign_command
3.177. pgp_sort_keys
3.178. pgp_strict_enc
3.179. pgp_timeout
3.180. pgp_use_gpg_agent
3.181. pgp_verify_command
3.182. pgp_verify_key_command
3.183. pipe_decode
3.184. pipe_sep
3.185. pipe_split
3.186. pop_auth_try_all
3.187. pop_authenticators
3.188. pop_checkinterval
3.189. pop_delete
3.190. pop_host
3.191. pop_last
3.192. pop_pass
3.193. pop_reconnect
3.194. pop_user
3.195. post_indent_string
3.196. postpone
3.197. postponed
3.198. preconnect
3.199. print
3.200. print_command
3.201. print_decode
3.202. print_split
3.203. prompt_after
3.204. query_command
3.205. query_format
3.206. quit
3.207. quote_regexp
3.208. read_inc
3.209. read_only
3.210. realname
3.211. recall
3.212. record
3.213. reply_regexp
3.214. reply_self
3.215. reply_to
3.216. resolve
3.217. reverse_alias
3.218. reverse_name
3.219. reverse_realname
3.220. rfc2047_parameters
3.221. save_address
3.222. save_empty
3.223. save_history
3.224. save_name
3.225. score
3.226. score_threshold_delete
3.227. score_threshold_flag
3.228. score_threshold_read
3.229. search_context
3.230. send_charset
3.231. sendmail
3.232. sendmail_wait
3.233. shell
3.234. sig_dashes
3.235. sig_on_top
3.236. signature
3.237. simple_search
3.238. sleep_time
3.239. smart_wrap
3.240. smileys
3.241. smime_ask_cert_label
3.242. smime_ca_location
3.243. smime_certificates
3.244. smime_decrypt_command
3.245. smime_decrypt_use_default_key
3.246. smime_default_key
3.247. smime_encrypt_command
3.248. smime_encrypt_with
3.249. smime_get_cert_command
3.250. smime_get_cert_email_command
3.251. smime_get_signer_cert_command
3.252. smime_import_cert_command
3.253. smime_is_default
3.254. smime_keys
3.255. smime_pk7out_command
3.256. smime_sign_command
3.257. smime_sign_opaque_command
3.258. smime_timeout
3.259. smime_verify_command
3.260. smime_verify_opaque_command
3.261. smtp_authenticators
3.262. smtp_pass
3.263. smtp_url
3.264. sort
3.265. sort_alias
3.266. sort_aux
3.267. sort_browser
3.268. sort_re
3.269. spam_separator
3.270. spoolfile
3.271. ssl_ca_certificates_file
3.272. ssl_client_cert
3.273. ssl_force_tls
3.274. ssl_min_dh_prime_bits
3.275. ssl_starttls
3.276. ssl_use_sslv2
3.277. ssl_use_sslv3
3.278. ssl_use_tlsv1
3.279. ssl_usesystemcerts
3.280. ssl_verify_dates
3.281. ssl_verify_host
3.282. status_chars
3.283. status_format
3.284. status_on_top
3.285. strict_threads
3.286. suspend
3.287. text_flowed
3.288. thorough_search
3.289. thread_received
3.290. tilde
3.291. time_inc
3.292. timeout
3.293. tmpdir
3.294. to_chars
3.295. tunnel
3.296. uncollapse_jump
3.297. use_8bitmime
3.298. use_domain
3.299. use_envelope_from
3.300. use_from
3.301. use_idn
3.302. use_ipv6
3.303. user_agent
3.304. visual
3.305. wait_key
3.306. weed
3.307. wrap
3.308. wrap_headers
3.309. wrap_search
3.310. wrapmargin
3.311. write_bcc
3.312. write_inc
4. Functions
4.1. Generic Menu
4.2. Index Menu
4.3. Pager Menu
4.4. Alias Menu
4.5. Query Menu
4.6. Attachment Menu
4.7. Compose Menu
4.8. Postpone Menu
4.9. Browser Menu
4.10. Pgp Menu
4.11. Smime Menu
4.12. Mixmaster Menu
4.13. Editor Menu

1. Command-Line Options

Running mutt with no arguments will make Mutt attempt to read your spool mailbox. However, it is possible to read other mailboxes and to send messages from the command line as well.

Table 9.1. Command line options

OptionDescription
-Aexpand an alias
-aattach a file to a message
-bspecify a blind carbon-copy (BCC) address
-cspecify a carbon-copy (Cc) address
-Dprint the value of all Mutt variables to stdout
-especify a config command to be run after initialization files are read
-fspecify a mailbox to load
-Fspecify an alternate file to read initialization commands
-hprint help on command line options
-Hspecify a draft file from which to read a header and body
-ispecify a file to include in a message composition
-mspecify a default mailbox type
-ndo not read the system Muttrc
-precall a postponed message
-Qquery a configuration variable
-Ropen mailbox in read-only mode
-sspecify a subject (enclose in quotes if it contains spaces)
-vshow version number and compile-time definitions
-xsimulate the mailx(1) compose mode
-yshow a menu containing the files specified by the mailboxes command
-zexit immediately if there are no messages in the mailbox
-Zopen the first folder with new message, exit immediately if none

To read messages in a mailbox

mutt [-nz] [-F muttrc ] [-m type ] [-f mailbox ]

To compose a new message

mutt [-n] [-F muttrc ] [-c address ] [-i filename ] [-s subject ] [ -a file [...] -- ] address | mailto_url ...

Mutt also supports a “batch” mode to send prepared messages. Simply redirect input from the file you wish to send. For example,

mutt -s "data set for run #2" professor@bigschool.edu < ~/run2.dat

will send a message to <professor@bigschool.edu> with a subject of “data set for run #2”. In the body of the message will be the contents of the file “~/run2.dat”.

All files passed with -a file will be attached as a MIME part to the message. To attach a single or several files, use “--” to separate files and recipient addresses:

mutt -a image.png -- some@one.org

or

mutt -a *.png -- some@one.org

Note

The -a option must be last in the option list.

In addition to accepting a list of email addresses, Mutt also accepts a URL with the mailto: schema as specified in RFC2368. This is useful when configuring a web browser to launch Mutt when clicking on mailto links.

mutt mailto:some@one.org?subject=test&cc=other@one.org

2. Configuration Commands

The following are the commands understood by Mutt:

3. Configuration Variables

3.1. abort_nosubject

Type: quadoption
Default: ask-yes

If set to yes, when composing messages and no subject is given at the subject prompt, composition will be aborted. If set to no, composing messages with no subject given at the subject prompt will never be aborted.

3.2. abort_unmodified

Type: quadoption
Default: yes

If set to yes, composition will automatically abort after editing the message body if no changes are made to the file (this check only happens after the first edit of the file). When set to no, composition will never be aborted.

3.3. alias_file

Type: path
Default: “~/.muttrc”

The default file in which to save aliases created by the <create-alias> function. Entries added to this file are encoded in the character set specified by $config_charset if it is set or the current character set otherwise.

Note: Mutt will not automatically source this file; you must explicitly use the “source” command for it to be executed in case this option points to a dedicated alias file.

The default for this option is the currently used muttrc file, or “~/.muttrc” if no user muttrc was found.

3.4. alias_format

Type: string
Default: “%4n %2f %t %-10a   %r”

Specifies the format of the data displayed for the “alias” menu. The following printf(3)-style sequences are available:

%a alias name
%f flags - currently, a “d” for an alias marked for deletion
%n index number
%r address which alias expands to
%t character which indicates if the alias is tagged for inclusion

3.5. allow_8bit

Type: boolean
Default: yes

Controls whether 8-bit data is converted to 7-bit using either Quoted- Printable or Base64 encoding when sending mail.

3.6. allow_ansi

Type: boolean
Default: no

Controls whether ANSI color codes in messages (and color tags in rich text messages) are to be interpreted. Messages containing these codes are rare, but if this option is set, their text will be colored accordingly. Note that this may override your color choices, and even present a security problem, since a message could include a line like

[-- PGP output follows ...

and give it the same color as your attachment color (see also $crypt_timestamp).

3.7. arrow_cursor

Type: boolean
Default: no

When set, an arrow (“->”) will be used to indicate the current entry in menus instead of highlighting the whole line. On slow network or modem links this will make response faster because there is less that has to be redrawn on the screen when moving to the next or previous entries in the menu.

3.8. ascii_chars

Type: boolean
Default: no

If set, Mutt will use plain ASCII characters when displaying thread and attachment trees, instead of the default ACS characters.

3.9. askbcc

Type: boolean
Default: no

If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients before editing an outgoing message.

3.10. askcc

Type: boolean
Default: no

If set, Mutt will prompt you for carbon-copy (Cc) recipients before editing the body of an outgoing message.

3.11. assumed_charset

Type: string
Default: (empty)

This variable is a colon-separated list of character encoding schemes for messages without character encoding indication. Header field values and message body content without character encoding indication would be assumed that they are written in one of this list. By default, all the header fields and message body without any charset indication are assumed to be in “us-ascii”.

For example, Japanese users might prefer this:

set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

However, only the first content is valid for the message body.

3.12. attach_charset

Type: string
Default: (empty)

This variable is a colon-separated list of character encoding schemes for text file attachments. Mutt uses this setting to guess which encoding files being attached are encoded in to convert them to a proper character set given in $send_charset.

If unset, the value of $charset will be used instead. For example, the following configuration would work for Japanese text handling:

set attach_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

Note: for Japanese users, “iso-2022-*” must be put at the head of the value as shown above if included.

3.13. attach_format

Type: string
Default: “%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] ”

This variable describes the format of the “attachment” menu. The following printf(3)-style sequences are understood:

%C charset
%c requires charset conversion (“n” or “c”)
%D deleted flag
%d description
%e MIME content-transfer-encoding
%f filename
%I disposition (“I” for inline, “A” for attachment)
%m major MIME type
%M MIME subtype
%n attachment number
%Q “Q”, if MIME part qualifies for attachment counting
%s size
%t tagged flag
%T graphic tree characters
%u unlink (=to delete) flag
%X number of qualifying MIME parts in this part and its children (please see the “attachments” section for possible speed effects)
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

3.14. attach_sep

Type: string
Default: “\n”

The separator to add between attachments when operating (saving, printing, piping, etc) on a list of tagged attachments.

3.15. attach_split

Type: boolean
Default: yes

If this variable is unset, when operating (saving, printing, piping, etc) on a list of tagged attachments, Mutt will concatenate the attachments and will operate on them as a single attachment. The $attach_sep separator is added after each attachment. When set, Mutt will operate on the attachments one by one.

3.16. attribution

Type: string
Default: “On %d, %n wrote:”

This is the string that will precede a message which has been included in a reply. For a full listing of defined printf(3)-like sequences see the section on $index_format.

3.17. auto_tag

Type: boolean
Default: no

When set, functions in the index menu which affect a message will be applied to all tagged messages (if there are any). When unset, you must first use the <tag-prefix> function (bound to “;” by default) to make the next function apply to all tagged messages.

3.18. autoedit

Type: boolean
Default: no

When set along with $edit_headers, Mutt will skip the initial send-menu (prompting for subject and recipients) and allow you to immediately begin editing the body of your message. The send-menu may still be accessed once you have finished editing the body of your message.

Note: when this option is set, you cannot use send-hooks that depend on the recipients when composing a new (non-reply) message, as the initial list of recipients is empty.

Also see $fast_reply.

3.19. beep

Type: boolean
Default: yes

When this variable is set, mutt will beep when an error occurs.

3.20. beep_new

Type: boolean
Default: no

When this variable is set, mutt will beep whenever it prints a message notifying you of new mail. This is independent of the setting of the $beep variable.

3.21. bounce

Type: quadoption
Default: ask-yes

Controls whether you will be asked to confirm bouncing messages. If set to yes you don't get asked if you want to bounce a message. Setting this variable to no is not generally useful, and thus not recommended, because you are unable to bounce messages.

3.22. bounce_delivered

Type: boolean
Default: yes

When this variable is set, mutt will include Delivered-To headers when bouncing messages. Postfix users may wish to unset this variable.

3.23. braille_friendly

Type: boolean
Default: no

When this variable is set, mutt will place the cursor at the beginning of the current line in menus, even when the $arrow_cursor variable is unset, making it easier for blind persons using Braille displays to follow these menus. The option is unset by default because many visual terminals don't permit making the cursor invisible.

3.24. certificate_file

Type: path
Default: “~/.mutt_certificates”

This variable specifies the file where the certificates you trust are saved. When an unknown certificate is encountered, you are asked if you accept it or not. If you accept it, the certificate can also be saved in this file and further connections are automatically accepted.

You can also manually add CA certificates in this file. Any server certificate that is signed with one of these CA certificates is also automatically accepted.

Example:

set certificate_file=~/.mutt/certificates

3.25. charset

Type: string
Default: (empty)

Character set your terminal uses to display and enter textual data. It is also the fallback for $send_charset.

Upon startup Mutt tries to derive this value from environment variables such as $LC_CTYPE or $LANG.

Note: It should only be set in case Mutt isn't able to determine the character set used correctly.

3.26. check_mbox_size

Type: boolean
Default: no

When this variable is set, mutt will use file size attribute instead of access time when checking for new mail in mbox and mmdf folders.

This variable is unset by default and should only be enabled when new mail detection for these folder types is unreliable or doesn't work.

Note that enabling this variable should happen before any “mailboxes” directives occur in configuration files regarding mbox or mmdf folders because mutt needs to determine the initial new mail status of such a mailbox by performing a fast mailbox scan when it is defined. Afterwards the new mail status is tracked by file size changes.

3.27. check_new

Type: boolean
Default: yes

Note: this option only affects maildir and MH style mailboxes.

When set, Mutt will check for new mail delivered while the mailbox is open. Especially with MH mailboxes, this operation can take quite some time since it involves scanning the directory and checking each file to see if it has already been looked at. If this variable is unset, no check for new mail is performed while the mailbox is open.

3.28. collapse_unread

Type: boolean
Default: yes

When unset, Mutt will not collapse a thread if it contains any unread messages.

3.29. compose_format

Type: string
Default: “-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-”

Controls the format of the status line displayed in the “compose” menu. This string is similar to $status_format, but has its own set of printf(3)-like sequences:

%a total number of attachments
%h local hostname
%l approximate size (in bytes) of the current message
%v Mutt version string

See the text describing the $status_format option for more information on how to set $compose_format.

3.30. config_charset

Type: string
Default: (empty)

When defined, Mutt will recode commands in rc files from this encoding to the current character set as specified by $charset and aliases written to $alias_file from the current character set.

Please note that if setting $charset it must be done before setting $config_charset.

Recoding should be avoided as it may render unconvertable characters as question marks which can lead to undesired side effects (for example in regular expressions).

3.31. confirmappend

Type: boolean
Default: yes

When set, Mutt will prompt for confirmation when appending messages to an existing mailbox.

3.32. confirmcreate

Type: boolean
Default: yes

When set, Mutt will prompt for confirmation when saving messages to a mailbox which does not yet exist before creating it.

3.33. connect_timeout

Type: number
Default: 30

Causes Mutt to timeout a network connection (for IMAP, POP or SMTP) after this many seconds if the connection is not able to be established. A negative value causes Mutt to wait indefinitely for the connection attempt to succeed.

3.34. content_type

Type: string
Default: “text/plain”

Sets the default Content-Type for the body of newly composed messages.

3.35. copy

Type: quadoption
Default: yes

This variable controls whether or not copies of your outgoing messages will be saved for later references. Also see $record, $save_name, $force_name and “fcc-hook”.

3.36. crypt_autoencrypt

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to PGP encrypt outgoing messages. This is probably only useful in connection to the “send-hook” command. It can be overridden by use of the pgp menu, when encryption is not required or signing is requested as well. If $smime_is_default is set, then OpenSSL is used instead to create S/MIME messages and settings can be overridden by use of the smime menu instead. (Crypto only)

3.37. crypt_autopgp

Type: boolean
Default: yes

This variable controls whether or not mutt may automatically enable PGP encryption/signing for messages. See also $crypt_autoencrypt, $crypt_replyencrypt, $crypt_autosign, $crypt_replysign and $smime_is_default.

3.38. crypt_autosign

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to cryptographically sign outgoing messages. This can be overridden by use of the pgp menu, when signing is not required or encryption is requested as well. If $smime_is_default is set, then OpenSSL is used instead to create S/MIME messages and settings can be overridden by use of the smime menu instead of the pgp menu. (Crypto only)

3.39. crypt_autosmime

Type: boolean
Default: yes

This variable controls whether or not mutt may automatically enable S/MIME encryption/signing for messages. See also $crypt_autoencrypt, $crypt_replyencrypt, $crypt_autosign, $crypt_replysign and $smime_is_default.

3.40. crypt_replyencrypt

Type: boolean
Default: yes

If set, automatically PGP or OpenSSL encrypt replies to messages which are encrypted. (Crypto only)

3.41. crypt_replysign

Type: boolean
Default: no

If set, automatically PGP or OpenSSL sign replies to messages which are signed.

Note: this does not work on messages that are encrypted and signed! (Crypto only)

3.42. crypt_replysignencrypted

Type: boolean
Default: no

If set, automatically PGP or OpenSSL sign replies to messages which are encrypted. This makes sense in combination with $crypt_replyencrypt, because it allows you to sign all messages which are automatically encrypted. This works around the problem noted in $crypt_replysign, that mutt is not able to find out whether an encrypted message is also signed. (Crypto only)

3.43. crypt_timestamp

Type: boolean
Default: yes

If set, mutt will include a time stamp in the lines surrounding PGP or S/MIME output, so spoofing such lines is more difficult. If you are using colors to mark these lines, and rely on these, you may unset this setting. (Crypto only)

3.44. crypt_use_gpgme

Type: boolean
Default: no

This variable controls the use of the GPGME-enabled crypto backends. If it is set and Mutt was built with gpgme support, the gpgme code for S/MIME and PGP will be used instead of the classic code. Note that you need to set this option in .muttrc; it won't have any effect when used interactively.

3.45. crypt_use_pka

Type: boolean
Default: no

Controls whether mutt uses PKA (see http://www.g10code.de/docs/pka-intro.de.pdf) during signature verification (only supported by the GPGME backend).

3.46. crypt_verify_sig

Type: quadoption
Default: yes

If “yes”, always attempt to verify PGP or S/MIME signatures. If “ask-*”, ask whether or not to verify the signature. If “no”, never attempt to verify cryptographic signatures. (Crypto only)

3.47. date_format

Type: string
Default: “!%a, %b %d, %Y at %I:%M:%S%p %Z”

This variable controls the format of the date printed by the “%d” sequence in $index_format. This is passed to the strftime(3) function to process the date, see the man page for the proper syntax.

Unless the first character in the string is a bang (“!”), the month and week day names are expanded according to the locale specified in the variable $locale. If the first character in the string is a bang, the bang is discarded, and the month and week day names in the rest of the string are expanded in the C locale (that is in US English).

3.48. default_hook

Type: string
Default: “~f %s !~P | (~P ~C %s)”

This variable controls how “message-hook”, “reply-hook”, “send-hook”, “send2-hook”, “save-hook”, and “fcc-hook” will be interpreted if they are specified with only a simple regexp, instead of a matching pattern. The hooks are expanded when they are declared, so a hook will be interpreted according to the value of this variable at the time the hook is declared.

The default value matches if the message is either from a user matching the regular expression given, or if it is from you (if the from address matches “alternates”) and is to or cc'ed to a user matching the given regular expression.

3.49. delete

Type: quadoption
Default: ask-yes

Controls whether or not messages are really deleted when closing or synchronizing a mailbox. If set to yes, messages marked for deleting will automatically be purged without prompting. If set to no, messages marked for deletion will be kept in the mailbox.

3.50. delete_untag

Type: boolean
Default: yes

If this option is set, mutt will untag messages when marking them for deletion. This applies when you either explicitly delete a message, or when you save it to another folder.

3.51. digest_collapse

Type: boolean
Default: yes

If this option is set, mutt's received-attachments menu will not show the subparts of individual messages in a multipart/digest. To see these subparts, press “v” on that menu.

3.52. display_filter

Type: path
Default: (empty)

When set, specifies a command used to filter messages. When a message is viewed it is passed as standard input to $display_filter, and the filtered message is read from the standard output.

3.53. dotlock_program

Type: path
Default: “/usr/local/bin/mutt_dotlock”

Contains the path of the mutt_dotlock(8) binary to be used by mutt.

3.54. dsn_notify

Type: string
Default: (empty)

This variable sets the request for when notification is returned. The string consists of a comma separated list (no spaces!) of one or more of the following: never, to never request notification, failure, to request notification on transmission failure, delay, to be notified of message delays, success, to be notified of successful transmission.

Example:

set dsn_notify="failure,delay"

Note: when using $sendmail for delivery, you should not enable this unless you are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1)-compatible interface supporting the -N option for DSN. For SMTP delivery, DSN support is auto-detected so that it depends on the server whether DSN will be used or not.

3.55. dsn_return

Type: string
Default: (empty)

This variable controls how much of your message is returned in DSN messages. It may be set to either hdrs to return just the message header, or full to return the full message.

Example:

set dsn_return=hdrs

Note: when using $sendmail for delivery, you should not enable this unless you are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1)-compatible interface supporting the -R option for DSN. For SMTP delivery, DSN support is auto-detected so that it depends on the server whether DSN will be used or not.

3.56. duplicate_threads

Type: boolean
Default: yes

This variable controls whether mutt, when $sort is set to threads, threads messages with the same Message-Id together. If it is set, it will indicate that it thinks they are duplicates of each other with an equals sign in the thread tree.

3.57. edit_headers

Type: boolean
Default: no

This option allows you to edit the header of your outgoing messages along with the body of your message.

Note that changes made to the References: and Date: headers are ignored for interoperability reasons.

3.58. editor

Type: path
Default: (empty)

This variable specifies which editor is used by mutt. It defaults to the value of the $VISUAL, or $EDITOR, environment variable, or to the string “vi” if neither of those are set.

3.59. encode_from

Type: boolean
Default: no

When set, mutt will quoted-printable encode messages when they contain the string “From ” (note the trailing space) in the beginning of a line. This is useful to avoid the tampering certain mail delivery and transport agents tend to do with messages (in order to prevent tools from misinterpreting the line as a mbox message separator).

3.60. entropy_file

Type: path
Default: (empty)

The file which includes random data that is used to initialize SSL library functions.

3.61. envelope_from_address

Type: e-mail address
Default: (empty)

Manually sets the envelope sender for outgoing messages. This value is ignored if $use_envelope_from is unset.

3.62. escape

Type: string
Default: “~”

Escape character to use for functions in the built-in editor.

3.63. fast_reply

Type: boolean
Default: no

When set, the initial prompt for recipients and subject are skipped when replying to messages, and the initial prompt for subject is skipped when forwarding messages.

Note: this variable has no effect when the $autoedit variable is set.

3.64. fcc_attach

Type: quadoption
Default: yes

This variable controls whether or not attachments on outgoing messages are saved along with the main body of your message.

3.65. fcc_clear

Type: boolean
Default: no

When this variable is set, FCCs will be stored unencrypted and unsigned, even when the actual message is encrypted and/or signed. (PGP only)

3.66. folder

Type: path
Default: “~/Mail”

Specifies the default location of your mailboxes. A “+” or “=” at the beginning of a pathname will be expanded to the value of this variable. Note that if you change this variable (from the default) value you need to make sure that the assignment occurs before you use “+” or “=” for any other variables since expansion takes place when handling the “mailboxes” command.

3.67. folder_format

Type: string
Default: “%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f”

This variable allows you to customize the file browser display to your personal taste. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%C current file number
%d date/time folder was last modified
%D date/time folder was last modified using $date_format.
%f filename (“/” is appended to directory names, “@” to symbolic links and “*” to executable files)
%F file permissions
%g group name (or numeric gid, if missing)
%l number of hard links
%N N if folder has new mail, blank otherwise
%s size in bytes
%t “*” if the file is tagged, blank otherwise
%u owner name (or numeric uid, if missing)
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

3.68. followup_to

Type: boolean
Default: yes

Controls whether or not the “Mail-Followup-To:” header field is generated when sending mail. When set, Mutt will generate this field when you are replying to a known mailing list, specified with the “subscribe” or “lists” commands.

This field has two purposes. First, preventing you from receiving duplicate copies of replies to messages which you send to mailing lists, and second, ensuring that you do get a reply separately for any messages sent to known lists to which you are not subscribed.

The header will contain only the list's address for subscribed lists, and both the list address and your own email address for unsubscribed lists. Without this header, a group reply to your message sent to a subscribed list will be sent to both the list and your address, resulting in two copies of the same email for you.

3.69. force_name

Type: boolean
Default: no

This variable is similar to $save_name, except that Mutt will store a copy of your outgoing message by the username of the address you are sending to even if that mailbox does not exist.

Also see the $record variable.

3.70. forward_decode

Type: boolean
Default: yes

Controls the decoding of complex MIME messages into text/plain when forwarding a message. The message header is also RFC2047 decoded. This variable is only used, if $mime_forward is unset, otherwise $mime_forward_decode is used instead.

3.71. forward_decrypt

Type: boolean
Default: yes

Controls the handling of encrypted messages when forwarding a message. When set, the outer layer of encryption is stripped off. This variable is only used if $mime_forward is set and $mime_forward_decode is unset. (PGP only)

3.72. forward_edit

Type: quadoption
Default: yes

This quadoption controls whether or not the user is automatically placed in the editor when forwarding messages. For those who always want to forward with no modification, use a setting of “no”.

3.73. forward_format

Type: string
Default: “[%a: %s]”

This variable controls the default subject when forwarding a message. It uses the same format sequences as the $index_format variable.

3.74. forward_quote

Type: boolean
Default: no

When set, forwarded messages included in the main body of the message (when $mime_forward is unset) will be quoted using $indent_string.

3.75. from

Type: e-mail address
Default: (empty)

When set, this variable contains a default from address. It can be overridden using “my_hdr” (including from a “send-hook”) and $reverse_name. This variable is ignored if $use_from is unset.

This setting defaults to the contents of the environment variable $EMAIL.

3.76. gecos_mask

Type: regular expression
Default: “^[^,]*”

A regular expression used by mutt to parse the GECOS field of a password entry when expanding the alias. The default value will return the string up to the first “,” encountered. If the GECOS field contains a string like “lastname, firstname” then you should set it to “.*”.

This can be useful if you see the following behavior: you address an e-mail to user ID “stevef” whose full name is “Steve Franklin”. If mutt expands “stevef” to “"Franklin" stevef@foo.bar” then you should set the $gecos_mask to a regular expression that will match the whole name so mutt will expand “Franklin” to “Franklin, Steve”.

3.77. hdrs

Type: boolean
Default: yes

When unset, the header fields normally added by the “my_hdr” command are not created. This variable must be unset before composing a new message or replying in order to take effect. If set, the user defined header fields are added to every new message.

3.78. header

Type: boolean
Default: no

When set, this variable causes Mutt to include the header of the message you are replying to into the edit buffer. The $weed setting applies.

3.79. header_cache

Type: path
Default: (empty)

This variable points to the header cache database. If pointing to a directory Mutt will contain a header cache database file per folder, if pointing to a file that file will be a single global header cache. By default it is unset so no header caching will be used.

Header caching can greatly improve speed when opening POP, IMAP MH or Maildir folders, see “caching” for details.

3.80. header_cache_compress

Type: boolean
Default: yes

When mutt is compiled with qdbm or tokyocabinet as header cache backend, this option determines whether the database will be compressed. Compression results in database files roughly being one fifth of the usual diskspace, but the decompression can result in a slower opening of cached folder(s) which in general is still much faster than opening non header cached folders.

3.81. header_cache_pagesize

Type: string
Default: “16384”

When mutt is compiled with either gdbm or bdb4 as the header cache backend, this option changes the database page size. Too large or too small values can waste space, memory, or CPU time. The default should be more or less optimal for most use cases.

3.82. help

Type: boolean
Default: yes

When set, help lines describing the bindings for the major functions provided by each menu are displayed on the first line of the screen.

Note: The binding will not be displayed correctly if the function is bound to a sequence rather than a single keystroke. Also, the help line may not be updated if a binding is changed while Mutt is running. Since this variable is primarily aimed at new users, neither of these should present a major problem.

3.83. hidden_host

Type: boolean
Default: no

When set, mutt will skip the host name part of $hostname variable when adding the domain part to addresses. This variable does not affect the generation of Message-IDs, and it will not lead to the cut-off of first-level domains.

3.84. hide_limited

Type: boolean
Default: no

When set, mutt will not show the presence of messages that are hidden by limiting, in the thread tree.

3.85. hide_missing

Type: boolean
Default: yes

When set, mutt will not show the presence of missing messages in the thread tree.

3.86. hide_thread_subject

Type: boolean
Default: yes

When set, mutt will not show the subject of messages in the thread tree that have the same subject as their parent or closest previously displayed sibling.

3.87. hide_top_limited

Type: boolean
Default: no

When set, mutt will not show the presence of messages that are hidden by limiting, at the top of threads in the thread tree. Note that when $hide_limited is set, this option will have no effect.

3.88. hide_top_missing

Type: boolean
Default: yes

When set, mutt will not show the presence of missing messages at the top of threads in the thread tree. Note that when $hide_missing is set, this option will have no effect.

3.89. history

Type: number
Default: 10

This variable controls the size (in number of strings remembered) of the string history buffer per category. The buffer is cleared each time the variable is set.

3.90. history_file

Type: path
Default: “~/.mutthistory”

The file in which Mutt will save its history.

3.91. honor_disposition

Type: boolean
Default: no

When set, Mutt will not display attachments with a disposition of “attachment” inline even if it could render the part to plain text. These MIME parts can only be viewed from the attachment menu.

If unset, Mutt will render all MIME parts it can properly transform to plain text.

3.92. honor_followup_to

Type: quadoption
Default: yes

This variable controls whether or not a Mail-Followup-To header is honored when group-replying to a message.

3.93. hostname

Type: string
Default: (empty)

Specifies the fully-qualified hostname of the system mutt is running on containing the host's name and the DNS domain it belongs to. It is used as the domain part (after “@”) for local email addresses as well as Message-Id headers.

Its value is determined at startup as follows: If the node's name as returned by the uname(3) function contains the hostname and the domain, these are used to construct $hostname. If there is no domain part returned, Mutt will look for a “domain” or “search” line in /etc/resolv.conf to determine the domain. Optionally, Mutt can be compiled with a fixed domain name in which case a detected one is not used.

Also see $use_domain and $hidden_host.

3.94. ignore_linear_white_space

Type: boolean
Default: no

This option replaces linear-white-space between encoded-word and text to a single space to prevent the display of MIME-encoded “Subject:” field from being divided into multiple lines.

3.95. ignore_list_reply_to

Type: boolean
Default: no

Affects the behavior of the <reply> function when replying to messages from mailing lists (as defined by the “subscribe” or “lists” commands). When set, if the “Reply-To:” field is set to the same value as the “To:” field, Mutt assumes that the “Reply-To:” field was set by the mailing list to automate responses to the list, and will ignore this field. To direct a response to the mailing list when this option is set, use the <list-reply> function; <group-reply> will reply to both the sender and the list.

3.96. imap_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an IMAP server, in the order mutt should try them. Authentication methods are either “login” or the right side of an IMAP “AUTH=xxx” capability string, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If it's unset (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set imap_authenticators="gssapi:cram-md5:login"

Note: Mutt will only fall back to other authentication methods if the previous methods are unavailable. If a method is available but authentication fails, mutt will not connect to the IMAP server.

3.97. imap_check_subscribed

Type: boolean
Default: no

When set, mutt will fetch the set of subscribed folders from your server on connection, and add them to the set of mailboxes it polls for new mail just as if you had issued individual “mailboxes” commands.

3.98. imap_delim_chars

Type: string
Default: “/.”

This contains the list of characters which you would like to treat as folder separators for displaying IMAP paths. In particular it helps in using the “=” shortcut for your folder variable.

3.99. imap_headers

Type: string
Default: (empty)

Mutt requests these header fields in addition to the default headers (“Date:”, “From:”, “Subject:”, “To:”, “Cc:”, “Message-Id:”, “References:”, “Content-Type:”, “Content-Description:”, “In-Reply-To:”, “Reply-To:”, “Lines:”, “List-Post:”, “X-Label:”) from IMAP servers before displaying the index menu. You may want to add more headers for spam detection.

Note: This is a space separated list, items should be uppercase and not contain the colon, e.g. “X-BOGOSITY X-SPAM-STATUS” for the “X-Bogosity:” and “X-Spam-Status:” header fields.

3.100. imap_idle

Type: boolean
Default: no

When set, mutt will attempt to use the IMAP IDLE extension to check for new mail in the current mailbox. Some servers (dovecot was the inspiration for this option) react badly to mutt's implementation. If your connection seems to freeze up periodically, try unsetting this.

3.101. imap_keepalive

Type: number
Default: 900

This variable specifies the maximum amount of time in seconds that mutt will wait before polling open IMAP connections, to prevent the server from closing them before mutt has finished with them. The default is well within the RFC-specified minimum amount of time (30 minutes) before a server is allowed to do this, but in practice the RFC does get violated every now and then. Reduce this number if you find yourself getting disconnected from your IMAP server due to inactivity.

3.102. imap_list_subscribed

Type: boolean
Default: no

This variable configures whether IMAP folder browsing will look for only subscribed folders or all folders. This can be toggled in the IMAP browser with the <toggle-subscribed> function.

3.103. imap_login

Type: string
Default: (empty)

Your login name on the IMAP server.

This variable defaults to the value of $imap_user.

3.104. imap_pass

Type: string
Default: (empty)

Specifies the password for your IMAP account. If unset, Mutt will prompt you for your password when you invoke the <imap-fetch-mail> function or try to open an IMAP folder.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.105. imap_passive

Type: boolean
Default: yes

When set, mutt will not open new IMAP connections to check for new mail. Mutt will only check for new mail over existing IMAP connections. This is useful if you don't want to be prompted to user/password pairs on mutt invocation, or if opening the connection is slow.

3.106. imap_peek

Type: boolean
Default: yes

When set, mutt will avoid implicitly marking your mail as read whenever you fetch a message from the server. This is generally a good thing, but can make closing an IMAP folder somewhat slower. This option exists to appease speed freaks.

3.107. imap_pipeline_depth

Type: number
Default: 15

Controls the number of IMAP commands that may be queued up before they are sent to the server. A deeper pipeline reduces the amount of time mutt must wait for the server, and can make IMAP servers feel much more responsive. But not all servers correctly handle pipelined commands, so if you have problems you might want to try setting this variable to 0.

Note: Changes to this variable have no effect on open connections.

3.108. imap_servernoise

Type: boolean
Default: yes

When set, mutt will display warning messages from the IMAP server as error messages. Since these messages are often harmless, or generated due to configuration problems on the server which are out of the users' hands, you may wish to suppress them at some point.

3.109. imap_user

Type: string
Default: (empty)

The name of the user whose mail you intend to access on the IMAP server.

This variable defaults to your user name on the local machine.

3.110. implicit_autoview

Type: boolean
Default: no

If set to “yes”, mutt will look for a mailcap entry with the “copiousoutput” flag set for every MIME attachment it doesn't have an internal viewer defined for. If such an entry is found, mutt will use the viewer defined in that entry to convert the body part to text form.

3.111. include

Type: quadoption
Default: ask-yes

Controls whether or not a copy of the message(s) you are replying to is included in your reply.

3.112. include_onlyfirst

Type: boolean
Default: no

Controls whether or not Mutt includes only the first attachment of the message you are replying.

3.113. indent_string

Type: string
Default: “> ”

Specifies the string to prepend to each line of text quoted in a message to which you are replying. You are strongly encouraged not to change this value, as it tends to agitate the more fanatical netizens.

The value of this option is ignored if $text_flowed is set, too because the quoting mechanism is strictly defined for format=flowed.

This option is a format string, please see the description of $index_format for supported printf(3)-style sequences.

3.114. index_format

Type: string
Default: “%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s”

This variable allows you to customize the message index display to your personal taste.

“Format strings” are similar to the strings used in the C function printf(3) to format output (see the man page for more details). The following sequences are defined in Mutt:

%a address of the author
%A reply-to address (if present; otherwise: address of author)
%b filename of the original message folder (think mailbox)
%B the list to which the letter was sent, or else the folder name (%b).
%c number of characters (bytes) in the message
%C current message number
%d date and time of the message in the format specified by $date_format converted to sender's time zone
%D date and time of the message in the format specified by $date_format converted to the local time zone
%e current message number in thread
%E number of messages in current thread
%f sender (address + real name), either From: or Return-Path:
%F author name, or recipient name if the message is from you
%H spam attribute(s) of this message
%i message-id of the current message
%l number of lines in the message (does not work with maildir, mh, and possibly IMAP folders)
%L If an address in the “To:” or “Cc:” header field matches an address defined by the users “subscribe” command, this displays "To <list-name>", otherwise the same as %F.
%m total number of message in the mailbox
%M number of hidden messages if the thread is collapsed.
%N message score
%n author's real name (or address if missing)
%O original save folder where mutt would formerly have stashed the message: list name or recipient name if not sent to a list
%P progress indicator for the built-in pager (how much of the file has been displayed)
%s subject of the message
%S status of the message (“N”/“D”/“d”/“!”/“r”/*)
%t “To:” field (recipients)
%T the appropriate character from the $to_chars string
%u user (login) name of the author
%v first name of the author, or the recipient if the message is from you
%X number of attachments (please see the “attachments” section for possible speed effects)
%y “X-Label:” field, if present
%Y “X-Label:” field, if present, and (1) not at part of a thread tree, (2) at the top of a thread, or (3) “X-Label:” is different from preceding message's “X-Label:”.
%Z message status flags
%{fmt} the date and time of the message is converted to sender's time zone, and “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%[fmt] the date and time of the message is converted to the local time zone, and “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%(fmt) the local date and time when the message was received. “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%<fmt> the current local time. “fmt” is expanded by the library function strftime(3); a leading bang disables locales.
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

“Soft-fill” deserves some explanation: Normal right-justification will print everything to the left of the “%>”, displaying padding and whatever lies to the right only if there's room. By contrast, soft-fill gives priority to the right-hand side, guaranteeing space to display it and showing padding only if there's still room. If necessary, soft-fill will eat text leftwards to make room for rightward text.

Note that these expandos are supported in “save-hook”, “fcc-hook” and “fcc-save-hook”, too.

3.115. ispell

Type: path
Default: “ispell”

How to invoke ispell (GNU's spell-checking software).

3.116. keep_flagged

Type: boolean
Default: no

If set, read messages marked as flagged will not be moved from your spool mailbox to your $mbox mailbox, or as a result of a “mbox-hook” command.

3.117. locale

Type: string
Default: “C”

The locale used by strftime(3) to format dates. Legal values are the strings your system accepts for the locale environment variable $LC_TIME.

3.118. mail_check

Type: number
Default: 5

This variable configures how often (in seconds) mutt should look for new mail. Also see the $timeout variable.

3.119. mail_check_recent

Type: boolean
Default: yes

When set, Mutt will only notify you about new mail that has been received since the last time you opened the mailbox. When unset, Mutt will notify you if any new mail exists in the mailbox, regardless of whether you have visited it recently.

When $mark_old is set, Mutt does not consider the mailbox to contain new mail if only old messages exist.

3.120. mailcap_path

Type: string
Default: (empty)

This variable specifies which files to consult when attempting to display MIME bodies not directly supported by Mutt.

3.121. mailcap_sanitize

Type: boolean
Default: yes

If set, mutt will restrict possible characters in mailcap % expandos to a well-defined set of safe characters. This is the safe setting, but we are not sure it doesn't break some more advanced MIME stuff.

DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE DOING!

3.122. maildir_header_cache_verify

Type: boolean
Default: yes

Check for Maildir unaware programs other than mutt having modified maildir files when the header cache is in use. This incurs one stat(2) per message every time the folder is opened (which can be very slow for NFS folders).

3.123. maildir_trash

Type: boolean
Default: no

If set, messages marked as deleted will be saved with the maildir trashed flag instead of unlinked. Note: this only applies to maildir-style mailboxes. Setting it will have no effect on other mailbox types.

3.124. mark_old

Type: boolean
Default: yes

Controls whether or not mutt marks new unread messages as old if you exit a mailbox without reading them. With this option set, the next time you start mutt, the messages will show up with an “O” next to them in the index menu, indicating that they are old.

3.125. markers

Type: boolean
Default: yes

Controls the display of wrapped lines in the internal pager. If set, a “+” marker is displayed at the beginning of wrapped lines.

Also see the $smart_wrap variable.

3.126. mask

Type: regular expression
Default: “!^\.[^.]”

A regular expression used in the file browser, optionally preceded by the not operator “!”. Only files whose names match this mask will be shown. The match is always case-sensitive.

3.127. mbox

Type: path
Default: “~/mbox”

This specifies the folder into which read mail in your $spoolfile folder will be appended.

Also see the $move variable.

3.128. mbox_type

Type: folder magic
Default: mbox

The default mailbox type used when creating new folders. May be any of “mbox”, “MMDF”, “MH” and “Maildir”. This is overridden by the -m command-line option.

3.129. menu_context

Type: number
Default: 0

This variable controls the number of lines of context that are given when scrolling through menus. (Similar to $pager_context.)

3.130. menu_move_off

Type: boolean
Default: yes

When unset, the bottom entry of menus will never scroll up past the bottom of the screen, unless there are less entries than lines. When set, the bottom entry may move off the bottom.

3.131. menu_scroll

Type: boolean
Default: no

When set, menus will be scrolled up or down one line when you attempt to move across a screen boundary. If unset, the screen is cleared and the next or previous page of the menu is displayed (useful for slow links to avoid many redraws).

3.132. message_cache_clean

Type: boolean
Default: no

If set, mutt will clean out obsolete entries from the message cache when the mailbox is synchronized. You probably only want to set it every once in a while, since it can be a little slow (especially for large folders).

3.133. message_cachedir

Type: path
Default: (empty)

Set this to a directory and mutt will cache copies of messages from your IMAP and POP servers here. You are free to remove entries at any time.

When setting this variable to a directory, mutt needs to fetch every remote message only once and can perform regular expression searches as fast as for local folders.

Also see the $message_cache_clean variable.

3.134. message_format

Type: string
Default: “%s”

This is the string displayed in the “attachment” menu for attachments of type message/rfc822. For a full listing of defined printf(3)-like sequences see the section on $index_format.

3.135. meta_key

Type: boolean
Default: no

If set, forces Mutt to interpret keystrokes with the high bit (bit 8) set as if the user had pressed the Esc key and whatever key remains after having the high bit removed. For example, if the key pressed has an ASCII value of 0xf8, then this is treated as if the user had pressed Esc then “x”. This is because the result of removing the high bit from 0xf8 is 0x78, which is the ASCII character “x”.

3.136. metoo

Type: boolean
Default: no

If unset, Mutt will remove your address (see the “alternates” command) from the list of recipients when replying to a message.

3.137. mh_purge

Type: boolean
Default: no

When unset, mutt will mimic mh's behavior and rename deleted messages to ,<old file name> in mh folders instead of really deleting them. This leaves the message on disk but makes programs reading the folder ignore it. If the variable is set, the message files will simply be deleted.

This option is similar to $maildir_trash for Maildir folders.

3.138. mh_seq_flagged

Type: string
Default: “flagged”

The name of the MH sequence used for flagged messages.

3.139. mh_seq_replied

Type: string
Default: “replied”

The name of the MH sequence used to tag replied messages.

3.140. mh_seq_unseen

Type: string
Default: “unseen”

The name of the MH sequence used for unseen messages.

3.141. mime_forward

Type: quadoption
Default: no

When set, the message you are forwarding will be attached as a separate message/rfc822 MIME part instead of included in the main body of the message. This is useful for forwarding MIME messages so the receiver can properly view the message as it was delivered to you. If you like to switch between MIME and not MIME from mail to mail, set this variable to “ask-no” or “ask-yes”.

Also see $forward_decode and $mime_forward_decode.

3.142. mime_forward_decode

Type: boolean
Default: no

Controls the decoding of complex MIME messages into text/plain when forwarding a message while $mime_forward is set. Otherwise $forward_decode is used instead.

3.143. mime_forward_rest

Type: quadoption
Default: yes

When forwarding multiple attachments of a MIME message from the attachment menu, attachments which cannot be decoded in a reasonable manner will be attached to the newly composed message if this option is set.

3.144. mix_entry_format

Type: string
Default: “%4n %c %-16s %a”

This variable describes the format of a remailer line on the mixmaster chain selection screen. The following printf(3)-like sequences are supported:

%n The running number on the menu.
%c Remailer capabilities.
%s The remailer's short name.
%a The remailer's e-mail address.

3.145. mixmaster

Type: path
Default: “mixmaster”

This variable contains the path to the Mixmaster binary on your system. It is used with various sets of parameters to gather the list of known remailers, and to finally send a message through the mixmaster chain.

3.146. move

Type: quadoption
Default: no

Controls whether or not Mutt will move read messages from your spool mailbox to your $mbox mailbox, or as a result of a “mbox-hook” command.

3.147. narrow_tree

Type: boolean
Default: no

This variable, when set, makes the thread tree narrower, allowing deeper threads to fit on the screen.

3.148. net_inc

Type: number
Default: 10

Operations that expect to transfer a large amount of data over the network will update their progress every $net_inc kilobytes. If set to 0, no progress messages will be displayed.

See also $read_inc, $write_inc and $net_inc.

3.149. pager

Type: path
Default: “builtin”

This variable specifies which pager you would like to use to view messages. The value “builtin” means to use the built-in pager, otherwise this variable should specify the pathname of the external pager you would like to use.

Using an external pager may have some disadvantages: Additional keystrokes are necessary because you can't call mutt functions directly from the pager, and screen resizes cause lines longer than the screen width to be badly formatted in the help menu.

3.150. pager_context

Type: number
Default: 0

This variable controls the number of lines of context that are given when displaying the next or previous page in the internal pager. By default, Mutt will display the line after the last one on the screen at the top of the next page (0 lines of context).

This variable also specifies the amount of context given for search results. If positive, this many lines will be given before a match, if 0, the match will be top-aligned.

3.151. pager_format

Type: string
Default: “-%Z- %C/%m: %-20.20n   %s%*  -- (%P)”

This variable controls the format of the one-line message “status” displayed before each message in either the internal or an external pager. The valid sequences are listed in the $index_format section.

3.152. pager_index_lines

Type: number
Default: 0

Determines the number of lines of a mini-index which is shown when in the pager. The current message, unless near the top or bottom of the folder, will be roughly one third of the way down this mini-index, giving the reader the context of a few messages before and after the message. This is useful, for example, to determine how many messages remain to be read in the current thread. One of the lines is reserved for the status bar from the index, so a setting of 6 will only show 5 lines of the actual index. A value of 0 results in no index being shown. If the number of messages in the current folder is less than $pager_index_lines, then the index will only use as many lines as it needs.

3.153. pager_stop

Type: boolean
Default: no

When set, the internal-pager will not move to the next message when you are at the end of a message and invoke the <next-page> function.

3.154. pgp_auto_decode

Type: boolean
Default: no

If set, mutt will automatically attempt to decrypt traditional PGP messages whenever the user performs an operation which ordinarily would result in the contents of the message being operated on. For example, if the user displays a pgp-traditional message which has not been manually checked with the <check-traditional-pgp> function, mutt will automatically check the message for traditional pgp.

3.155. pgp_autoinline

Type: boolean
Default: no

This option controls whether Mutt generates old-style inline (traditional) PGP encrypted or signed messages under certain circumstances. This can be overridden by use of the pgp menu, when inline is not required.

Note that Mutt might automatically use PGP/MIME for messages which consist of more than a single MIME part. Mutt can be configured to ask before sending PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.156. pgp_check_exit

Type: boolean
Default: yes

If set, mutt will check the exit code of the PGP subprocess when signing or encrypting. A non-zero exit code means that the subprocess failed. (PGP only)

3.157. pgp_clearsign_command

Type: string
Default: (empty)

This format is used to create an old-style “clearsigned” PGP message. Note that the use of this format is strongly deprecated.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.158. pgp_decode_command

Type: string
Default: (empty)

This format strings specifies a command which is used to decode application/pgp attachments.

The PGP command formats have their own set of printf(3)-like sequences:

%p Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty string otherwise. Note: This may be used with a %? construct.
%f Expands to the name of a file containing a message.
%s Expands to the name of a file containing the signature part of a multipart/signed attachment when verifying it.
%a The value of $pgp_sign_as.
%r One or more key IDs.

For examples on how to configure these formats for the various versions of PGP which are floating around, see the pgp and gpg sample configuration files in the samples/ subdirectory which has been installed on your system alongside the documentation. (PGP only)

3.159. pgp_decrypt_command

Type: string
Default: (empty)

This command is used to decrypt a PGP encrypted message.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.160. pgp_encrypt_only_command

Type: string
Default: (empty)

This command is used to encrypt a body part without signing it.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.161. pgp_encrypt_sign_command

Type: string
Default: (empty)

This command is used to both sign and encrypt a body part.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.162. pgp_entry_format

Type: string
Default: “%4n %t%f %4l/0x%k %-4a %2c %u”

This variable allows you to customize the PGP key selection menu to your personal taste. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%n number
%k key id
%u user id
%a algorithm
%l key length
%f flags
%c capabilities
%t trust/validity of the key-uid association
%[<s>] date of the key where <s> is an strftime(3) expression

(PGP only)

3.163. pgp_export_command

Type: string
Default: (empty)

This command is used to export a public key from the user's key ring.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.164. pgp_getkeys_command

Type: string
Default: (empty)

This command is invoked whenever mutt will need public key information. Of the sequences supported by $pgp_decode_command, %r is the only printf(3)-like sequence used with this format. (PGP only)

3.165. pgp_good_sign

Type: regular expression
Default: (empty)

If you assign a text to this variable, then a PGP signature is only considered verified if the output from $pgp_verify_command contains the text. Use this variable if the exit code from the command is 0 even for bad signatures. (PGP only)

3.166. pgp_ignore_subkeys

Type: boolean
Default: yes

Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, the principal key will inherit the subkeys' capabilities. Unset this if you want to play interesting key selection games. (PGP only)

3.167. pgp_import_command

Type: string
Default: (empty)

This command is used to import a key from a message into the user's public key ring.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.168. pgp_list_pubring_command

Type: string
Default: (empty)

This command is used to list the public key ring's contents. The output format must be analogous to the one used by

gpg --list-keys --with-colons.

This format is also generated by the pgpring utility which comes with mutt.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.169. pgp_list_secring_command

Type: string
Default: (empty)

This command is used to list the secret key ring's contents. The output format must be analogous to the one used by:

gpg --list-keys --with-colons.

This format is also generated by the pgpring utility which comes with mutt.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.170. pgp_long_ids

Type: boolean
Default: no

If set, use 64 bit PGP key IDs, if unset use the normal 32 bit key IDs. (PGP only)

3.171. pgp_mime_auto

Type: quadoption
Default: ask-yes

This option controls whether Mutt will prompt you for automatically sending a (signed/encrypted) message using PGP/MIME when inline (traditional) fails (for any reason).

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.172. pgp_replyinline

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to create an inline (traditional) message when replying to a message which is PGP encrypted/signed inline. This can be overridden by use of the pgp menu, when inline is not required. This option does not automatically detect if the (replied-to) message is inline; instead it relies on Mutt internals for previously checked/flagged messages.

Note that Mutt might automatically use PGP/MIME for messages which consist of more than a single MIME part. Mutt can be configured to ask before sending PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.173. pgp_retainable_sigs

Type: boolean
Default: no

If set, signed and encrypted messages will consist of nested multipart/signed and multipart/encrypted body parts.

This is useful for applications like encrypted and signed mailing lists, where the outer layer (multipart/encrypted) can be easily removed, while the inner multipart/signed part is retained. (PGP only)

3.174. pgp_show_unusable

Type: boolean
Default: yes

If set, mutt will display non-usable keys on the PGP key selection menu. This includes keys which have been revoked, have expired, or have been marked as “disabled” by the user. (PGP only)

3.175. pgp_sign_as

Type: string
Default: (empty)

If you have more than one key pair, this option allows you to specify which of your private keys to use. It is recommended that you use the keyid form to specify your key (e.g. 0x00112233). (PGP only)

3.176. pgp_sign_command

Type: string
Default: (empty)

This command is used to create the detached PGP signature for a multipart/signed PGP/MIME body part.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.177. pgp_sort_keys

Type: sort order
Default: address

Specifies how the entries in the pgp menu are sorted. The following are legal values:

address sort alphabetically by user id
keyid sort alphabetically by key id
date sort by key creation date
trust sort by the trust of the key

If you prefer reverse order of the above values, prefix it with “reverse-”. (PGP only)

3.178. pgp_strict_enc

Type: boolean
Default: yes

If set, Mutt will automatically encode PGP/MIME signed messages as quoted-printable. Please note that unsetting this variable may lead to problems with non-verifyable PGP signatures, so only change this if you know what you are doing. (PGP only)

3.179. pgp_timeout

Type: number
Default: 300

The number of seconds after which a cached passphrase will expire if not used. (PGP only)

3.180. pgp_use_gpg_agent

Type: boolean
Default: no

If set, mutt will use a possibly-running gpg-agent(1) process. (PGP only)

3.181. pgp_verify_command

Type: string
Default: (empty)

This command is used to verify PGP signatures.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.182. pgp_verify_key_command

Type: string
Default: (empty)

This command is used to verify key information from the key selection menu.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.183. pipe_decode

Type: boolean
Default: no

Used in connection with the <pipe-message> command. When unset, Mutt will pipe the messages without any preprocessing. When set, Mutt will weed headers and will attempt to decode the messages first.

3.184. pipe_sep

Type: string
Default: “\n”

The separator to add between messages when piping a list of tagged messages to an external Unix command.

3.185. pipe_split

Type: boolean
Default: no

Used in connection with the <pipe-message> function following <tag-prefix>. If this variable is unset, when piping a list of tagged messages Mutt will concatenate the messages and will pipe them all concatenated. When set, Mutt will pipe the messages one by one. In both cases the messages are piped in the current sorted order, and the $pipe_sep separator is added after each message.

3.186. pop_auth_try_all

Type: boolean
Default: yes

If set, Mutt will try all available authentication methods. When unset, Mutt will only fall back to other authentication methods if the previous methods are unavailable. If a method is available but authentication fails, Mutt will not connect to the POP server.

3.187. pop_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an POP server, in the order mutt should try them. Authentication methods are either “user”, “apop” or any SASL mechanism, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If this option is unset (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set pop_authenticators="digest-md5:apop:user"

3.188. pop_checkinterval

Type: number
Default: 60

This variable configures how often (in seconds) mutt should look for new mail in the currently selected mailbox if it is a POP mailbox.

3.189. pop_delete

Type: quadoption
Default: ask-no

If set, Mutt will delete successfully downloaded messages from the POP server when using the <fetch-mail> function. When unset, Mutt will download messages but also leave them on the POP server.

3.190. pop_host

Type: string
Default: (empty)

The name of your POP server for the <fetch-mail> function. You can also specify an alternative port, username and password, i.e.:

[pop[s]://][username[:password]@]popserver[:port]

where “[...]” denotes an optional part.

3.191. pop_last

Type: boolean
Default: no

If this variable is set, mutt will try to use the “LAST” POP command for retrieving only unread messages from the POP server when using the <fetch-mail> function.

3.192. pop_pass

Type: string
Default: (empty)

Specifies the password for your POP account. If unset, Mutt will prompt you for your password when you open a POP mailbox.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.193. pop_reconnect

Type: quadoption
Default: ask-yes

Controls whether or not Mutt will try to reconnect to the POP server if the connection is lost.

3.194. pop_user

Type: string
Default: (empty)

Your login name on the POP server.

This variable defaults to your user name on the local machine.

3.195. post_indent_string

Type: string
Default: (empty)

Similar to the $attribution variable, Mutt will append this string after the inclusion of a message which is being replied to.

3.196. postpone

Type: quadoption
Default: ask-yes

Controls whether or not messages are saved in the $postponed mailbox when you elect not to send immediately.

Also see the $recall variable.

3.197. postponed

Type: path
Default: “~/postponed”

Mutt allows you to indefinitely “postpone sending a message” which you are editing. When you choose to postpone a message, Mutt saves it in the mailbox specified by this variable.

Also see the $postpone variable.

3.198. preconnect

Type: string
Default: (empty)

If set, a shell command to be executed if mutt fails to establish a connection to the server. This is useful for setting up secure connections, e.g. with ssh(1). If the command returns a nonzero status, mutt gives up opening the server. Example:

set preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net \
sleep 20 < /dev/null > /dev/null"

Mailbox “foo” on “mailhost.net” can now be reached as “{localhost:1234}foo”.

Note: For this example to work, you must be able to log in to the remote machine without having to enter a password.

3.199. print

Type: quadoption
Default: ask-no

Controls whether or not Mutt really prints messages. This is set to “ask-no” by default, because some people accidentally hit “p” often.

3.200. print_command

Type: path
Default: “lpr”

This specifies the command pipe that should be used to print messages.

3.201. print_decode

Type: boolean
Default: yes

Used in connection with the <print-message> command. If this option is set, the message is decoded before it is passed to the external command specified by $print_command. If this option is unset, no processing will be applied to the message when printing it. The latter setting may be useful if you are using some advanced printer filter which is able to properly format e-mail messages for printing.

3.202. print_split

Type: boolean
Default: no

Used in connection with the <print-message> command. If this option is set, the command specified by $print_command is executed once for each message which is to be printed. If this option is unset, the command specified by $print_command is executed only once, and all the messages are concatenated, with a form feed as the message separator.

Those who use the enscript(1) program's mail-printing mode will most likely want to set this option.

3.203. prompt_after

Type: boolean
Default: yes

If you use an external $pager, setting this variable will cause Mutt to prompt you for a command when the pager exits rather than returning to the index menu. If unset, Mutt will return to the index menu when the external pager exits.

3.204. query_command

Type: path
Default: (empty)

This specifies the command Mutt will use to make external address queries. The string may contain a “%s”, which will be substituted with the query string the user types. Mutt will add quotes around the string substituted for “%s” automatically according to shell quoting rules, so you should avoid adding your own. If no “%s” is found in the string, Mutt will append the user's query to the end of the string. See “query” for more information.

3.205. query_format

Type: string
Default: “%4c %t %-25.25a %-25.25n %?e?(%e)?”

This variable describes the format of the “query” menu. The following printf(3)-style sequences are understood:

%a destination address
%c current entry number
%e extra information *
%n destination name
%t “*” if current entry is tagged, a space otherwise
%>X right justify the rest of the string and pad with “X”
%|X pad to the end of the line with “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

* = can be optionally printed if nonzero, see the $status_format documentation.

3.206. quit

Type: quadoption
Default: yes

This variable controls whether “quit” and “exit” actually quit from mutt. If this option is set, they do quit, if it is unset, they have no effect, and if it is set to ask-yes or ask-no, you are prompted for confirmation when you try to quit.

3.207. quote_regexp

Type: regular expression
Default: “^([ \t]*[|>:}#])+”

A regular expression used in the internal pager to determine quoted sections of text in the body of a message. Quoted text may be filtered out using the <toggle-quoted> command, or colored according to the “color quoted” family of directives.

Higher levels of quoting may be colored differently (“color quoted1”, “color quoted2”, etc.). The quoting level is determined by removing the last character from the matched text and recursively reapplying the regular expression until it fails to produce a match.

Match detection may be overridden by the $smileys regular expression.

3.208. read_inc

Type: number
Default: 10

If set to a value greater than 0, Mutt will display which message it is currently on when reading a mailbox or when performing search actions such as search and limit. The message is printed after this many messages have been read or searched (e.g., if set to 25, Mutt will print a message when it is at message 25, and then again when it gets to message 50). This variable is meant to indicate progress when reading or searching large mailboxes which may take some time. When set to 0, only a single message will appear before the reading the mailbox.

Also see the $write_inc, $net_inc and $time_inc variables and the “tuning” section of the manual for performance considerations.

3.209. read_only

Type: boolean
Default: no

If set, all folders are opened in read-only mode.

3.210. realname

Type: string
Default: (empty)

This variable specifies what “real” or “personal” name should be used when sending messages.

By default, this is the GECOS field from /etc/passwd. Note that this variable will not be used when the user has set a real name in the $from variable.

3.211. recall

Type: quadoption
Default: ask-yes

Controls whether or not Mutt recalls postponed messages when composing a new message.

Setting this variable to is not generally useful, and thus not recommended.

Also see $postponed variable.

3.212. record

Type: path
Default: “~/sent”

This specifies the file into which your outgoing messages should be appended. (This is meant as the primary method for saving a copy of your messages, but another way to do this is using the “my_hdr” command to create a “Bcc:” field with your email address in it.)

The value of $record is overridden by the $force_name and $save_name variables, and the “fcc-hook” command.

3.213. reply_regexp

Type: regular expression
Default: “^(re([\[0-9\]+])*|aw):[ \t]*”

A regular expression used to recognize reply messages when threading and replying. The default value corresponds to the English "Re:" and the German "Aw:".

3.214. reply_self

Type: boolean
Default: no

If unset and you are replying to a message sent by you, Mutt will assume that you want to reply to the recipients of that message rather than to yourself.

Also see the “alternates” command.

3.215. reply_to

Type: quadoption
Default: ask-yes

If set, when replying to a message, Mutt will use the address listed in the Reply-to: header as the recipient of the reply. If unset, it will use the address in the From: header field instead. This option is useful for reading a mailing list that sets the Reply-To: header field to the list address and you want to send a private message to the author of a message.

3.216. resolve

Type: boolean
Default: yes

When set, the cursor will be automatically advanced to the next (possibly undeleted) message whenever a command that modifies the current message is executed.

3.217. reverse_alias

Type: boolean
Default: no

This variable controls whether or not Mutt will display the “personal” name from your aliases in the index menu if it finds an alias that matches the message's sender. For example, if you have the following alias:

alias juser abd30425@somewhere.net (Joe User)

and then you receive mail which contains the following header:

From: abd30425@somewhere.net

It would be displayed in the index menu as “Joe User” instead of “abd30425@somewhere.net.” This is useful when the person's e-mail address is not human friendly.

3.218. reverse_name

Type: boolean
Default: no

It may sometimes arrive that you receive mail to a certain machine, move the messages to another machine, and reply to some the messages from there. If this variable is set, the default From: line of the reply messages is built using the address where you received the messages you are replying to if that address matches your “alternates”. If the variable is unset, or the address that would be used doesn't match your “alternates”, the From: line will use your address on the current machine.

Also see the “alternates” command.

3.219. reverse_realname

Type: boolean
Default: yes

This variable fine-tunes the behavior of the $reverse_name feature. When it is set, mutt will use the address from incoming messages as-is, possibly including eventual real names. When it is unset, mutt will override any such real names with the setting of the $realname variable.

3.220. rfc2047_parameters

Type: boolean
Default: no

When this variable is set, Mutt will decode RFC2047-encoded MIME parameters. You want to set this variable when mutt suggests you to save attachments to files named like:

=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=

When this variable is set interactively, the change won't be active until you change folders.

Note that this use of RFC2047's encoding is explicitly prohibited by the standard, but nevertheless encountered in the wild.

Also note that setting this parameter will not have the effect that mutt generates this kind of encoding. Instead, mutt will unconditionally use the encoding specified in RFC2231.

3.221. save_address

Type: boolean
Default: no

If set, mutt will take the sender's full address when choosing a default folder for saving a mail. If $save_name or $force_name is set too, the selection of the Fcc folder will be changed as well.

3.222. save_empty

Type: boolean
Default: yes

When unset, mailboxes which contain no saved messages will be removed when closed (the exception is $spoolfile which is never removed). If set, mailboxes are never removed.

Note: This only applies to mbox and MMDF folders, Mutt does not delete MH and Maildir directories.

3.223. save_history

Type: number
Default: 0

This variable controls the size of the history (per category) saved in the $history_file file.

3.224. save_name

Type: boolean
Default: no

This variable controls how copies of outgoing messages are saved. When set, a check is made to see if a mailbox specified by the recipient address exists (this is done by searching for a mailbox in the $folder directory with the username part of the recipient address). If the mailbox exists, the outgoing message will be saved to that mailbox, otherwise the message is saved to the $record mailbox.

Also see the $force_name variable.

3.225. score

Type: boolean
Default: yes

When this variable is unset, scoring is turned off. This can be useful to selectively disable scoring for certain folders when the $score_threshold_delete variable and related are used.

3.226. score_threshold_delete

Type: number
Default: -1

Messages which have been assigned a score equal to or lower than the value of this variable are automatically marked for deletion by mutt. Since mutt scores are always greater than or equal to zero, the default setting of this variable will never mark a message for deletion.

3.227. score_threshold_flag

Type: number
Default: 9999

Messages which have been assigned a score greater than or equal to this variable's value are automatically marked "flagged".

3.228. score_threshold_read

Type: number
Default: -1

Messages which have been assigned a score equal to or lower than the value of this variable are automatically marked as read by mutt. Since mutt scores are always greater than or equal to zero, the default setting of this variable will never mark a message read.

3.229. search_context

Type: number
Default: 0

For the pager, this variable specifies the number of lines shown before search results. By default, search results will be top-aligned.

3.230. send_charset

Type: string
Default: “us-ascii:iso-8859-1:utf-8”

A colon-delimited list of character sets for outgoing messages. Mutt will use the first character set into which the text can be converted exactly. If your $charset is not “iso-8859-1” and recipients may not understand “UTF-8”, it is advisable to include in the list an appropriate widely used standard character set (such as “iso-8859-2”, “koi8-r” or “iso-2022-jp”) either instead of or after “iso-8859-1”.

In case the text cannot be converted into one of these exactly, mutt uses $charset as a fallback.

3.231. sendmail

Type: path
Default: “/usr/sbin/sendmail -oem -oi”

Specifies the program and arguments used to deliver mail sent by Mutt. Mutt expects that the specified program interprets additional arguments as recipient addresses.

3.232. sendmail_wait

Type: number
Default: 0

Specifies the number of seconds to wait for the $sendmail process to finish before giving up and putting delivery in the background.

Mutt interprets the value of this variable as follows:

>0 number of seconds to wait for sendmail to finish before continuing
0 wait forever for sendmail to finish
<0 always put sendmail in the background without waiting

Note that if you specify a value other than 0, the output of the child process will be put in a temporary file. If there is some error, you will be informed as to where to find the output.

3.233. shell

Type: path
Default: (empty)

Command to use when spawning a subshell. By default, the user's login shell from /etc/passwd is used.

3.234. sig_dashes

Type: boolean
Default: yes

If set, a line containing “-- ” (note the trailing space) will be inserted before your $signature. It is strongly recommended that you not unset this variable unless your signature contains just your name. The reason for this is because many software packages use “-- \n” to detect your signature. For example, Mutt has the ability to highlight the signature in a different color in the built-in pager.

3.235. sig_on_top

Type: boolean
Default: no

If set, the signature will be included before any quoted or forwarded text. It is strongly recommended that you do not set this variable unless you really know what you are doing, and are prepared to take some heat from netiquette guardians.

3.236. signature

Type: path
Default: “~/.signature”

Specifies the filename of your signature, which is appended to all outgoing messages. If the filename ends with a pipe (“|”), it is assumed that filename is a shell command and input should be read from its standard output.

3.237. simple_search

Type: string
Default: “~f %s | ~s %s”

Specifies how Mutt should expand a simple search into a real search pattern. A simple search is one that does not contain any of the “~” pattern operators. See “patterns” for more information on search patterns.

For example, if you simply type “joe” at a search or limit prompt, Mutt will automatically expand it to the value specified by this variable by replacing “%s” with the supplied string. For the default value, “joe” would be expanded to: “~f joe | ~s joe”.

3.238. sleep_time

Type: number
Default: 1

Specifies time, in seconds, to pause while displaying certain informational messages, while moving from folder to folder and after expunging messages from the current folder. The default is to pause one second, so a value of zero for this option suppresses the pause.

3.239. smart_wrap

Type: boolean
Default: yes

Controls the display of lines longer than the screen width in the internal pager. If set, long lines are wrapped at a word boundary. If unset, lines are simply wrapped at the screen edge. Also see the $markers variable.

3.240. smileys

Type: regular expression
Default: “(>From )|(:[-^]?[][)(><}{|/DP])”

The pager uses this variable to catch some common false positives of $quote_regexp, most notably smileys and not consider a line quoted text if it also matches $smileys. This mostly happens at the beginning of a line.

3.241. smime_ask_cert_label

Type: boolean
Default: yes

This flag controls whether you want to be asked to enter a label for a certificate about to be added to the database or not. It is set by default. (S/MIME only)

3.242. smime_ca_location

Type: path
Default: (empty)

This variable contains the name of either a directory, or a file which contains trusted certificates for use with OpenSSL. (S/MIME only)

3.243. smime_certificates

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, mutt has to handle storage and retrieval of keys by itself. This is very basic right now, and keys and certificates are stored in two different directories, both named as the hash-value retrieved from OpenSSL. There is an index file which contains mailbox-address keyid pairs, and which can be manually edited. This option points to the location of the certificates. (S/MIME only)

3.244. smime_decrypt_command

Type: string
Default: (empty)

This format string specifies a command which is used to decrypt application/x-pkcs7-mime attachments.

The OpenSSL command formats have their own set of printf(3)-like sequences similar to PGP's:

%f Expands to the name of a file containing a message.
%s Expands to the name of a file containing the signature part of a multipart/signed attachment when verifying it.
%k The key-pair specified with $smime_default_key
%c One or more certificate IDs.
%a The algorithm used for encryption.
%C CA location: Depending on whether $smime_ca_location points to a directory or file, this expands to “-CApath $smime_ca_location” or “-CAfile $smime_ca_location”.

For examples on how to configure these formats, see the smime.rc in the samples/ subdirectory which has been installed on your system alongside the documentation. (S/MIME only)

3.245. smime_decrypt_use_default_key

Type: boolean
Default: yes

If set (default) this tells mutt to use the default key for decryption. Otherwise, if managing multiple certificate-key-pairs, mutt will try to use the mailbox-address to determine the key to use. It will ask you to supply a key, if it can't find one. (S/MIME only)

3.246. smime_default_key

Type: string
Default: (empty)

This is the default key-pair to use for signing. This must be set to the keyid (the hash-value that OpenSSL generates) to work properly (S/MIME only)

3.247. smime_encrypt_command

Type: string
Default: (empty)

This command is used to create encrypted S/MIME messages.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.248. smime_encrypt_with

Type: string
Default: (empty)

This sets the algorithm that should be used for encryption. Valid choices are “des”, “des3”, “rc2-40”, “rc2-64”, “rc2-128”. If unset, “3des” (TripleDES) is used. (S/MIME only)

3.249. smime_get_cert_command

Type: string
Default: (empty)

This command is used to extract X509 certificates from a PKCS7 structure.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.250. smime_get_cert_email_command

Type: string
Default: (empty)

This command is used to extract the mail address(es) used for storing X509 certificates, and for verification purposes (to check whether the certificate was issued for the sender's mailbox).

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.251. smime_get_signer_cert_command

Type: string
Default: (empty)

This command is used to extract only the signers X509 certificate from a S/MIME signature, so that the certificate's owner may get compared to the email's “From:” field.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.252. smime_import_cert_command

Type: string
Default: (empty)

This command is used to import a certificate via smime_keys.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.253. smime_is_default

Type: boolean
Default: no

The default behavior of mutt is to use PGP on all auto-sign/encryption operations. To override and to use OpenSSL instead this must be set. However, this has no effect while replying, since mutt will automatically select the same application that was used to sign/encrypt the original message. (Note that this variable can be overridden by unsetting $crypt_autosmime.) (S/MIME only)

3.254. smime_keys

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, mutt has to handle storage and retrieval of keys/certs by itself. This is very basic right now, and stores keys and certificates in two different directories, both named as the hash-value retrieved from OpenSSL. There is an index file which contains mailbox-address keyid pair, and which can be manually edited. This option points to the location of the private keys. (S/MIME only)

3.255. smime_pk7out_command

Type: string
Default: (empty)

This command is used to extract PKCS7 structures of S/MIME signatures, in order to extract the public X509 certificate(s).

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.256. smime_sign_command

Type: string
Default: (empty)

This command is used to created S/MIME signatures of type multipart/signed, which can be read by all mail clients.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.257. smime_sign_opaque_command

Type: string
Default: (empty)

This command is used to created S/MIME signatures of type application/x-pkcs7-signature, which can only be handled by mail clients supporting the S/MIME extension.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.258. smime_timeout

Type: number
Default: 300

The number of seconds after which a cached passphrase will expire if not used. (S/MIME only)

3.259. smime_verify_command

Type: string
Default: (empty)

This command is used to verify S/MIME signatures of type multipart/signed.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.260. smime_verify_opaque_command

Type: string
Default: (empty)

This command is used to verify S/MIME signatures of type application/x-pkcs7-mime.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.261. smtp_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an SMTP server, in the order mutt should try them. Authentication methods are any SASL mechanism, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If it is “unset” (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set smtp_authenticators="digest-md5:cram-md5"

3.262. smtp_pass

Type: string
Default: (empty)

Specifies the password for your SMTP account. If unset, Mutt will prompt you for your password when you first send mail via SMTP. See $smtp_url to configure mutt to send mail via SMTP.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.263. smtp_url

Type: string
Default: (empty)

Defines the SMTP smarthost where sent messages should relayed for delivery. This should take the form of an SMTP URL, e.g.:

smtp[s]://[user[:pass]@]host[:port]

where “[...]” denotes an optional part. Setting this variable overrides the value of the $sendmail variable.

3.264. sort

Type: sort order
Default: date

Specifies how to sort messages in the “index” menu. Valid values are:

  • date or date-sent

  • date-received

  • from

  • mailbox-order (unsorted)

  • score

  • size

  • spam

  • subject

  • threads

  • to

You may optionally use the “reverse-” prefix to specify reverse sorting order (example: “set sort=reverse-date-sent”).

3.265. sort_alias

Type: sort order
Default: alias

Specifies how the entries in the “alias” menu are sorted. The following are legal values:

  • address (sort alphabetically by email address)

  • alias (sort alphabetically by alias name)

  • unsorted (leave in order specified in .muttrc)

3.266. sort_aux

Type: sort order
Default: date

When sorting by threads, this variable controls how threads are sorted in relation to other threads, and how the branches of the thread trees are sorted. This can be set to any value that $sort can, except “threads” (in that case, mutt will just use “date-sent”). You can also specify the “last-” prefix in addition to the “reverse-” prefix, but “last-” must come after “reverse-”. The “last-” prefix causes messages to be sorted against its siblings by which has the last descendant, using the rest of $sort_aux as an ordering. For instance,

set sort_aux=last-date-received

would mean that if a new message is received in a thread, that thread becomes the last one displayed (or the first, if you have “set sort=reverse-threads”.)

Note: For reversed $sort order $sort_aux is reversed again (which is not the right thing to do, but kept to not break any existing configuration setting).

3.267. sort_browser

Type: sort order
Default: alpha

Specifies how to sort entries in the file browser. By default, the entries are sorted alphabetically. Valid values:

  • alpha (alphabetically)

  • date

  • size

  • unsorted

You may optionally use the “reverse-” prefix to specify reverse sorting order (example: “set sort_browser=reverse-date”).

3.268. sort_re

Type: boolean
Default: yes

This variable is only useful when sorting by threads with $strict_threads unset. In that case, it changes the heuristic mutt uses to thread messages by subject. With $sort_re set, mutt will only attach a message as the child of another message by subject if the subject of the child message starts with a substring matching the setting of $reply_regexp. With $sort_re unset, mutt will attach the message whether or not this is the case, as long as the non-$reply_regexp parts of both messages are identical.

3.269. spam_separator

Type: string
Default: “,”

This variable controls what happens when multiple spam headers are matched: if unset, each successive header will overwrite any previous matches value for the spam label. If set, each successive match will append to the previous, using this variable's value as a separator.

3.270. spoolfile

Type: path
Default: (empty)

If your spool mailbox is in a non-default place where Mutt cannot find it, you can specify its location with this variable. Mutt will initially set this variable to the value of the environment variable $MAIL or $MAILDIR if either is defined.

3.271. ssl_ca_certificates_file

Type: path
Default: (empty)

This variable specifies a file containing trusted CA certificates. Any server certificate that is signed with one of these CA certificates is also automatically accepted.

Example:

set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt

3.272. ssl_client_cert

Type: path
Default: (empty)

The file containing a client certificate and its associated private key.

3.273. ssl_force_tls

Type: boolean
Default: no

If this variable is set, Mutt will require that all connections to remote servers be encrypted. Furthermore it will attempt to negotiate TLS even if the server does not advertise the capability, since it would otherwise have to abort the connection anyway. This option supersedes $ssl_starttls.

3.274. ssl_min_dh_prime_bits

Type: number
Default: 0

This variable specifies the minimum acceptable prime size (in bits) for use in any Diffie-Hellman key exchange. A value of 0 will use the default from the GNUTLS library.

3.275. ssl_starttls

Type: quadoption
Default: yes

If set (the default), mutt will attempt to use STARTTLS on servers advertising the capability. When unset, mutt will not attempt to use STARTTLS regardless of the server's capabilities.

3.276. ssl_use_sslv2

Type: boolean
Default: no

This variable specifies whether to attempt to use SSLv2 in the SSL authentication process.

3.277. ssl_use_sslv3

Type: boolean
Default: yes

This variable specifies whether to attempt to use SSLv3 in the SSL authentication process.

3.278. ssl_use_tlsv1

Type: boolean
Default: yes

This variable specifies whether to attempt to use TLSv1 in the SSL authentication process.

3.279. ssl_usesystemcerts

Type: boolean
Default: yes

If set to yes, mutt will use CA certificates in the system-wide certificate store when checking if a server certificate is signed by a trusted CA.

3.280. ssl_verify_dates

Type: boolean
Default: yes

If set (the default), mutt will not automatically accept a server certificate that is either not yet valid or already expired. You should only unset this for particular known hosts, using the <account-hook> function.

3.281. ssl_verify_host

Type: boolean
Default: yes

If set (the default), mutt will not automatically accept a server certificate whose host name does not match the host used in your folder URL. You should only unset this for particular known hosts, using the <account-hook> function.

3.282. status_chars

Type: string
Default: “-*%A”

Controls the characters used by the “%r” indicator in $status_format. The first character is used when the mailbox is unchanged. The second is used when the mailbox has been changed, and it needs to be resynchronized. The third is used if the mailbox is in read-only mode, or if the mailbox will not be written when exiting that mailbox (You can toggle whether to write changes to a mailbox with the <toggle-write> operation, bound by default to “%”). The fourth is used to indicate that the current folder has been opened in attach- message mode (Certain operations like composing a new mail, replying, forwarding, etc. are not permitted in this mode).

3.283. status_format

Type: string
Default: “-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---”

Controls the format of the status line displayed in the “index” menu. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%b number of mailboxes with new mail *
%d number of deleted messages *
%f the full pathname of the current mailbox
%F number of flagged messages *
%h local hostname
%l size (in bytes) of the current mailbox *
%L size (in bytes) of the messages shown (i.e., which match the current limit) *
%m the number of messages in the mailbox *
%M the number of messages shown (i.e., which match the current limit) *
%n number of new messages in the mailbox *
%o number of old unread messages *
%p number of postponed messages *
%P percentage of the way through the index
%r modified/read-only/won't-write/attach-message indicator, according to $status_chars
%s current sorting mode ($sort)
%S current aux sorting method ($sort_aux)
%t number of tagged messages *
%u number of unread messages *
%v Mutt version string
%V currently active limit pattern, if any *
%>X right justify the rest of the string and pad with “X”
%|X pad to the end of the line with “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

* = can be optionally printed if nonzero

Some of the above sequences can be used to optionally print a string if their value is nonzero. For example, you may only want to see the number of flagged messages if such messages exist, since zero is not particularly meaningful. To optionally print a string based upon one of the above sequences, the following construct is used:

%?<sequence_char>?<optional_string>?

where sequence_char is a character from the table above, and optional_string is the string you would like printed if sequence_char is nonzero. optional_string may contain other sequences as well as normal text, but you may not nest optional strings.

Here is an example illustrating how to optionally print the number of new messages in a mailbox:

%?n?%n new messages.?

You can also switch between two strings using the following construct:

%?<sequence_char>?<if_string>&<else_string>?

If the value of sequence_char is non-zero, if_string will be expanded, otherwise else_string will be expanded.

You can force the result of any printf(3)-like sequence to be lowercase by prefixing the sequence character with an underscore (“_”) sign. For example, if you want to display the local hostname in lowercase, you would use: “%_h”.

If you prefix the sequence character with a colon (“:”) character, mutt will replace any dots in the expansion by underscores. This might be helpful with IMAP folders that don't like dots in folder names.

3.284. status_on_top

Type: boolean
Default: no

Setting this variable causes the “status bar” to be displayed on the first line of the screen rather than near the bottom. If $help is set, too it'll be placed at the bottom.

3.285. strict_threads

Type: boolean
Default: no

If set, threading will only make use of the “In-Reply-To” and “References:” fields when you $sort by message threads. By default, messages with the same subject are grouped together in “pseudo threads.”. This may not always be desirable, such as in a personal mailbox where you might have several unrelated messages with the subjects like “hi” which will get grouped together. See also $sort_re for a less drastic way of controlling this behavior.

3.286. suspend

Type: boolean
Default: yes

When unset, mutt won't stop when the user presses the terminal's susp key, usually “^Z”. This is useful if you run mutt inside an xterm using a command like “xterm -e mutt”.

3.287. text_flowed

Type: boolean
Default: no

When set, mutt will generate “format=flowed” bodies with a content type of “text/plain; format=flowed”. This format is easier to handle for some mailing software, and generally just looks like ordinary text. To actually make use of this format's features, you'll need support in your editor.

Note that $indent_string is ignored when this option is set.

3.288. thorough_search

Type: boolean
Default: yes

Affects the ~b and ~h search operations described in section “patterns”. If set, the headers and body/attachments of messages to be searched are decoded before searching. If unset, messages are searched as they appear in the folder.

Users searching attachments or for non-ASCII characters should set this value because decoding also includes MIME parsing/decoding and possible character set conversions. Otherwise mutt will attempt to match against the raw message received (for example quoted-printable encoded or with encoded headers) which may lead to incorrect search results.

3.289. thread_received

Type: boolean
Default: no

When set, mutt uses the date received rather than the date sent to thread messages by subject.

3.290. tilde

Type: boolean
Default: no

When set, the internal-pager will pad blank lines to the bottom of the screen with a tilde (“~”).

3.291. time_inc

Type: number
Default: 0

Along with $read_inc, $write_inc, and $net_inc, this variable controls the frequency with which progress updates are displayed. It suppresses updates less than $time_inc milliseconds apart. This can improve throughput on systems with slow terminals, or when running mutt on a remote system.

Also see the “tuning” section of the manual for performance considerations.

3.292. timeout

Type: number
Default: 600

When Mutt is waiting for user input either idling in menus or in an interactive prompt, Mutt would block until input is present. Depending on the context, this would prevent certain operations from working, like checking for new mail or keeping an IMAP connection alive.

This variable controls how many seconds Mutt will at most wait until it aborts waiting for input, performs these operations and continues to wait for input.

A value of zero or less will cause Mutt to never time out.

3.293. tmpdir

Type: path
Default: (empty)

This variable allows you to specify where Mutt will place its temporary files needed for displaying and composing messages. If this variable is not set, the environment variable $TMPDIR is used. If $TMPDIR is not set then “/tmp” is used.

3.294. to_chars

Type: string
Default: “ +TCFL”

Controls the character used to indicate mail addressed to you. The first character is the one used when the mail is not addressed to your address. The second is used when you are the only recipient of the message. The third is when your address appears in the “To:” header field, but you are not the only recipient of the message. The fourth character is used when your address is specified in the “Cc:” header field, but you are not the only recipient. The fifth character is used to indicate mail that was sent by you. The sixth character is used to indicate when a mail was sent to a mailing-list you subscribe to.

3.295. tunnel

Type: string
Default: (empty)

Setting this variable will cause mutt to open a pipe to a command instead of a raw socket. You may be able to use this to set up preauthenticated connections to your IMAP/POP3/SMTP server. Example:

set tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"

Note: For this example to work you must be able to log in to the remote machine without having to enter a password.

When set, Mutt uses the tunnel for all remote connections. Please see “account-hook” in the manual for how to use different tunnel commands per connection.

3.296. uncollapse_jump

Type: boolean
Default: no

When set, Mutt will jump to the next unread message, if any, when the current thread is uncollapsed.

3.297. use_8bitmime

Type: boolean
Default: no

Warning: do not set this variable unless you are using a version of sendmail which supports the -B8BITMIME flag (such as sendmail 8.8.x) or you may not be able to send mail.

When set, Mutt will invoke $sendmail with the -B8BITMIME flag when sending 8-bit messages to enable ESMTP negotiation.

3.298. use_domain

Type: boolean
Default: yes

When set, Mutt will qualify all local addresses (ones without the “@host” portion) with the value of $hostname. If unset, no addresses will be qualified.

3.299. use_envelope_from

Type: boolean
Default: no

When set, mutt will set the envelope sender of the message. If $envelope_from_address is set, it will be used as the sender address. If unset, mutt will attempt to derive the sender from the “From:” header.

Note that this information is passed to sendmail command using the -f command line switch. Therefore setting this option is not useful if the $sendmail variable already contains -f or if the executable pointed to by $sendmail doesn't support the -f switch.

3.300. use_from

Type: boolean
Default: yes

When set, Mutt will generate the “From:” header field when sending messages. If unset, no “From:” header field will be generated unless the user explicitly sets one using the “my_hdr” command.

3.301. use_idn

Type: boolean
Default: yes

When set, Mutt will show you international domain names decoded. Note: You can use IDNs for addresses even if this is unset. This variable only affects decoding.

3.302. use_ipv6

Type: boolean
Default: yes

When set, Mutt will look for IPv6 addresses of hosts it tries to contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. Normally, the default should work.

3.303. user_agent

Type: boolean
Default: yes

When set, mutt will add a “User-Agent:” header to outgoing messages, indicating which version of mutt was used for composing them.

3.304. visual

Type: path
Default: (empty)

Specifies the visual editor to invoke when the “~v” command is given in the built-in editor.

3.305. wait_key

Type: boolean
Default: yes

Controls whether Mutt will ask you to press a key after an external command has been invoked by these functions: <shell-escape>, <pipe-message>, <pipe-entry>, <print-message>, and <print-entry> commands.

It is also used when viewing attachments with “auto_view”, provided that the corresponding mailcap entry has a needsterminal flag, and the external program is interactive.

When set, Mutt will always ask for a key. When unset, Mutt will wait for a key only if the external command returned a non-zero status.

3.306. weed

Type: boolean
Default: yes

When set, mutt will weed headers when displaying, forwarding, printing, or replying to messages.

3.307. wrap

Type: number
Default: 0

When set to a positive value, mutt will wrap text at $wrap characters. When set to a negative value, mutt will wrap text so that there are $wrap characters of empty space on the right side of the terminal. Setting it to zero makes mutt wrap at the terminal width.

3.308. wrap_headers

Type: number
Default: 78

This option specifies the number of characters to use for wrapping an outgoing message's headers. Allowed values are between 78 and 998 inclusive.

Note: This option usually shouldn't be changed. RFC5233 recommends a line length of 78 (the default), so please only change this setting when you know what you're doing.

3.309. wrap_search

Type: boolean
Default: yes

Controls whether searches wrap around the end.

When set, searches will wrap around the first (or last) item. When unset, incremental searches will not wrap.

3.310. wrapmargin

Type: number
Default: 0

(DEPRECATED) Equivalent to setting $wrap with a negative value.

3.311. write_bcc

Type: boolean
Default: yes

Controls whether mutt writes out the “Bcc:” header when preparing messages to be sent. Exim users may wish to unset this. If mutt is set to deliver directly via SMTP (see $smtp_url), this option does nothing: mutt will never write out the “Bcc:” header in this case.

3.312. write_inc

Type: number
Default: 10

When writing a mailbox, a message will be printed every $write_inc messages to indicate progress. If set to 0, only a single message will be displayed before writing a mailbox.

Also see the $read_inc, $net_inc and $time_inc variables and the “tuning” section of the manual for performance considerations.

4. Functions

The following is the list of available functions listed by the mapping in which they are available. The default key setting is given, and an explanation of what the function does. The key bindings of these functions can be changed with the bind command.

4.1. Generic Menu

The generic menu is not a real menu, but specifies common functions (such as movement) available in all menus except for pager and editor. Changing settings for this menu will affect the default bindings for all menus (except as noted).

Table 9.2. Default Generic Menu Bindings

FunctionDefault keyDescription
<top-page>Hmove to the top of the page
<next-entry>jmove to the next entry
<previous-entry>kmove to the previous entry
<bottom-page>Lmove to the bottom of the page
<refresh>^Lclear and redraw the screen
<middle-page>Mmove to the middle of the page
<search-next>nsearch for next match
<exit>qexit this menu
<tag-entry>ttag the current entry
<next-page>zmove to the next page
<previous-page>Zmove to the previous page
<last-entry>*move to the last entry
<first-entry>=move to the first entry
<enter-command>:enter a muttrc command
<next-line>>scroll down one line
<previous-line><scroll up one line
<half-up>[scroll up 1/2 page
<half-down>]scroll down 1/2 page
<help>?this screen
<tag-prefix>;apply next function to tagged messages
<tag-prefix-cond> apply next function ONLY to tagged messages
<end-cond> end of conditional execution (noop)
<shell-escape>!invoke a command in a subshell
<select-entry><Return>select the current entry
<search>/search for a regular expression
<search-reverse>Esc /search backwards for a regular expression
<search-opposite> search for next match in opposite direction
<jump> jump to an index number
<current-top> move entry to top of screen
<current-middle> move entry to middle of screen
<current-bottom> move entry to bottom of screen
<what-key> display the keycode for a key press

4.2. Index Menu

Table 9.3. Default Index Menu Bindings

FunctionDefault keyDescription
<create-alias>acreate an alias from a message sender
<bounce-message>bremail a message to another user
<break-thread>#break the thread in two
<change-folder>copen a different folder
<change-folder-readonly>Esc copen a different folder in read only mode
<next-unread-mailbox> open next mailbox with new mail
<collapse-thread>Esc vcollapse/uncollapse current thread
<collapse-all>Esc Vcollapse/uncollapse all threads
<copy-message>Ccopy a message to a file/mailbox
<decode-copy>Esc Cmake decoded (text/plain) copy
<decode-save>Esc smake decoded copy (text/plain) and delete
<delete-message>ddelete the current entry
<delete-pattern>Ddelete messages matching a pattern
<delete-thread>^Ddelete all messages in thread
<delete-subthread>Esc ddelete all messages in subthread
<edit>eedit the raw message
<edit-type>^Eedit attachment content type
<forward-message>fforward a message with comments
<flag-message>Ftoggle a message's 'important' flag
<group-reply>greply to all recipients
<fetch-mail>Gretrieve mail from POP server
<imap-fetch-mail> force retrieval of mail from IMAP server
<imap-logout-all> logout from all IMAP servers
<display-toggle-weed>hdisplay message and toggle header weeding
<next-undeleted>jmove to the next undeleted message
<previous-undeleted>kmove to the previous undeleted message
<limit>lshow only messages matching a pattern
<link-threads>&link tagged message to the current one
<list-reply>Lreply to specified mailing list
<mail>mcompose a new mail message
<toggle-new>Ntoggle a message's 'new' flag
<toggle-write>%toggle whether the mailbox will be rewritten
<next-thread>^Njump to the next thread
<next-subthread>Esc njump to the next subthread
<query>Qquery external program for addresses
<quit>qsave changes to mailbox and quit
<reply>rreply to a message
<show-limit>Esc lshow currently active limit pattern
<sort-mailbox>osort messages
<sort-reverse>Osort messages in reverse order
<print-message>pprint the current entry
<previous-thread>^Pjump to previous thread
<previous-subthread>Esc pjump to previous subthread
<recall-message>Rrecall a postponed message
<read-thread>^Rmark the current thread as read
<read-subthread>Esc rmark the current subthread as read
<resend-message>Esc euse the current message as a template for a new one
<save-message>ssave message/attachment to a mailbox/file
<tag-pattern>Ttag messages matching a pattern
<tag-subthread> tag the current subthread
<tag-thread>Esc ttag the current thread
<untag-pattern>^Tuntag messages matching a pattern
<undelete-message>uundelete the current entry
<undelete-pattern>Uundelete messages matching a pattern
<undelete-subthread>Esc uundelete all messages in subthread
<undelete-thread>^Uundelete all messages in thread
<view-attachments>vshow MIME attachments
<show-version>Vshow the Mutt version number and date
<set-flag>wset a status flag on a message
<clear-flag>Wclear a status flag from a message
<display-message><Return>display a message
<buffy-list>.list mailboxes with new mail
<sync-mailbox>$save changes to mailbox
<display-address>@display full address of sender
<pipe-message>|pipe message/attachment to a shell command
<next-new> jump to the next new message
<next-new-then-unread><Tab>jump to the next new or unread message
<previous-new> jump to the previous new message
<previous-new-then-unread>Esc <Tab>jump to the previous new or unread message
<next-unread> jump to the next unread message
<previous-unread> jump to the previous unread message
<parent-message>Pjump to parent message in thread
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory
<check-traditional-pgp>Esc Pcheck for classic PGP
<mail-key>Esc kmail a PGP public key
<decrypt-copy> make decrypted copy
<decrypt-save> make decrypted copy and delete

4.3. Pager Menu

Table 9.4. Default Pager Menu Bindings

FunctionDefault keyDescription
<break-thread>#break the thread in two
<create-alias>acreate an alias from a message sender
<bounce-message>bremail a message to another user
<change-folder>copen a different folder
<change-folder-readonly>Esc copen a different folder in read only mode
<next-unread-mailbox> open next mailbox with new mail
<copy-message>Ccopy a message to a file/mailbox
<decode-copy>Esc Cmake decoded (text/plain) copy
<delete-message>ddelete the current entry
<delete-thread>^Ddelete all messages in thread
<delete-subthread>Esc ddelete all messages in subthread
<set-flag>wset a status flag on a message
<clear-flag>Wclear a status flag from a message
<edit>eedit the raw message
<edit-type>^Eedit attachment content type
<forward-message>fforward a message with comments
<flag-message>Ftoggle a message's 'important' flag
<group-reply>greply to all recipients
<imap-fetch-mail> force retrieval of mail from IMAP server
<imap-logout-all> logout from all IMAP servers
<display-toggle-weed>hdisplay message and toggle header weeding
<next-undeleted>jmove to the next undeleted message
<next-entry>Jmove to the next entry
<previous-undeleted>kmove to the previous undeleted message
<previous-entry>Kmove to the previous entry
<link-threads>&link tagged message to the current one
<list-reply>Lreply to specified mailing list
<redraw-screen>^Lclear and redraw the screen
<mail>mcompose a new mail message
<mark-as-new>Ntoggle a message's 'new' flag
<search-next>nsearch for next match
<next-thread>^Njump to the next thread
<next-subthread>Esc njump to the next subthread
<sort-mailbox>osort messages
<sort-reverse>Osort messages in reverse order
<print-message>pprint the current entry
<previous-thread>^Pjump to previous thread
<previous-subthread>Esc pjump to previous subthread
<quit>Qsave changes to mailbox and quit
<exit>qexit this menu
<reply>rreply to a message
<recall-message>Rrecall a postponed message
<read-thread>^Rmark the current thread as read
<read-subthread>Esc rmark the current subthread as read
<resend-message>Esc euse the current message as a template for a new one
<save-message>ssave message/attachment to a mailbox/file
<skip-quoted>Sskip beyond quoted text
<decode-save>Esc smake decoded copy (text/plain) and delete
<tag-message>ttag the current entry
<toggle-quoted>Ttoggle display of quoted text
<undelete-message>uundelete the current entry
<undelete-subthread>Esc uundelete all messages in subthread
<undelete-thread>^Uundelete all messages in thread
<view-attachments>vshow MIME attachments
<show-version>Vshow the Mutt version number and date
<search-toggle>\\toggle search pattern coloring
<display-address>@display full address of sender
<next-new> jump to the next new message
<pipe-message>|pipe message/attachment to a shell command
<help>?this screen
<next-page><Space>move to the next page
<previous-page>-move to the previous page
<top>^jump to the top of the message
<sync-mailbox>$save changes to mailbox
<shell-escape>!invoke a command in a subshell
<enter-command>:enter a muttrc command
<buffy-list>.list mailboxes with new mail
<search>/search for a regular expression
<search-reverse>Esc /search backwards for a regular expression
<search-opposite> search for next match in opposite direction
<next-line><Return>scroll down one line
<jump> jump to an index number
<next-unread> jump to the next unread message
<previous-new> jump to the previous new message
<previous-unread> jump to the previous unread message
<half-up> scroll up 1/2 page
<half-down> scroll down 1/2 page
<previous-line> scroll up one line
<bottom> jump to the bottom of the message
<parent-message>Pjump to parent message in thread
<check-traditional-pgp>Esc Pcheck for classic PGP
<mail-key>Esc kmail a PGP public key
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory
<decrypt-copy> make decrypted copy
<decrypt-save> make decrypted copy and delete
<what-key> display the keycode for a key press

4.4. Alias Menu

Table 9.5. Default Alias Menu Bindings

FunctionDefault keyDescription
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry

4.5. Query Menu

Table 9.6. Default Query Menu Bindings

FunctionDefault keyDescription
<create-alias>acreate an alias from a message sender
<mail>mcompose a new mail message
<query>Qquery external program for addresses
<query-append>Aappend new query results to current results

4.6. Attachment Menu

Table 9.7. Default Attachment Menu Bindings

FunctionDefault keyDescription
<bounce-message>bremail a message to another user
<display-toggle-weed>hdisplay message and toggle header weeding
<edit-type>^Eedit attachment content type
<print-entry>pprint the current entry
<save-entry>ssave message/attachment to a mailbox/file
<pipe-entry>|pipe message/attachment to a shell command
<view-mailcap>mforce viewing of attachment using mailcap
<reply>rreply to a message
<resend-message>Esc euse the current message as a template for a new one
<group-reply>greply to all recipients
<list-reply>Lreply to specified mailing list
<forward-message>fforward a message with comments
<view-text>Tview attachment as text
<view-attach><Return>view attachment using mailcap entry if necessary
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry
<collapse-parts>vToggle display of subparts
<check-traditional-pgp>Esc Pcheck for classic PGP
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory

4.7. Compose Menu

Table 9.8. Default Compose Menu Bindings

FunctionDefault keyDescription
<attach-file>aattach file(s) to this message
<attach-message>Aattach message(s) to this message
<edit-bcc>bedit the BCC list
<edit-cc>cedit the CC list
<copy-file>Csave message/attachment to a mailbox/file
<detach-file>Ddelete the current entry
<toggle-disposition>^Dtoggle disposition between inline/attachment
<edit-description>dedit attachment description
<edit-message>eedit the message
<edit-headers>Eedit the message with headers
<edit-file>^X eedit the file to be attached
<edit-encoding>^Eedit attachment transfer-encoding
<edit-from>Esc fedit the from field
<edit-fcc>fenter a file to save a copy of this message in
<filter-entry>Ffilter attachment through a shell command
<get-attachment>Gget a temporary copy of an attachment
<display-toggle-weed>hdisplay message and toggle header weeding
<ispell>irun ispell on the message
<print-entry>lprint the current entry
<edit-mime>medit attachment using mailcap entry
<new-mime>ncompose new attachment using mailcap entry
<postpone-message>Psave this message to send later
<edit-reply-to>redit the Reply-To field
<rename-file>Rrename/move an attached file
<edit-subject>sedit the subject of this message
<edit-to>tedit the TO list
<edit-type>^Tedit attachment content type
<write-fcc>wwrite the message to a folder
<toggle-unlink>utoggle whether to delete file after sending it
<toggle-recode> toggle recoding of this attachment
<update-encoding>Uupdate an attachment's encoding info
<view-attach><Return>view attachment using mailcap entry if necessary
<send-message>ysend the message
<pipe-entry>|pipe message/attachment to a shell command
<attach-key>Esc kattach a PGP public key
<pgp-menu>pshow PGP options
<forget-passphrase>^Fwipe passphrase(s) from memory
<smime-menu>Sshow S/MIME options
<mix>Msend the message through a mixmaster remailer chain

4.8. Postpone Menu

Table 9.9. Default Postpone Menu Bindings

FunctionDefault keyDescription
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry

4.9. Browser Menu

Table 9.10. Default Browser Menu Bindings

FunctionDefault keyDescription
<change-dir>cchange directories
<display-filename>@display the currently selected file's name
<enter-mask>menter a file mask
<sort>osort messages
<sort-reverse>Osort messages in reverse order
<select-new>Nselect a new file in this directory
<check-new> check mailboxes for new mail
<toggle-mailboxes><Tab>toggle whether to browse mailboxes or all files
<view-file><Space>view file
<buffy-list>.list mailboxes with new mail
<create-mailbox>Ccreate a new mailbox (IMAP only)
<delete-mailbox>ddelete the current mailbox (IMAP only)
<rename-mailbox>rrename the current mailbox (IMAP only)
<subscribe>ssubscribe to current mailbox (IMAP only)
<unsubscribe>uunsubscribe from current mailbox (IMAP only)
<toggle-subscribed>Ttoggle view all/subscribed mailboxes (IMAP only)

4.10. Pgp Menu

Table 9.11. Default Pgp Menu Bindings

FunctionDefault keyDescription
<verify-key>cverify a PGP public key
<view-name>%view the key's user id

4.11. Smime Menu

Table 9.12. Default Smime Menu Bindings

FunctionDefault keyDescription
<verify-key>cverify a PGP public key
<view-name>%view the key's user id

4.12. Mixmaster Menu

Table 9.13. Default Mixmaster Menu Bindings

FunctionDefault keyDescription
<accept><Return>Accept the chain constructed
<append>aAppend a remailer to the chain
<insert>iInsert a remailer into the chain
<delete>dDelete a remailer from the chain
<chain-prev><Left>Select the previous element of the chain
<chain-next><Right>Select the next element of the chain

4.13. Editor Menu

Table 9.14. Default Editor Menu Bindings

FunctionDefault keyDescription
<bol>^Ajump to the beginning of the line
<backward-char>^Bmove the cursor one character to the left
<backward-word>Esc bmove the cursor to the beginning of the word
<capitalize-word>Esc ccapitalize the word
<downcase-word>Esc lconvert the word to lower case
<upcase-word>Esc uconvert the word to upper case
<delete-char>^Ddelete the char under the cursor
<eol>^Ejump to the end of the line
<forward-char>^Fmove the cursor one character to the right
<forward-word>Esc fmove the cursor to the end of the word
<backspace><Backspace>delete the char in front of the cursor
<kill-eol>^Kdelete chars from cursor to end of line
<kill-eow>Esc ddelete chars from the cursor to the end of the word
<kill-line>^Udelete all chars on the line
<quote-char>^Vquote the next typed key
<kill-word>^Wdelete the word in front of the cursor
<complete><Tab>complete filename or alias
<complete-query>^Tcomplete address with query
<buffy-cycle><Space>cycle among incoming mailboxes
<history-up> scroll up through the history list
<history-down> scroll down through the history list
<transpose-chars> transpose character under cursor with previous

Chapter 10. Miscellany

1. Acknowledgements

Kari Hurtta co-developed the original MIME parsing code back in the ELM-ME days.

The following people have been very helpful to the development of Mutt:

2. About This Document

This document was written in DocBook, and then rendered using the Gnome XSLT toolkit.

mutt-1.5.21/doc/index.html0000644000175000017500000016125511444176777012310 00000000000000 The Mutt E-Mail Client

The Mutt E-Mail Client

Michael Elkins

version 1.5.21 (2010-09-15)

Abstract

“All mail clients suck. This one just sucks less.” — me, circa 1995


Table of Contents

1. Introduction
1. Mutt Home Page
2. Mailing Lists
3. Getting Mutt
4. Mutt Online Resources
5. Contributing to Mutt
6. Typographical Conventions
7. Copyright
2. Getting Started
1. Core Concepts
2. Screens and Menus
2.1. Index
2.2. Pager
2.3. File Browser
2.4. Help
2.5. Compose Menu
2.6. Alias Menu
2.7. Attachment Menu
3. Moving Around in Menus
4. Editing Input Fields
4.1. Introduction
4.2. History
5. Reading Mail
5.1. The Message Index
5.2. The Pager
5.3. Threaded Mode
5.4. Miscellaneous Functions
6. Sending Mail
6.1. Introduction
6.2. Editing the Message Header
6.3. Sending Cryptographically Signed/Encrypted Messages
6.4. Sending Format=Flowed Messages
7. Forwarding and Bouncing Mail
8. Postponing Mail
3. Configuration
1. Location of Initialization Files
2. Syntax of Initialization Files
3. Address Groups
4. Defining/Using Aliases
5. Changing the Default Key Bindings
6. Defining Aliases for Character Sets
7. Setting Variables Based Upon Mailbox
8. Keyboard Macros
9. Using Color and Mono Video Attributes
10. Message Header Display
10.1. Header Display
10.2. Selecting Headers
10.3. Ordering Displayed Headers
11. Alternative Addresses
12. Mailing Lists
13. Using Multiple Spool Mailboxes
14. Monitoring Incoming Mail
15. User-Defined Headers
16. Specify Default Save Mailbox
17. Specify Default Fcc: Mailbox When Composing
18. Specify Default Save Filename and Default Fcc: Mailbox at Once
19. Change Settings Based Upon Message Recipients
20. Change Settings Before Formatting a Message
21. Choosing the Cryptographic Key of the Recipient
22. Adding Key Sequences to the Keyboard Buffer
23. Executing Functions
24. Message Scoring
25. Spam Detection
26. Setting and Querying Variables
26.1. Variable Types
26.2. Commands
26.3. User-Defined Variables
26.4. Type Conversions
27. Reading Initialization Commands From Another File
28. Removing Hooks
29. Format Strings
29.1. Basic usage
29.2. Conditionals
29.3. Filters
29.4. Padding
4. Advanced Usage
1. Character Set Handling
2. Regular Expressions
3. Patterns: Searching, Limiting and Tagging
3.1. Pattern Modifier
3.2. Simple Searches
3.3. Nesting and Boolean Operators
3.4. Searching by Date
4. Using Tags
5. Using Hooks
5.1. Message Matching in Hooks
6. External Address Queries
7. Mailbox Formats
8. Mailbox Shortcuts
9. Handling Mailing Lists
10. New Mail Detection
10.1. How New Mail Detection Works
10.2. Polling For New Mail
11. Editing Threads
11.1. Linking Threads
11.2. Breaking Threads
12. Delivery Status Notification (DSN) Support
13. Start a WWW Browser on URLs
14. Miscellany
5. Mutt's MIME Support
1. Using MIME in Mutt
1.1. MIME Overview
1.2. Viewing MIME Messages in the Pager
1.3. The Attachment Menu
1.4. The Compose Menu
2. MIME Type Configuration with mime.types
3. MIME Viewer Configuration with Mailcap
3.1. The Basics of the Mailcap File
3.2. Secure Use of Mailcap
3.3. Advanced Mailcap Usage
3.4. Example Mailcap Files
4. MIME Autoview
5. MIME Multipart/Alternative
6. Attachment Searching and Counting
7. MIME Lookup
6. Optional Features
1. General Notes
1.1. Enabling/Disabling Features
1.2. URL Syntax
2. SSL/TLS Support
3. POP3 Support
4. IMAP Support
4.1. The IMAP Folder Browser
4.2. Authentication
5. SMTP Support
6. Managing Multiple Accounts
7. Local Caching
7.1. Header Caching
7.2. Body Caching
7.3. Cache Directories
7.4. Maintenance
8. Exact Address Generation
9. Sending Anonymous Messages via Mixmaster
7. Security Considerations
1. Passwords
2. Temporary Files
3. Information Leaks
3.1. Message-Id: headers
3.2. mailto:-style Links
4. External Applications
8. Performance Tuning
1. Reading and Writing Mailboxes
2. Reading Messages from Remote Folders
3. Searching and Limiting
9. Reference
1. Command-Line Options
2. Configuration Commands
3. Configuration Variables
3.1. abort_nosubject
3.2. abort_unmodified
3.3. alias_file
3.4. alias_format
3.5. allow_8bit
3.6. allow_ansi
3.7. arrow_cursor
3.8. ascii_chars
3.9. askbcc
3.10. askcc
3.11. assumed_charset
3.12. attach_charset
3.13. attach_format
3.14. attach_sep
3.15. attach_split
3.16. attribution
3.17. auto_tag
3.18. autoedit
3.19. beep
3.20. beep_new
3.21. bounce
3.22. bounce_delivered
3.23. braille_friendly
3.24. certificate_file
3.25. charset
3.26. check_mbox_size
3.27. check_new
3.28. collapse_unread
3.29. compose_format
3.30. config_charset
3.31. confirmappend
3.32. confirmcreate
3.33. connect_timeout
3.34. content_type
3.35. copy
3.36. crypt_autoencrypt
3.37. crypt_autopgp
3.38. crypt_autosign
3.39. crypt_autosmime
3.40. crypt_replyencrypt
3.41. crypt_replysign
3.42. crypt_replysignencrypted
3.43. crypt_timestamp
3.44. crypt_use_gpgme
3.45. crypt_use_pka
3.46. crypt_verify_sig
3.47. date_format
3.48. default_hook
3.49. delete
3.50. delete_untag
3.51. digest_collapse
3.52. display_filter
3.53. dotlock_program
3.54. dsn_notify
3.55. dsn_return
3.56. duplicate_threads
3.57. edit_headers
3.58. editor
3.59. encode_from
3.60. entropy_file
3.61. envelope_from_address
3.62. escape
3.63. fast_reply
3.64. fcc_attach
3.65. fcc_clear
3.66. folder
3.67. folder_format
3.68. followup_to
3.69. force_name
3.70. forward_decode
3.71. forward_decrypt
3.72. forward_edit
3.73. forward_format
3.74. forward_quote
3.75. from
3.76. gecos_mask
3.77. hdrs
3.78. header
3.79. header_cache
3.80. header_cache_compress
3.81. header_cache_pagesize
3.82. help
3.83. hidden_host
3.84. hide_limited
3.85. hide_missing
3.86. hide_thread_subject
3.87. hide_top_limited
3.88. hide_top_missing
3.89. history
3.90. history_file
3.91. honor_disposition
3.92. honor_followup_to
3.93. hostname
3.94. ignore_linear_white_space
3.95. ignore_list_reply_to
3.96. imap_authenticators
3.97. imap_check_subscribed
3.98. imap_delim_chars
3.99. imap_headers
3.100. imap_idle
3.101. imap_keepalive
3.102. imap_list_subscribed
3.103. imap_login
3.104. imap_pass
3.105. imap_passive
3.106. imap_peek
3.107. imap_pipeline_depth
3.108. imap_servernoise
3.109. imap_user
3.110. implicit_autoview
3.111. include
3.112. include_onlyfirst
3.113. indent_string
3.114. index_format
3.115. ispell
3.116. keep_flagged
3.117. locale
3.118. mail_check
3.119. mail_check_recent
3.120. mailcap_path
3.121. mailcap_sanitize
3.122. maildir_header_cache_verify
3.123. maildir_trash
3.124. mark_old
3.125. markers
3.126. mask
3.127. mbox
3.128. mbox_type
3.129. menu_context
3.130. menu_move_off
3.131. menu_scroll
3.132. message_cache_clean
3.133. message_cachedir
3.134. message_format
3.135. meta_key
3.136. metoo
3.137. mh_purge
3.138. mh_seq_flagged
3.139. mh_seq_replied
3.140. mh_seq_unseen
3.141. mime_forward
3.142. mime_forward_decode
3.143. mime_forward_rest
3.144. mix_entry_format
3.145. mixmaster
3.146. move
3.147. narrow_tree
3.148. net_inc
3.149. pager
3.150. pager_context
3.151. pager_format
3.152. pager_index_lines
3.153. pager_stop
3.154. pgp_auto_decode
3.155. pgp_autoinline
3.156. pgp_check_exit
3.157. pgp_clearsign_command
3.158. pgp_decode_command
3.159. pgp_decrypt_command
3.160. pgp_encrypt_only_command
3.161. pgp_encrypt_sign_command
3.162. pgp_entry_format
3.163. pgp_export_command
3.164. pgp_getkeys_command
3.165. pgp_good_sign
3.166. pgp_ignore_subkeys
3.167. pgp_import_command
3.168. pgp_list_pubring_command
3.169. pgp_list_secring_command
3.170. pgp_long_ids
3.171. pgp_mime_auto
3.172. pgp_replyinline
3.173. pgp_retainable_sigs
3.174. pgp_show_unusable
3.175. pgp_sign_as
3.176. pgp_sign_command
3.177. pgp_sort_keys
3.178. pgp_strict_enc
3.179. pgp_timeout
3.180. pgp_use_gpg_agent
3.181. pgp_verify_command
3.182. pgp_verify_key_command
3.183. pipe_decode
3.184. pipe_sep
3.185. pipe_split
3.186. pop_auth_try_all
3.187. pop_authenticators
3.188. pop_checkinterval
3.189. pop_delete
3.190. pop_host
3.191. pop_last
3.192. pop_pass
3.193. pop_reconnect
3.194. pop_user
3.195. post_indent_string
3.196. postpone
3.197. postponed
3.198. preconnect
3.199. print
3.200. print_command
3.201. print_decode
3.202. print_split
3.203. prompt_after
3.204. query_command
3.205. query_format
3.206. quit
3.207. quote_regexp
3.208. read_inc
3.209. read_only
3.210. realname
3.211. recall
3.212. record
3.213. reply_regexp
3.214. reply_self
3.215. reply_to
3.216. resolve
3.217. reverse_alias
3.218. reverse_name
3.219. reverse_realname
3.220. rfc2047_parameters
3.221. save_address
3.222. save_empty
3.223. save_history
3.224. save_name
3.225. score
3.226. score_threshold_delete
3.227. score_threshold_flag
3.228. score_threshold_read
3.229. search_context
3.230. send_charset
3.231. sendmail
3.232. sendmail_wait
3.233. shell
3.234. sig_dashes
3.235. sig_on_top
3.236. signature
3.237. simple_search
3.238. sleep_time
3.239. smart_wrap
3.240. smileys
3.241. smime_ask_cert_label
3.242. smime_ca_location
3.243. smime_certificates
3.244. smime_decrypt_command
3.245. smime_decrypt_use_default_key
3.246. smime_default_key
3.247. smime_encrypt_command
3.248. smime_encrypt_with
3.249. smime_get_cert_command
3.250. smime_get_cert_email_command
3.251. smime_get_signer_cert_command
3.252. smime_import_cert_command
3.253. smime_is_default
3.254. smime_keys
3.255. smime_pk7out_command
3.256. smime_sign_command
3.257. smime_sign_opaque_command
3.258. smime_timeout
3.259. smime_verify_command
3.260. smime_verify_opaque_command
3.261. smtp_authenticators
3.262. smtp_pass
3.263. smtp_url
3.264. sort
3.265. sort_alias
3.266. sort_aux
3.267. sort_browser
3.268. sort_re
3.269. spam_separator
3.270. spoolfile
3.271. ssl_ca_certificates_file
3.272. ssl_client_cert
3.273. ssl_force_tls
3.274. ssl_min_dh_prime_bits
3.275. ssl_starttls
3.276. ssl_use_sslv2
3.277. ssl_use_sslv3
3.278. ssl_use_tlsv1
3.279. ssl_usesystemcerts
3.280. ssl_verify_dates
3.281. ssl_verify_host
3.282. status_chars
3.283. status_format
3.284. status_on_top
3.285. strict_threads
3.286. suspend
3.287. text_flowed
3.288. thorough_search
3.289. thread_received
3.290. tilde
3.291. time_inc
3.292. timeout
3.293. tmpdir
3.294. to_chars
3.295. tunnel
3.296. uncollapse_jump
3.297. use_8bitmime
3.298. use_domain
3.299. use_envelope_from
3.300. use_from
3.301. use_idn
3.302. use_ipv6
3.303. user_agent
3.304. visual
3.305. wait_key
3.306. weed
3.307. wrap
3.308. wrap_headers
3.309. wrap_search
3.310. wrapmargin
3.311. write_bcc
3.312. write_inc
4. Functions
4.1. Generic Menu
4.2. Index Menu
4.3. Pager Menu
4.4. Alias Menu
4.5. Query Menu
4.6. Attachment Menu
4.7. Compose Menu
4.8. Postpone Menu
4.9. Browser Menu
4.10. Pgp Menu
4.11. Smime Menu
4.12. Mixmaster Menu
4.13. Editor Menu
10. Miscellany
1. Acknowledgements
2. About This Document
mutt-1.5.21/doc/intro.html0000644000175000017500000002576011444176762012326 00000000000000 Chapter 1. Introduction

Chapter 1. Introduction

Mutt is a small but very powerful text-based MIME mail client. Mutt is highly configurable, and is well suited to the mail power user with advanced features like key bindings, keyboard macros, mail threading, regular expression searches and a powerful pattern matching language for selecting groups of messages.

1. Mutt Home Page

The official homepage can be found at http://www.mutt.org/.

2. Mailing Lists

To subscribe to one of the following mailing lists, send a message with the word subscribe in the body to list-name-request@mutt.org.

All messages posted to mutt-announce are automatically forwarded to mutt-users, so you do not need to be subscribed to both lists.

3. Getting Mutt

Mutt releases can be downloaded from ftp://ftp.mutt.org/mutt/. For a list of mirror sites, please refer to http://www.mutt.org/download.html.

For nightly tarballs and version control access, please refer to the Mutt development site.

4. Mutt Online Resources

Bug Tracking System

The official Mutt bug tracking system can be found at http://bugs.mutt.org/

Wiki

An (unofficial) wiki can be found at http://wiki.mutt.org/.

IRC

For the IRC user community, visit channel #mutt on irc.freenode.net.

USENET

For USENET, see the newsgroup comp.mail.mutt.

5. Contributing to Mutt

There are various ways to contribute to the Mutt project.

Especially for new users it may be helpful to meet other new and experienced users to chat about Mutt, talk about problems and share tricks.

Since translations of Mutt into other languages are highly appreciated, the Mutt developers always look for skilled translators that help improve and continue to maintain stale translations.

For contributing code patches for new features and bug fixes, please refer to the developer pages at http://dev.mutt.org/ for more details.

6. Typographical Conventions

This section lists typographical conventions followed throughout this manual. See table Table 1.1, “Typographical conventions for special terms” for typographical conventions for special terms.

Table 1.1. Typographical conventions for special terms

ItemRefers to...
printf(3)UNIX manual pages, execute man 3 printf
<PageUp>named keys
<create-alias>named Mutt function
^GControl+G key combination
$mail_checkMutt configuration option
$HOMEenvironment variable

Examples are presented as:

mutt -v

Within command synopsis, curly brackets (“{}”) denote a set of options of which one is mandatory, square brackets (“[]”) denote optional arguments, three dots denote that the argument may be repeated arbitrary times.

7. Copyright

Mutt is Copyright Âİ 1996-2009 Michael R. Elkins and others.

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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

mutt-1.5.21/doc/gettingstarted.html0000644000175000017500000021705311444176764014223 00000000000000 Chapter 2. Getting Started

Chapter 2. Getting Started

This section is intended as a brief overview of how to use Mutt. There are many other features which are described elsewhere in the manual. There is even more information available in the Mutt FAQ and various web pages. See the Mutt homepage for more details.

The keybindings described in this section are the defaults as distributed. Your local system administrator may have altered the defaults for your site. You can always type “?” in any menu to display the current bindings.

The first thing you need to do is invoke Mutt, simply by typing mutt at the command line. There are various command-line options, see either the Mutt man page or the reference.

1. Core Concepts

Mutt is a text-based application which interacts with users through different menus which are mostly line-/entry-based or page-based. A line-based menu is the so-called “index” menu (listing all messages of the currently opened folder) or the “alias” menu (allowing you to select recipients from a list). Examples for page-based menus are the “pager” (showing one message at a time) or the “help” menu listing all available key bindings.

The user interface consists of a context sensitive help line at the top, the menu's contents followed by a context sensitive status line and finally the command line. The command line is used to display informational and error messages as well as for prompts and for entering interactive commands.

Mutt is configured through variables which, if the user wants to permanently use a non-default value, are written to configuration files. Mutt supports a rich config file syntax to make even complex configuration files readable and commentable.

Because Mutt allows for customizing almost all key bindings, there are so-called “functions” which can be executed manually (using the command line) or in macros. Macros allow the user to bind a sequence of commands to a single key or a short key sequence instead of repeating a sequence of actions over and over.

Many commands (such as saving or copying a message to another folder) can be applied to a single message or a set of messages (so-called “tagged” messages). To help selecting messages, Mutt provides a rich set of message patterns (such as recipients, sender, body contents, date sent/received, etc.) which can be combined into complex expressions using the boolean and and or operations as well as negating. These patterns can also be used to (for example) search for messages or to limit the index to show only matching messages.

Mutt supports a “hook” concept which allows the user to execute arbitrary configuration commands and functions in certain situations such as entering a folder, starting a new message or replying to an existing one. These hooks can be used to highly customize Mutt's behavior including managing multiple identities, customizing the display for a folder or even implementing auto-archiving based on a per-folder basis and much more.

Besides an interactive mode, Mutt can also be used as a command-line tool only send messages. It also supports a mailx(1)-compatible interface, see Table 9.1, “Command line options” for a complete list of command-line options.

2. Screens and Menus

2.1. Index

The index is the screen that you usually see first when you start Mutt. It gives an overview over your emails in the currently opened mailbox. By default, this is your system mailbox. The information you see in the index is a list of emails, each with its number on the left, its flags (new email, important email, email that has been forwarded or replied to, tagged email, ...), the date when email was sent, its sender, the email size, and the subject. Additionally, the index also shows thread hierarchies: when you reply to an email, and the other person replies back, you can see the other person's email in a "sub-tree" below. This is especially useful for personal email between a group of people or when you've subscribed to mailing lists.

2.2. Pager

The pager is responsible for showing the email content. On the top of the pager you have an overview over the most important email headers like the sender, the recipient, the subject, and much more information. How much information you actually see depends on your configuration, which we'll describe below.

Below the headers, you see the email body which usually contains the message. If the email contains any attachments, you will see more information about them below the email body, or, if the attachments are text files, you can view them directly in the pager.

To give the user a good overview, it is possible to configure Mutt to show different things in the pager with different colors. Virtually everything that can be described with a regular expression can be colored, e.g. URLs, email addresses or smileys.

2.3. File Browser

The file browser is the interface to the local or remote file system. When selecting a mailbox to open, the browser allows custom sorting of items, limiting the items shown by a regular expression and a freely adjustable format of what to display in which way. It also allows for easy navigation through the file system when selecting file(s) to attach to a message, select multiple files to attach and many more.

2.4. Help

The help screen is meant to offer a quick help to the user. It lists the current configuration of key bindings and their associated commands including a short description, and currently unbound functions that still need to be associated with a key binding (or alternatively, they can be called via the Mutt command prompt).

2.5. Compose Menu

The compose menu features a split screen containing the information which really matter before actually sending a message by mail: who gets the message as what (recipients and who gets what kind of copy). Additionally, users may set security options like deciding whether to sign, encrypt or sign and encrypt a message with/for what keys. Also, it's used to attach messages, to re-edit any attachment including the message itself.

2.6. Alias Menu

The alias menu is used to help users finding the recipients of messages. For users who need to contact many people, there's no need to remember addresses or names completely because it allows for searching, too. The alias mechanism and thus the alias menu also features grouping several addresses by a shorter nickname, the actual alias, so that users don't have to select each single recipient manually.

2.7. Attachment Menu

As will be later discussed in detail, Mutt features a good and stable MIME implementation, that is, it supports sending and receiving messages of arbitrary MIME types. The attachment menu displays a message's structure in detail: what content parts are attached to which parent part (which gives a true tree structure), which type is of what type and what size. Single parts may saved, deleted or modified to offer great and easy access to message's internals.

3. Moving Around in Menus

The most important navigation keys common to line- or entry-based menus are shown in Table 2.1, “Most common navigation keys in entry-based menus” and in Table 2.2, “Most common navigation keys in page-based menus” for page-based menus.

Table 2.1. Most common navigation keys in entry-based menus

KeyFunctionDescription
j or <Down><next-entry>move to the next entry
k or <Up><previous-entry>move to the previous entry
z or <PageDn><page-down>go to the next page
Z or <PageUp><page-up>go to the previous page
= or <Home><first-entry>jump to the first entry
* or <End><last-entry>jump to the last entry
q<quit>exit the current menu
?<help>list all keybindings for the current menu

Table 2.2. Most common navigation keys in page-based menus

KeyFunctionDescription
J or <Return><next-line>scroll down one line
<Backspace><previous-line>scroll up one line
K, <Space> or <PageDn><next-page>move to the next page
- or <PageUp><previous-page>move the previous page
<Home><top>move to the top
<End><bottom>move to the bottom

4. Editing Input Fields

4.1. Introduction

Mutt has a built-in line editor for inputting text, e.g. email addresses or filenames. The keys used to manipulate text input are very similar to those of Emacs. See Table 2.3, “Most common line editor keys” for a full reference of available functions, their default key bindings, and short descriptions.

Table 2.3. Most common line editor keys

KeyFunctionDescription
^A or <Home><bol>move to the start of the line
^B or <Left><backward-char>move back one char
Esc B<backward-word>move back one word
^D or <Delete><delete-char>delete the char under the cursor
^E or <End><eol>move to the end of the line
^F or <Right><forward-char>move forward one char
Esc F<forward-word>move forward one word
<Tab><complete>complete filename or alias
^T<complete-query>complete address with query
^K<kill-eol>delete to the end of the line
Esc d<kill-eow>delete to the end of the word
^W<kill-word>kill the word in front of the cursor
^U<kill-line>delete entire line
^V<quote-char>quote the next typed key
<Up><history-up>recall previous string from history
<Down><history-down>recall next string from history
<BackSpace><backspace>kill the char in front of the cursor
Esc u<upcase-word>convert word to upper case
Esc l<downcase-word>convert word to lower case
Esc c<capitalize-word>capitalize the word
^Gn/aabort
<Return>n/afinish editing

You can remap the editor functions using the bind command. For example, to make the <Delete> key delete the character in front of the cursor rather than under, you could use:

bind editor <delete> backspace

4.2. History

Mutt maintains a history for the built-in editor. The number of items is controlled by the $history variable and can be made persistent using an external file specified using $history_file. You may cycle through them at an editor prompt by using the <history-up> and/or <history-down> commands. But notice that Mutt does not remember the currently entered text, it only cycles through history and wraps around at the end or beginning.

Mutt maintains several distinct history lists, one for each of the following categories:

  • .muttrc commands

  • addresses and aliases

  • shell commands

  • filenames

  • patterns

  • everything else

Mutt automatically filters out consecutively repeated items from the history. It also mimics the behavior of some shells by ignoring items starting with a space. The latter feature can be useful in macros to not clobber the history's valuable entries with unwanted entries.

5. Reading Mail

Similar to many other mail clients, there are two modes in which mail is read in Mutt. The first is a list of messages in the mailbox, which is called the “index” menu in Mutt. The second mode is the display of the message contents. This is called the “pager.”

The next few sections describe the functions provided in each of these modes.

5.1. The Message Index

Common keys used to navigate through and manage messages in the index are shown in Table 2.4, “Most common message index keys”. How messages are presented in the index menu can be customized using the $index_format variable.

Table 2.4. Most common message index keys

KeyDescription
cchange to a different mailbox
Esc cchange to a folder in read-only mode
Ccopy the current message to another mailbox
Esc Cdecode a message and copy it to a folder
Esc sdecode a message and save it to a folder
Ddelete messages matching a pattern
ddelete the current message
Fmark as important
lshow messages matching a pattern
Nmark message as new
ochange the current sort method
Oreverse sort the mailbox
qsave changes and exit
ssave-message
Ttag messages matching a pattern
ttoggle the tag on a message
Esc ttoggle tag on entire message thread
Uundelete messages matching a pattern
uundelete-message
vview-attachments
xabort changes and exit
<Return>display-message
<Tab>jump to the next new or unread message
@show the author's full e-mail address
$save changes to mailbox
/search
Esc /search-reverse
^Lclear and redraw the screen
^Tuntag messages matching a pattern

In addition to who sent the message and the subject, a short summary of the disposition of each message is printed beside the message number. Zero or more of the “flags” in Table 2.5, “Message status flags” may appear, some of which can be turned on or off using these functions: <set-flag> and <clear-flag> bound by default to “w” and “W” respectively.

Furthermore, the flags in Table 2.6, “Message recipient flags” reflect who the message is addressed to. They can be customized with the $to_chars variable.

Table 2.5. Message status flags

FlagDescription
Dmessage is deleted (is marked for deletion)
dmessage has attachments marked for deletion
Kcontains a PGP public key
Nmessage is new
Omessage is old
Pmessage is PGP encrypted
rmessage has been replied to
Smessage is signed, and the signature is successfully verified
smessage is signed
!message is flagged
*message is tagged
nthread contains new messages (only if collapsed)
othread contains old messages (only if collapsed)

Table 2.6. Message recipient flags

FlagDescription
+message is to you and you only
Tmessage is to you, but also to or CC'ed to others
Cmessage is CC'ed to you
Fmessage is from you
Lmessage is sent to a subscribed mailing list

5.2. The Pager

By default, Mutt uses its built-in pager to display the contents of messages (an external pager such as less(1) can be configured, see $pager variable). The pager is very similar to the Unix program less(1) though not nearly as featureful.

Table 2.7. Most common pager keys

KeyDescription
<Return>go down one line
<Space>display the next page (or next message if at the end of a message)
-go back to the previous page
nsearch for next match
Sskip beyond quoted text
Ttoggle display of quoted text
?show keybindings
/regular expression search
Esc /backward regular expression search
\toggle highlighting of search matches
^jump to the top of the message

In addition to key bindings in Table 2.7, “Most common pager keys”, many of the functions from the index menu are also available in the pager, such as <delete-message> or <copy-message> (this is one advantage over using an external pager to view messages).

Also, the internal pager supports a couple other advanced features. For one, it will accept and translate the “standard” nroff sequences for bold and underline. These sequences are a series of either the letter, backspace (“^H”), the letter again for bold or the letter, backspace, “_” for denoting underline. Mutt will attempt to display these in bold and underline respectively if your terminal supports them. If not, you can use the bold and underline color objects to specify a color or mono attribute for them.

Additionally, the internal pager supports the ANSI escape sequences for character attributes. Mutt translates them into the correct color and character settings. The sequences Mutt supports are:

\e[Ps;Ps;..Ps;m

where Ps can be one of the codes shown in Table 2.8, “ANSI escape sequences”.

Table 2.8. ANSI escape sequences

Escape codeDescription
0All attributes off
1Bold on
4Underline on
5Blink on
7Reverse video on
3<color>Foreground color is <color> (see Table 2.9, “Color sequences”)
4<color>Background color is <color> (see Table 2.9, “Color sequences”)

Table 2.9. Color sequences

Color codeColor
0Black
1Red
2Green
3Yellow
4Blue
5Magenta
6Cyan
7White

Mutt uses these attributes for handling text/enriched messages, and they can also be used by an external autoview script for highlighting purposes.

Note

If you change the colors for your display, for example by changing the color associated with color2 for your xterm, then that color will be used instead of green.

Note

Note that the search commands in the pager take regular expressions, which are not quite the same as the more complex patterns used by the search command in the index. This is because patterns are used to select messages by criteria whereas the pager already displays a selected message.

5.3. Threaded Mode

So-called “threads” provide a hierarchy of messages where replies are linked to their parent message(s). This organizational form is extremely useful in mailing lists where different parts of the discussion diverge. Mutt displays threads as a tree structure.

In Mutt, when a mailbox is sorted by threads, there are a few additional functions available in the index and pager modes as shown in Table 2.10, “Most common thread mode keys”.

Table 2.10. Most common thread mode keys

KeyFunctionDescription
^D<delete-thread>delete all messages in the current thread
^U<undelete-thread>undelete all messages in the current thread
^N<next-thread>jump to the start of the next thread
^P<previous-thread>jump to the start of the previous thread
^R<read-thread>mark the current thread as read
Esc d<delete-subthread>delete all messages in the current subthread
Esc u<undelete-subthread>undelete all messages in the current subthread
Esc n<next-subthread>jump to the start of the next subthread
Esc p<previous-subthread>jump to the start of the previous subthread
Esc r<read-subthread>mark the current subthread as read
Esc t<tag-thread>toggle the tag on the current thread
Esc v<collapse-thread>toggle collapse for the current thread
Esc V<collapse-all>toggle collapse for all threads
P<parent-message>jump to parent message in thread

Collapsing a thread displays only the first message in the thread and hides the others. This is useful when threads contain so many messages that you can only see a handful of threads on the screen. See %M in $index_format. For example, you could use “%?M?(#%03M)&(%4l)?” in $index_format to optionally display the number of hidden messages if the thread is collapsed. The %?<char>?<if-part>&<else-part>? syntax is explained in detail in format string conditionals.

Technically, every reply should contain a list of its parent messages in the thread tree, but not all do. In these cases, Mutt groups them by subject which can be controlled using the $strict_threads variable.

5.4. Miscellaneous Functions

In addition, the index and pager menus have these interesting functions:

<create-alias> (default: a)

Creates a new alias based upon the current message (or prompts for a new one). Once editing is complete, an alias command is added to the file specified by the $alias_file variable for future use

Note

Mutt does not read the $alias_file upon startup so you must explicitly source the file.

<check-traditional-pgp> (default: Esc P)

This function will search the current message for content signed or encrypted with PGP the “traditional” way, that is, without proper MIME tagging. Technically, this function will temporarily change the MIME content types of the body parts containing PGP data; this is similar to the <edit-type> function's effect.

<edit> (default: e)

This command (available in the index and pager) allows you to edit the raw current message as it's present in the mail folder. After you have finished editing, the changed message will be appended to the current folder, and the original message will be marked for deletion; if the message is unchanged it won't be replaced.

<edit-type> (default: ^E on the attachment menu, and in the pager and index menus; ^T on the compose menu)

This command is used to temporarily edit an attachment's content type to fix, for instance, bogus character set parameters. When invoked from the index or from the pager, you'll have the opportunity to edit the top-level attachment's content type. On the attachment menu, you can change any attachment's content type. These changes are not persistent, and get lost upon changing folders.

Note that this command is also available on the compose menu. There, it's used to fine-tune the properties of attachments you are going to send.

<enter-command> (default: “:”)

This command is used to execute any command you would normally put in a configuration file. A common use is to check the settings of variables, or in conjunction with macros to change settings on the fly.

<extract-keys> (default: ^K)

This command extracts PGP public keys from the current or tagged message(s) and adds them to your PGP public key ring.

<forget-passphrase> (default: ^F)

This command wipes the passphrase(s) from memory. It is useful, if you misspelled the passphrase.

<list-reply> (default: L)

Reply to the current or tagged message(s) by extracting any addresses which match the regular expressions given by the lists or subscribe commands, but also honor any Mail-Followup-To header(s) if the $honor_followup_to configuration variable is set. Using this when replying to messages posted to mailing lists helps avoid duplicate copies being sent to the author of the message you are replying to.

<pipe-message> (default: |)

Asks for an external Unix command and pipes the current or tagged message(s) to it. The variables $pipe_decode, $pipe_split, $pipe_sep and $wait_key control the exact behavior of this function.

<resend-message> (default: Esc e)

Mutt takes the current message as a template for a new message. This function is best described as "recall from arbitrary folders". It can conveniently be used to forward MIME messages while preserving the original mail structure. Note that the amount of headers included here depends on the value of the $weed variable.

This function is also available from the attachment menu. You can use this to easily resend a message which was included with a bounce message as a message/rfc822 body part.

<shell-escape> (default: !)

Asks for an external Unix command and executes it. The $wait_key can be used to control whether Mutt will wait for a key to be pressed when the command returns (presumably to let the user read the output of the command), based on the return status of the named command. If no command is given, an interactive shell is executed.

<toggle-quoted> (default: T)

The pager uses the $quote_regexp variable to detect quoted text when displaying the body of the message. This function toggles the display of the quoted material in the message. It is particularly useful when being interested in just the response and there is a large amount of quoted text in the way.

<skip-quoted> (default: S)

This function will go to the next line of non-quoted text which comes after a line of quoted text in the internal pager.

6. Sending Mail

6.1. Introduction

The bindings shown in Table 2.11, “Most common mail sending keys” are available in the index and pager to start a new message.

Table 2.11. Most common mail sending keys

KeyFunctionDescription
m<compose>compose a new message
r<reply>reply to sender
g<group-reply>reply to all recipients
L<list-reply>reply to mailing list address
f<forward>forward message
b<bounce>bounce (remail) message
Esc k<mail-key>mail a PGP public key to someone

Bouncing a message sends the message as-is to the recipient you specify. Forwarding a message allows you to add comments or modify the message you are forwarding. These items are discussed in greater detail in the next section “Forwarding and Bouncing Mail.”

Mutt will then enter the compose menu and prompt you for the recipients to place on the “To:” header field when you hit m to start a new message. Next, it will ask you for the “Subject:” field for the message, providing a default if you are replying to or forwarding a message. You again have the chance to adjust recipients, subject, and security settings right before actually sending the message. See also $askcc, $askbcc, $autoedit, $bounce, $fast_reply, and $include for changing how and if Mutt asks these questions.

When replying, Mutt fills these fields with proper values depending on the reply type. The types of replying supported are:

Simple reply

Reply to the author directly.

Group reply

Reply to the author as well to all recipients except you; this consults alternates.

List reply

Reply to all mailing list addresses found, either specified via configuration or auto-detected. See Section 12, “Mailing Lists” for details.

After getting recipients for new messages, forwards or replies, Mutt will then automatically start your $editor on the message body. If the $edit_headers variable is set, the headers will be at the top of the message in your editor. Any messages you are replying to will be added in sort order to the message, with appropriate $attribution, $indent_string and $post_indent_string. When forwarding a message, if the $mime_forward variable is unset, a copy of the forwarded message will be included. If you have specified a $signature, it will be appended to the message.

Once you have finished editing the body of your mail message, you are returned to the compose menu providing the functions shown in Table 2.12, “Most common compose menu keys” to modify, send or postpone the message.

Table 2.12. Most common compose menu keys

KeyFunctionDescription
a<attach-file>attach a file
A<attach-message>attach message(s) to the message
Esc k<attach-key>attach a PGP public key
d<edit-description>edit description on attachment
D<detach-file>detach a file
t<edit-to>edit the To field
Esc f<edit-from>edit the From field
r<edit-reply-to>edit the Reply-To field
c<edit-cc>edit the Cc field
b<edit-bcc>edit the Bcc field
y<send-message>send the message
s<edit-subject>edit the Subject
S<smime-menu>select S/MIME options
f<edit-fcc>specify an “Fcc” mailbox
p<pgp-menu>select PGP options
P<postpone-message>postpone this message until later
q<quit>quit (abort) sending the message
w<write-fcc>write the message to a folder
i<ispell>check spelling (if available on your system)
^F<forget-passphrase>wipe passphrase(s) from memory

The compose menu is also used to edit the attachments for a message which can be either files or other messages. The <attach-message> function to will prompt you for a folder to attach messages from. You can now tag messages in that folder and they will be attached to the message you are sending.

Note

Note that certain operations like composing a new mail, replying, forwarding, etc. are not permitted when you are in that folder. The %r in $status_format will change to a “A” to indicate that you are in attach-message mode.

6.2. Editing the Message Header

When editing the header because of $edit_headers being set, there are a several pseudo headers available which will not be included in sent messages but trigger special Mutt behavior.

6.2.1. Fcc: Pseudo Header

If you specify

Fcc: filename

as a header, Mutt will pick up filename just as if you had used the <edit-fcc> function in the compose menu. It can later be changed from the compose menu.

6.2.2. Attach: Pseudo Header

You can also attach files to your message by specifying

Attach: filename [ description ]

where filename is the file to attach and description is an optional string to use as the description of the attached file. Spaces in filenames have to be escaped using backslash (“\”). The file can be removed as well as more added from the compose menu.

6.2.3. Pgp: Pseudo Header

If you want to use PGP, you can specify

Pgp: [ E | S | S<id> ]

“E” selects encryption, “S” selects signing and “S<id>” selects signing with the given key, setting $pgp_sign_as permanently. The selection can later be changed in the compose menu.

6.2.4. In-Reply-To: Header

When replying to messages, the In-Reply-To: header contains the Message-Id of the message(s) you reply to. If you remove or modify its value, Mutt will not generate a References: field, which allows you to create a new message thread, for example to create a new message to a mailing list without having to enter the mailing list's address.

If you intend to start a new thread by replying, please make really sure you remove the In-Reply-To: header in your editor. Otherwise, though you'll produce a technically valid reply, some netiquette guardians will be annoyed by this so-called “thread hijacking”.

6.3. Sending Cryptographically Signed/Encrypted Messages

If you have told Mutt to PGP or S/MIME encrypt a message, it will guide you through a key selection process when you try to send the message. Mutt will not ask you any questions about keys which have a certified user ID matching one of the message recipients' mail addresses. However, there may be situations in which there are several keys, weakly certified user ID fields, or where no matching keys can be found.

In these cases, you are dropped into a menu with a list of keys from which you can select one. When you quit this menu, or Mutt can't find any matching keys, you are prompted for a user ID. You can, as usually, abort this prompt using ^G. When you do so, Mutt will return to the compose screen.

Once you have successfully finished the key selection, the message will be encrypted using the selected public keys when sent out.

Most fields of the entries in the key selection menu (see also $pgp_entry_format) have obvious meanings. But some explanations on the capabilities, flags, and validity fields are in order.

The flags sequence (“%f”) will expand to one of the flags in Table 2.13, “PGP key menu flags”.

Table 2.13. PGP key menu flags

FlagDescription
RThe key has been revoked and can't be used.
XThe key is expired and can't be used.
dYou have marked the key as disabled.
cThere are unknown critical self-signature packets.

The capabilities field (“%c”) expands to a two-character sequence representing a key's capabilities. The first character gives the key's encryption capabilities: A minus sign (“-”) means that the key cannot be used for encryption. A dot (“.”) means that it's marked as a signature key in one of the user IDs, but may also be used for encryption. The letter “e” indicates that this key can be used for encryption.

The second character indicates the key's signing capabilities. Once again, a “-” implies “not for signing”, “.” implies that the key is marked as an encryption key in one of the user-ids, and “s” denotes a key which can be used for signing.

Finally, the validity field (“%t”) indicates how well-certified a user-id is. A question mark (“?”) indicates undefined validity, a minus character (“-”) marks an untrusted association, a space character means a partially trusted association, and a plus character (“+”) indicates complete validity.

6.4. Sending Format=Flowed Messages

6.4.1. Concept

format=flowed-style messages (or f=f for short) are text/plain messages that consist of paragraphs which a receiver's mail client may reformat to its own needs which mostly means to customize line lengths regardless of what the sender sent. Technically this is achieved by letting lines of a “flowable” paragraph end in spaces except for the last line.

While for text-mode clients like Mutt it's the best way to assume only a standard 80x25 character cell terminal, it may be desired to let the receiver decide completely how to view a message.

6.4.2. Mutt Support

Mutt only supports setting the required format=flowed MIME parameter on outgoing messages if the $text_flowed variable is set, specifically it does not add the trailing spaces.

After editing the initial message text and before entering the compose menu, Mutt properly space-stuffs the message. Space-stuffing is required by RfC3676 defining format=flowed and means to prepend a space to:

  • all lines starting with a space

  • lines starting with the word “From” followed by space

  • all lines starting with “>” which is not intended to be a quote character

Note

Mutt only supports space-stuffing for the first two types of lines but not for the third: It is impossible to safely detect whether a leading > character starts a quote or not. Furthermore, Mutt only applies space-stuffing once after the initial edit is finished.

All leading spaces are to be removed by receiving clients to restore the original message prior to further processing.

6.4.3. Editor Considerations

As Mutt provides no additional features to compose f=f messages, it's completely up to the user and his editor to produce proper messages. Please consider your editor's documentation if you intend to send f=f messages.

Please note that when editing messages from the compose menu several times before really sending a mail, it's up to the user to ensure that the message is properly space-stuffed.

For example, vim provides the w flag for its formatoptions setting to assist in creating f=f messages, see :help fo-table for details.

7. Forwarding and Bouncing Mail

Bouncing and forwarding let you send an existing message to recipients that you specify. Bouncing a message sends a verbatim copy of a message to alternative addresses as if they were the message's original recipients specified in the Bcc header. Forwarding a message, on the other hand, allows you to modify the message before it is resent (for example, by adding your own comments). Bouncing is done using the <bounce> function and forwarding using the <forward> function bound to “b” and “f” respectively.

Forwarding can be done by including the original message in the new message's body (surrounded by indicating lines) or including it as a MIME attachment, depending on the value of the $mime_forward variable. Decoding of attachments, like in the pager, can be controlled by the $forward_decode and $mime_forward_decode variables, respectively. The desired forwarding format may depend on the content, therefore $mime_forward is a quadoption which, for example, can be set to “ask-no”.

The inclusion of headers is controlled by the current setting of the $weed variable, unless $mime_forward is set.

Editing the message to forward follows the same procedure as sending or replying to a message does.

8. Postponing Mail

At times it is desirable to delay sending a message that you have already begun to compose. When the <postpone-message> function is used in the compose menu, the body of your message and attachments are stored in the mailbox specified by the $postponed variable. This means that you can recall the message even if you exit Mutt and then restart it at a later time.

Once a message is postponed, there are several ways to resume it. From the command line you can use the “-p” option, or if you compose a new message from the index or pager you will be prompted if postponed messages exist. If multiple messages are currently postponed, the postponed menu will pop up and you can select which message you would like to resume.

Note

If you postpone a reply to a message, the reply setting of the message is only updated when you actually finish the message and send it. Also, you must be in the same folder with the message you replied to for the status of the message to be updated.

See also the $postpone quad-option.

mutt-1.5.21/doc/configuration.html0000644000175000017500000035446611444176766014056 00000000000000 Chapter 3. Configuration

Chapter 3. Configuration

1. Location of Initialization Files

While the default configuration (or “preferences”) make Mutt usable right out of the box, it is often desirable to tailor Mutt to suit your own tastes. When Mutt is first invoked, it will attempt to read the “system” configuration file (defaults set by your local system administrator), unless the “-n” command line option is specified. This file is typically /usr/local/share/mutt/Muttrc or /etc/Muttrc. Mutt will next look for a file named .muttrc in your home directory. If this file does not exist and your home directory has a subdirectory named .mutt, Mutt tries to load a file named .mutt/muttrc.

.muttrc is the file where you will usually place your commands to configure Mutt.

In addition, Mutt supports version specific configuration files that are parsed instead of the default files as explained above. For instance, if your system has a Muttrc-0.88 file in the system configuration directory, and you are running version 0.88 of Mutt, this file will be sourced instead of the Muttrc file. The same is true of the user configuration file, if you have a file .muttrc-0.88.6 in your home directory, when you run Mutt version 0.88.6, it will source this file instead of the default .muttrc file. The version number is the same which is visible using the “-v” command line switch or using the show-version key (default: V) from the index menu.

2. Syntax of Initialization Files

An initialization file consists of a series of commands. Each line of the file may contain one or more commands. When multiple commands are used, they must be separated by a semicolon (“;”).

Example 3.1. Multiple configuration commands per line

set realname='Mutt user' ; ignore x-

The hash mark, or pound sign (“#”), is used as a “comment” character. You can use it to annotate your initialization file. All text after the comment character to the end of the line is ignored.

Example 3.2. Commenting configuration files

my_hdr X-Disclaimer: Why are you listening to me? # This is a comment

Single quotes (“'”) and double quotes (“"”) can be used to quote strings which contain spaces or other special characters. The difference between the two types of quotes is similar to that of many popular shell programs, namely that a single quote is used to specify a literal string (one that is not interpreted for shell variables or quoting with a backslash [see next paragraph]), while double quotes indicate a string for which should be evaluated. For example, backticks are evaluated inside of double quotes, but not for single quotes.

“\” quotes the next character, just as in shells such as bash and zsh. For example, if want to put quotes “"” inside of a string, you can use “\” to force the next character to be a literal instead of interpreted character.

Example 3.3. Escaping quotes in configuration files

set realname="Michael \"MuttDude\" Elkins"

“\\” means to insert a literal “\” into the line. “\n” and “\r” have their usual C meanings of linefeed and carriage-return, respectively.

A “\” at the end of a line can be used to split commands over multiple lines as it “escapes” the line end, provided that the split points don't appear in the middle of command names. Lines are first concatenated before interpretation so that a multi-line can be commented by commenting out the first line only.

Example 3.4. Splitting long configuration commands over several lines

set status_format="some very \
long value split \
over several lines"

It is also possible to substitute the output of a Unix command in an initialization file. This is accomplished by enclosing the command in backticks (``). In Example 3.5, “Using external command's output in configuration files”, the output of the Unix command “uname -a” will be substituted before the line is parsed. Since initialization files are line oriented, only the first line of output from the Unix command will be substituted.

Example 3.5. Using external command's output in configuration files

my_hdr X-Operating-System: `uname -a`

Both environment variables and Mutt variables can be accessed by prepending “$” to the name of the variable. For example,

Example 3.6. Using environment variables in configuration files

set record=+sent_on_$HOSTNAME

will cause Mutt to save outgoing messages to a folder named “sent_on_kremvax” if the environment variable $HOSTNAME is set to “kremvax.” (See $record for details.)

Mutt expands the variable when it is assigned, not when it is used. If the value of a variable on the right-hand side of an assignment changes after the assignment, the variable on the left-hand side will not be affected.

The commands understood by Mutt are explained in the next paragraphs. For a complete list, see the command reference.

All configuration files are expected to be in the current locale as specified by the $charset variable which doesn't have a default value since it's determined by Mutt at startup. If a configuration file is not encoded in the same character set the $config_charset variable should be used: all lines starting with the next are recoded from $config_charset to $charset.

This mechanism should be avoided if possible as it has the following implications:

  • These variables should be set early in a configuration file with $charset preceding $config_charset so Mutt knows what character set to convert to.

  • If $config_charset is set, it should be set in each configuration file because the value is global and not per configuration file.

  • Because Mutt first recodes a line before it attempts to parse it, a conversion introducing question marks or other characters as part of errors (unconvertable characters, transliteration) may introduce syntax errors or silently change the meaning of certain tokens (e.g. inserting question marks into regular expressions).

3. Address Groups

Usage:

group [ -group name ...] { -rx expr ... | -addr expr ... }
ungroup [ -group name ...] { * | -rx expr ... | -addr expr ... }

Mutt supports grouping addresses logically into named groups. An address or address pattern can appear in several groups at the same time. These groups can be used in patterns (for searching, limiting and tagging) and in hooks by using group patterns. This can be useful to classify mail and take certain actions depending on in what groups the message is. For example, the mutt user's mailing list would fit into the categories “mailing list” and “mutt-related”. Using send-hook, the sender can be set to a dedicated one for writing mailing list messages, and the signature could be set to a mutt-related one for writing to a mutt list — for other lists, the list sender setting still applies but a different signature can be selected. Or, given a group only containing recipients known to accept encrypted mail, “auto-encryption” can be achieved easily.

The group command is used to directly add either addresses or regular expressions to the specified group or groups. The different categories of arguments to the group command can be in any order. The flags -rx and -addr specify what the following strings (that cannot begin with a hyphen) should be interpreted as: either a regular expression or an email address, respectively.

These address groups can also be created implicitly by the alias, lists, subscribe and alternates commands by specifying the optional -group option. For example,

alternates -group me address1 address2
alternates -group me -group work address3

would create a group named “me” which contains all your addresses and a group named “work” which contains only your work address address3. Besides many other possibilities, this could be used to automatically mark your own messages in a mailing list folder as read or use a special signature for work-related messages.

The ungroup command is used to remove addresses or regular expressions from the specified group or groups. The syntax is similar to the group command, however the special character * can be used to empty a group of all of its contents. As soon as a group gets empty because all addresses and regular expressions have been removed, it'll internally be removed, too (i.e. there cannot be an empty group). When removing regular expressions from a group, the pattern must be specified exactly as given to the group command or -group argument.

4. Defining/Using Aliases

Usage:

alias [ -group name ...] key address [ address ...]
unalias [ -group name ...] { * | key ... }

It's usually very cumbersome to remember or type out the address of someone you are communicating with. Mutt allows you to create “aliases” which map a short string to a full address.

Note

If you want to create an alias for more than one address, you must separate the addresses with a comma (“,”).

The optional -group argument to alias causes the aliased address(es) to be added to the named group.

To remove an alias or aliases (“*” means all aliases):

alias muttdude me@cs.hmc.edu (Michael Elkins)
alias theguys manny, moe, jack

Unlike other mailers, Mutt doesn't require aliases to be defined in a special file. The alias command can appear anywhere in a configuration file, as long as this file is sourced. Consequently, you can have multiple alias files, or you can have all aliases defined in your .muttrc.

On the other hand, the <create-alias> function can use only one file, the one pointed to by the $alias_file variable (which is ~/.muttrc by default). This file is not special either, in the sense that Mutt will happily append aliases to any file, but in order for the new aliases to take effect you need to explicitly source this file too.

Example 3.7. Configuring external alias files

source /usr/local/share/Mutt.aliases
source ~/.mail_aliases
set alias_file=~/.mail_aliases

To use aliases, you merely use the alias at any place in Mutt where Mutt prompts for addresses, such as the To: or Cc: prompt. You can also enter aliases in your editor at the appropriate headers if you have the $edit_headers variable set.

In addition, at the various address prompts, you can use the tab character to expand a partial alias to the full alias. If there are multiple matches, Mutt will bring up a menu with the matching aliases. In order to be presented with the full list of aliases, you must hit tab without a partial alias, such as at the beginning of the prompt or after a comma denoting multiple addresses.

In the alias menu, you can select as many aliases as you want with the select-entry key (default: <Return>), and use the exit key (default: q) to return to the address prompt.

5. Changing the Default Key Bindings

Usage:

bind map key function

This command allows you to change the default key bindings (operation invoked when pressing a key).

map specifies in which menu the binding belongs. Multiple maps may be specified by separating them with commas (no additional whitespace is allowed). The currently defined maps are:

generic

This is not a real menu, but is used as a fallback for all of the other menus except for the pager and editor modes. If a key is not defined in another menu, Mutt will look for a binding to use in this menu. This allows you to bind a key to a certain function in multiple menus instead of having multiple bind statements to accomplish the same task.

alias

The alias menu is the list of your personal aliases as defined in your .muttrc. It is the mapping from a short alias name to the full email address(es) of the recipient(s).

attach

The attachment menu is used to access the attachments on received messages.

browser

The browser is used for both browsing the local directory structure, and for listing all of your incoming mailboxes.

editor

The editor is used to allow the user to enter a single line of text, such as the To or Subject prompts in the compose menu.

index

The index is the list of messages contained in a mailbox.

compose

The compose menu is the screen used when sending a new message.

pager

The pager is the mode used to display message/attachment data, and help listings.

pgp

The pgp menu is used to select the OpenPGP keys used to encrypt outgoing messages.

smime

The smime menu is used to select the OpenSSL certificates used to encrypt outgoing messages.

postpone

The postpone menu is similar to the index menu, except is used when recalling a message the user was composing, but saved until later.

query

The query menu is the browser for results returned by $query_command.

mix

The mixmaster screen is used to select remailer options for outgoing messages (if Mutt is compiled with Mixmaster support).

key is the key (or key sequence) you wish to bind. To specify a control character, use the sequence \Cx, where x is the letter of the control character (for example, to specify control-A use “\Ca”). Note that the case of x as well as \C is ignored, so that \CA, \Ca, \cA and \ca are all equivalent. An alternative form is to specify the key as a three digit octal number prefixed with a “\” (for example \177 is equivalent to \c?). In addition, key may be a symbolic name as shown in Table 3.1, “Symbolic key names”.

Table 3.1. Symbolic key names

Symbolic nameMeaning
\ttab
<tab>tab
<backtab>backtab / shift-tab
\rcarriage return
\nnewline
\eescape
<esc>escape
<up>up arrow
<down>down arrow
<left>left arrow
<right>right arrow
<pageup>Page Up
<pagedown>Page Down
<backspace>Backspace
<delete>Delete
<insert>Insert
<enter>Enter
<return>Return
<home>Home
<end>End
<space>Space bar
<f1>function key 1
<f10>function key 10

key does not need to be enclosed in quotes unless it contains a space (“ ”) or semi-colon (“;”).

function specifies which action to take when key is pressed. For a complete list of functions, see the reference. Note that the bind expects function to be specified without angle brackets.

The special function <noop> unbinds the specified key sequence.

6. Defining Aliases for Character Sets

Usage:

charset-hook alias charset
iconv-hook charset local-charset

The charset-hook command defines an alias for a character set. This is useful to properly display messages which are tagged with a character set name not known to Mutt.

The iconv-hook command defines a system-specific name for a character set. This is helpful when your systems character conversion library insists on using strange, system-specific names for character sets.

7. Setting Variables Based Upon Mailbox

Usage:

folder-hook [!]regexp command

It is often desirable to change settings based on which mailbox you are reading. The folder-hook command provides a method by which you can execute any configuration command. regexp is a regular expression specifying in which mailboxes to execute command before loading. If a mailbox matches multiple folder-hooks, they are executed in the order given in the .muttrc.

Note

If you use the “!” shortcut for $spoolfile at the beginning of the pattern, you must place it inside of double or single quotes in order to distinguish it from the logical not operator for the expression.

Note

Settings are not restored when you leave the mailbox. For example, a command action to perform is to change the sorting method based upon the mailbox being read:

folder-hook mutt "set sort=threads"

However, the sorting method is not restored to its previous value when reading a different mailbox. To specify a default command, use the pattern “.” before other folder-hooks adjusting a value on a per-folder basis because folder-hooks are evaluated in the order given in the configuration file.

The following example will set the sort variable to date-sent for all folders but to threads for all folders containing “mutt” in their name.

Example 3.8. Setting sort method based on mailbox name

folder-hook . "set sort=date-sent"
folder-hook mutt "set sort=threads"

8. Keyboard Macros

Usage:

macro menu key sequence [ description ]

Macros are useful when you would like a single key to perform a series of actions. When you press key in menu menu, Mutt will behave as if you had typed sequence. So if you have a common sequence of commands you type, you can create a macro to execute those commands with a single key or fewer keys.

menu is the map which the macro will be bound in. Multiple maps may be specified by separating multiple menu arguments by commas. Whitespace may not be used in between the menu arguments and the commas separating them.

key and sequence are expanded by the same rules as the key bindings with some additions. The first is that control characters in sequence can also be specified as ^x. In order to get a caret (“^”) you need to use ^^. Secondly, to specify a certain key such as up or to invoke a function directly, you can use the format <key name> and <function name>. For a listing of key names see the section on key bindings. Functions are listed in the reference.

The advantage with using function names directly is that the macros will work regardless of the current key bindings, so they are not dependent on the user having particular key definitions. This makes them more robust and portable, and also facilitates defining of macros in files used by more than one user (e.g., the system Muttrc).

Optionally you can specify a descriptive text after sequence, which is shown in the help screens if they contain a description.

Note

Macro definitions (if any) listed in the help screen(s), are silently truncated at the screen width, and are not wrapped.

9. Using Color and Mono Video Attributes

Usage:

color object foreground background
color { header | body } foreground background regexp
color index foreground background pattern
uncolor { index | header | body } { * | pattern ... }

If your terminal supports color, you can spice up Mutt by creating your own color scheme. To define the color of an object (type of information), you must specify both a foreground color and a background color (it is not possible to only specify one or the other).

header and body match regexp in the header/body of a message, index matches pattern (see Section 3, “Patterns: Searching, Limiting and Tagging”) in the message index.

object can be one of:

  • attachment

  • bold (highlighting bold patterns in the body of messages)

  • error (error messages printed by Mutt)

  • hdrdefault (default color of the message header in the pager)

  • indicator (arrow or bar used to indicate the current item in a menu)

  • markers (the “+” markers at the beginning of wrapped lines in the pager)

  • message (informational messages)

  • normal

  • quoted (text matching $quote_regexp in the body of a message)

  • quoted1, quoted2, ..., quotedN (higher levels of quoting)

  • search (highlighting of words in the pager)

  • signature

  • status (mode lines used to display info about the mailbox or message)

  • tilde (the “~” used to pad blank lines in the pager)

  • tree (thread tree drawn in the message index and attachment menu)

  • underline (highlighting underlined patterns in the body of messages)

foreground and background can be one of the following:

  • white

  • black

  • green

  • magenta

  • blue

  • cyan

  • yellow

  • red

  • default

  • colorx

foreground can optionally be prefixed with the keyword bright to make the foreground color boldfaced (e.g., brightred).

If your terminal supports it, the special keyword default can be used as a transparent color. The value brightdefault is also valid. If Mutt is linked against the S-Lang library, you also need to set the $COLORFGBG environment variable to the default colors of your terminal for this to work; for example (for Bourne-like shells):

set COLORFGBG="green;black"
export COLORFGBG

Note

The S-Lang library requires you to use the lightgray and brown keywords instead of white and yellow when setting this variable.

Note

The uncolor command can be applied to the index, header and body objects only. It removes entries from the list. You must specify the same pattern specified in the color command for it to be removed. The pattern “*” is a special token which means to clear the color list of all entries.

Mutt also recognizes the keywords color0, color1, ..., colorN-1 (N being the number of colors supported by your terminal). This is useful when you remap the colors for your display (for example by changing the color associated with color2 for your xterm), since color names may then lose their normal meaning.

If your terminal does not support color, it is still possible change the video attributes through the use of the “mono” command. Usage:

mono object attribute
mono { header | body } attribute regexp
mono index attribute pattern
unmono { index | header | body } { * | pattern ... }

For object, see the color command. attribute can be one of the following:

  • none

  • bold

  • underline

  • reverse

  • standout

10. Message Header Display

10.1. Header Display

When displaying a message in the pager, Mutt folds long header lines at $wrap columns. Though there're precise rules about where to break and how, Mutt always folds headers using a tab for readability. (Note that the sending side is not affected by this, Mutt tries to implement standards compliant folding.)

10.2. Selecting Headers

Usage:

ignore pattern [ pattern ...]
unignore { * | pattern ... }

Messages often have many header fields added by automatic processing systems, or which may not seem useful to display on the screen. This command allows you to specify header fields which you don't normally want to see in the pager.

You do not need to specify the full header field name. For example, “ignore content-” will ignore all header fields that begin with the pattern “content-”. “ignore *” will ignore all headers.

To remove a previously added token from the list, use the “unignore” command. The “unignore” command will make Mutt display headers with the given pattern. For example, if you do “ignore x-” it is possible to “unignore x-mailer”.

“unignore *” will remove all tokens from the ignore list.

Example 3.9. Header weeding

# Sven's draconian header weeding
ignore *
unignore from date subject to cc
unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
unignore posted-to:

10.3. Ordering Displayed Headers

Usage:

hdr_order header [ header ...]
unhdr_order { * | header ... }

With the hdr_order command you can specify an order in which Mutt will attempt to present these headers to you when viewing messages.

“unhdr_order *” will clear all previous headers from the order list, thus removing the header order effects set by the system-wide startup file.

Example 3.10. Configuring header display order

hdr_order From Date: From: To: Cc: Subject:

11. Alternative Addresses

Usage:

alternates [ -group name ...] regexp [ regexp ...]
unalternates [ -group name ...] { * | regexp ... }

With various functions, Mutt will treat messages differently, depending on whether you sent them or whether you received them from someone else. For instance, when replying to a message that you sent to a different party, Mutt will automatically suggest to send the response to the original message's recipients — responding to yourself won't make much sense in many cases. (See $reply_to.)

Many users receive e-mail under a number of different addresses. To fully use Mutt's features here, the program must be able to recognize what e-mail addresses you receive mail under. That's the purpose of the alternates command: It takes a list of regular expressions, each of which can identify an address under which you receive e-mail.

As addresses are matched using regular expressions and not exact strict comparisons, you should make sure you specify your addresses as precise as possible to avoid mismatches. For example, if you specify:

alternates user@example

Mutt will consider “some-user@example” as being your address, too which may not be desired. As a solution, in such cases addresses should be specified as:

alternates '^user@example$'

The -group flag causes all of the subsequent regular expressions to be added to the named group.

The unalternates command can be used to write exceptions to alternates patterns. If an address matches something in an alternates command, but you nonetheless do not think it is from you, you can list a more precise pattern under an unalternates command.

To remove a regular expression from the alternates list, use the unalternates command with exactly the same regexp. Likewise, if the regexp for an alternates command matches an entry on the unalternates list, that unalternates entry will be removed. If the regexp for unalternates is “*”, all entries on alternates will be removed.

12. Mailing Lists

Usage:

lists [ -group name ...] regexp [ regexp ...]
unlists { * | regexp ... }
subscribe [ -group name ...] regexp [ regexp ...]
unsubscribe { * | regexp ... }

Mutt has a few nice features for handling mailing lists. In order to take advantage of them, you must specify which addresses belong to mailing lists, and which mailing lists you are subscribed to. Mutt also has limited support for auto-detecting mailing lists: it supports parsing mailto: links in the common List-Post: header which has the same effect as specifying the list address via the lists command (except the group feature). Once you have done this, the <list-reply> function will work for all known lists. Additionally, when you send a message to a subscribed list, Mutt will add a Mail-Followup-To header to tell other users' mail user agents not to send copies of replies to your personal address.

Note

The Mail-Followup-To header is a non-standard extension which is not supported by all mail user agents. Adding it is not bullet-proof against receiving personal CCs of list messages. Also note that the generation of the Mail-Followup-To header is controlled by the $followup_to configuration variable since it's common practice on some mailing lists to send Cc upon replies (which is more a group- than a list-reply).

More precisely, Mutt maintains lists of patterns for the addresses of known and subscribed mailing lists. Every subscribed mailing list is known. To mark a mailing list as known, use the list command. To mark it as subscribed, use subscribe.

You can use regular expressions with both commands. To mark all messages sent to a specific bug report's address on Debian's bug tracking system as list mail, for instance, you could say

subscribe [0-9]*.*@bugs.debian.org

as it's often sufficient to just give a portion of the list's e-mail address.

Specify as much of the address as you need to to remove ambiguity. For example, if you've subscribed to the Mutt mailing list, you will receive mail addressed to mutt-users@mutt.org. So, to tell Mutt that this is a mailing list, you could add lists mutt-users@ to your initialization file. To tell Mutt that you are subscribed to it, add subscribe mutt-users to your initialization file instead. If you also happen to get mail from someone whose address is mutt-users@example.com, you could use lists ^mutt-users@mutt\\.org$ or subscribe ^mutt-users@mutt\\.org$ to match only mail from the actual list.

The -group flag adds all of the subsequent regular expressions to the named address group in addition to adding to the specified address list.

The “unlists” command is used to remove a token from the list of known and subscribed mailing-lists. Use “unlists *” to remove all tokens.

To remove a mailing list from the list of subscribed mailing lists, but keep it on the list of known mailing lists, use unsubscribe.

13. Using Multiple Spool Mailboxes

Usage:

mbox-hook [!]pattern mailbox

This command is used to move read messages from a specified mailbox to a different mailbox automatically when you quit or change folders. pattern is a regular expression specifying the mailbox to treat as a “spool” mailbox and mailbox specifies where mail should be saved when read.

Unlike some of the other hook commands, only the first matching pattern is used (it is not possible to save read mail in more than a single mailbox).

14. Monitoring Incoming Mail

Usage:

mailboxes mailbox [ mailbox ...]
unmailboxes { * | mailbox ... }

This command specifies folders which can receive mail and which will be checked for new messages periodically.

folder can either be a local file or directory (Mbox/Mmdf or Maildir/Mh). If Mutt was built with POP and/or IMAP support, folder can also be a POP/IMAP folder URL. The URL syntax is described in Section 1.2, “URL Syntax”, POP and IMAP are described in Section 3, “POP3 Support” and Section 4, “IMAP Support” respectively.

Mutt provides a number of advanced features for handling (possibly many) folders and new mail within them, please refer to Section 10, “New Mail Detection” for details (including in what situations and how often Mutt checks for new mail).

The “unmailboxes” command is used to remove a token from the list of folders which receive mail. Use “unmailboxes *” to remove all tokens.

Note

The folders in the mailboxes command are resolved when the command is executed, so if these names contain shortcut characters (such as “=” and “!”), any variable definition that affects these characters (like $folder and $spoolfile) should be set before the mailboxes command. If none of these shortcuts are used, a local path should be absolute as otherwise Mutt tries to find it relative to the directory from where Mutt was started which may not always be desired.

15. User-Defined Headers

Usage:

my_hdr string
unmy_hdr { * | field ... }

The my_hdr command allows you to create your own header fields which will be added to every message you send and appear in the editor if $edit_headers is set.

For example, if you would like to add an “Organization:” header field to all of your outgoing messages, you can put the command something like shown in Example 3.11, “Defining custom headers” in your .muttrc.

Example 3.11. Defining custom headers

my_hdr Organization: A Really Big Company, Anytown, USA

Note

Space characters are not allowed between the keyword and the colon (“:”). The standard for electronic mail (RFC2822) says that space is illegal there, so Mutt enforces the rule.

If you would like to add a header field to a single message, you should either set the $edit_headers variable, or use the <edit-headers> function (default: “E”) in the compose menu so that you can edit the header of your message along with the body.

To remove user defined header fields, use the unmy_hdr command. You may specify an asterisk (“*”) to remove all header fields, or the fields to remove. For example, to remove all “To” and “Cc” header fields, you could use:

unmy_hdr to cc

16. Specify Default Save Mailbox

Usage:

save-hook [!]pattern mailbox

This command is used to override the default mailbox used when saving messages. mailbox will be used as the default if the message matches pattern, see Message Matching in Hooks for information on the exact format.

To provide more flexibility and good defaults, Mutt applies the expandos of $index_format to mailbox after it was expanded.

Example 3.12. Using %-expandos in save-hook

# default: save all to ~/Mail/<author name>
save-hook . ~/Mail/%F

# save from me@turing.cs.hmc.edu and me@cs.hmc.edu to $folder/elkins
save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins

# save from aol.com to $folder/spam
save-hook aol\\.com$ +spam

Also see the fcc-save-hook command.

17. Specify Default Fcc: Mailbox When Composing

Usage:

fcc-hook [!]pattern mailbox

This command is used to save outgoing mail in a mailbox other than $record. Mutt searches the initial list of message recipients for the first matching regexp and uses mailbox as the default Fcc: mailbox. If no match is found the message will be saved to $record mailbox.

To provide more flexibility and good defaults, Mutt applies the expandos of $index_format to mailbox after it was expanded.

See Message Matching in Hooks for information on the exact format of pattern.

fcc-hook [@.]aol\\.com$ +spammers

...will save a copy of all messages going to the aol.com domain to the `+spammers' mailbox by default. Also see the fcc-save-hook command.

18. Specify Default Save Filename and Default Fcc: Mailbox at Once

Usage:

fcc-save-hook [!]pattern mailbox

This command is a shortcut, equivalent to doing both a fcc-hook and a save-hook with its arguments, including %-expansion on mailbox according to $index_format.

19. Change Settings Based Upon Message Recipients

Usage:

reply-hook [!]pattern command
send-hook [!]pattern command
send2-hook [!]pattern command

These commands can be used to execute arbitrary configuration commands based upon recipients of the message. pattern is used to match the message, see Message Matching in Hooks for details. command is executed when pattern matches.

reply-hook is matched against the message you are replying to, instead of the message you are sending. send-hook is matched against all messages, both new and replies.

Note

reply-hooks are matched before the send-hook, regardless of the order specified in the user's configuration file.

send2-hook is matched every time a message is changed, either by editing it, or by using the compose menu to change its recipients or subject. send2-hook is executed after send-hook, and can, e.g., be used to set parameters such as the $sendmail variable depending on the message's sender address.

For each type of send-hook or reply-hook, when multiple matches occur, commands are executed in the order they are specified in the .muttrc (for that type of hook).

Example: send-hook mutt "set mime_forward signature=''"

Another typical use for this command is to change the values of the $attribution, $signature and $locale variables in order to change the language of the attributions and signatures based upon the recipients.

Note

send-hook's are only executed once after getting the initial list of recipients. Adding a recipient after replying or editing the message will not cause any send-hook to be executed, similarly if $autoedit is set (as then the initial list of recipients is empty). Also note that my_hdr commands which modify recipient headers, or the message's subject, don't have any effect on the current message when executed from a send-hook.

20. Change Settings Before Formatting a Message

Usage:

message-hook [!]pattern command

This command can be used to execute arbitrary configuration commands before viewing or formatting a message based upon information about the message. command is executed if the pattern matches the message to be displayed. When multiple matches occur, commands are executed in the order they are specified in the .muttrc.

See Message Matching in Hooks for information on the exact format of pattern.

Example:

message-hook ~A 'set pager=builtin'
message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'

21. Choosing the Cryptographic Key of the Recipient

Usage:

crypt-hook pattern keyid

When encrypting messages with PGP/GnuPG or OpenSSL, you may want to associate a certain key with a given e-mail address automatically, either because the recipient's public key can't be deduced from the destination address, or because, for some reasons, you need to override the key Mutt would normally use. The crypt-hook command provides a method by which you can specify the ID of the public key to be used when encrypting messages to a certain recipient.

The meaning of keyid is to be taken broadly in this context: You can either put a numerical key ID here, an e-mail address, or even just a real name.

22. Adding Key Sequences to the Keyboard Buffer

Usage:

push string

This command adds the named string to the keyboard buffer. The string may contain control characters, key names and function names like the sequence string in the macro command. You may use it to automatically run a sequence of commands at startup, or when entering certain folders. For example, Example 3.13, “Embedding push in folder-hook” shows how to automatically collapse all threads when entering a folder.

Example 3.13. Embedding push in folder-hook

folder-hook . 'push <collapse-all>'

For using functions like shown in the example, it's important to use angle brackets (“<” and “>”) to make Mutt recognize the input as a function name. Otherwise it will simulate individual just keystrokes, i.e. “push collapse-all” would be interpreted as if you had typed “c”, followed by “o”, followed by “l”, ..., which is not desired and may lead to very unexpected behavior.

Keystrokes can be used, too, but are less portable because of potentially changed key bindings. With default bindings, this is equivalent to the above example:

folder-hook . 'push \eV'

because it simulates that Esc+V was pressed (which is the default binding of <collapse-all>).

23. Executing Functions

Usage:

exec function [ function ...]

This command can be used to execute any function. Functions are listed in the function reference. “exec function” is equivalent to “push <function>”.

24. Message Scoring

Usage:

score pattern value
unscore { * | pattern ... }

The score commands adds value to a message's score if pattern matches it. pattern is a string in the format described in the patterns section (note: For efficiency reasons, patterns which scan information not available in the index, such as ~b, ~B or ~h, may not be used). value is a positive or negative integer. A message's final score is the sum total of all matching score entries. However, you may optionally prefix value with an equal sign (“=”) to cause evaluation to stop at a particular entry if there is a match. Negative final scores are rounded up to 0.

The unscore command removes score entries from the list. You must specify the same pattern specified in the score command for it to be removed. The pattern “*” is a special token which means to clear the list of all score entries.

25. Spam Detection

Usage:

spam pattern format
nospam { * | pattern }

Mutt has generalized support for external spam-scoring filters. By defining your spam patterns with the spam and nospam commands, you can limit, search, and sort your mail based on its spam attributes, as determined by the external filter. You also can display the spam attributes in your index display using the %H selector in the $index_format variable. (Tip: try %?H?[%H] ? to display spam tags only when they are defined for a given message.)

Your first step is to define your external filter's spam patterns using the spam command. pattern should be a regular expression that matches a header in a mail message. If any message in the mailbox matches this regular expression, it will receive a “spam tag” or “spam attribute” (unless it also matches a nospam pattern — see below.) The appearance of this attribute is entirely up to you, and is governed by the format parameter. format can be any static text, but it also can include back-references from the pattern expression. (A regular expression “back-reference” refers to a sub-expression contained within parentheses.) %1 is replaced with the first back-reference in the regex, %2 with the second, etc.

To match spam tags, mutt needs the corresponding header information which is always the case for local and POP folders but not for IMAP in the default configuration. Depending on the spam header to be analyzed, $imap_headers may need to be adjusted.

If you're using multiple spam filters, a message can have more than one spam-related header. You can define spam patterns for each filter you use. If a message matches two or more of these patterns, and the $spam_separator variable is set to a string, then the message's spam tag will consist of all the format strings joined together, with the value of $spam_separator separating them.

For example, suppose one uses DCC, SpamAssassin, and PureMessage, then the configuration might look like in Example 3.14, “Configuring spam detection”.

Example 3.14. Configuring spam detection

spam "X-DCC-.*-Metrics:.*(....)=many"         "90+/DCC-%1"
spam "X-Spam-Status: Yes"                     "90+/SA"
spam "X-PerlMX-Spam: .*Probability=([0-9]+)%" "%1/PM"
set spam_separator=", "

If then a message is received that DCC registered with “many” hits under the “Fuz2” checksum, and that PureMessage registered with a 97% probability of being spam, that message's spam tag would read 90+/DCC-Fuz2, 97/PM. (The four characters before “=many” in a DCC report indicate the checksum used — in this case, “Fuz2”.)

If the $spam_separator variable is unset, then each spam pattern match supersedes the previous one. Instead of getting joined format strings, you'll get only the last one to match.

The spam tag is what will be displayed in the index when you use %H in the $index_format variable. It's also the string that the ~H pattern-matching expression matches against for <search> and <limit> functions. And it's what sorting by spam attribute will use as a sort key.

That's a pretty complicated example, and most people's actual environments will have only one spam filter. The simpler your configuration, the more effective Mutt can be, especially when it comes to sorting.

Generally, when you sort by spam tag, Mutt will sort lexically — that is, by ordering strings alphanumerically. However, if a spam tag begins with a number, Mutt will sort numerically first, and lexically only when two numbers are equal in value. (This is like UNIX's sort -n.) A message with no spam attributes at all — that is, one that didn't match any of your spam patterns — is sorted at lowest priority. Numbers are sorted next, beginning with 0 and ranging upward. Finally, non-numeric strings are sorted, with “a” taking lower priority than “z”. Clearly, in general, sorting by spam tags is most effective when you can coerce your filter to give you a raw number. But in case you can't, Mutt can still do something useful.

The nospam command can be used to write exceptions to spam patterns. If a header pattern matches something in a spam command, but you nonetheless do not want it to receive a spam tag, you can list a more precise pattern under a nospam command.

If the pattern given to nospam is exactly the same as the pattern on an existing spam list entry, the effect will be to remove the entry from the spam list, instead of adding an exception. Likewise, if the pattern for a spam command matches an entry on the nospam list, that nospam entry will be removed. If the pattern for nospam is “*”, all entries on both lists will be removed. This might be the default action if you use spam and nospam in conjunction with a folder-hook.

You can have as many spam or nospam commands as you like. You can even do your own primitive spam detection within Mutt — for example, if you consider all mail from MAILER-DAEMON to be spam, you can use a spam command like this:

spam "^From: .*MAILER-DAEMON"       "999"

26. Setting and Querying Variables

26.1. Variable Types

Mutt supports these types of configuration variables:

boolean

A boolean expression, either “yes” or “no”.

number

A signed integer number in the range -32768 to 32767.

string

Arbitrary text.

path

A specialized string for representing paths including support for mailbox shortcuts (see Section 8, “Mailbox Shortcuts”) as well as tilde (“~”) for a user's home directory and more.

quadoption

Like a boolean but triggers a prompt when set to “ask-yes” or “ask-no” with “yes” and “no” preselected respectively.

sort order

A specialized string allowing only particular words as values depending on the variable.

regular expression

A regular expression, see Section 2, “Regular Expressions” for an introduction.

folder magic

Specifies the type of folder to use: mbox, mmdf, mh or maildir. Currently only used to determine the type for newly created folders.

e-mail address

An e-mail address either with or without realname. The older “user@example.org (Joe User)” form is supported but strongly deprecated.

user-defined

Arbitrary text, see Section 26.3, “User-Defined Variables” for details.

26.2. Commands

The following commands are available to manipulate and query variables:

Usage:

set { [ no | inv ] variable | variable=value } [...]
toggle variable [ variable ...]
unset variable [ variable ...]
reset variable [ variable ...]

This command is used to set (and unset) configuration variables. There are four basic types of variables: boolean, number, string and quadoption. boolean variables can be set (true) or unset (false). number variables can be assigned a positive integer value. string variables consist of any number of printable characters and must be enclosed in quotes if they contain spaces or tabs. You may also use the escape sequences “\n” and “\t” for newline and tab, respectively. quadoption variables are used to control whether or not to be prompted for certain actions, or to specify a default action. A value of yes will cause the action to be carried out automatically as if you had answered yes to the question. Similarly, a value of no will cause the action to be carried out as if you had answered “no.” A value of ask-yes will cause a prompt with a default answer of “yes” and ask-no will provide a default answer of “no.”

Prefixing a variable with “no” will unset it. Example: set noaskbcc.

For boolean variables, you may optionally prefix the variable name with inv to toggle the value (on or off). This is useful when writing macros. Example: set invsmart_wrap.

The toggle command automatically prepends the inv prefix to all specified variables.

The unset command automatically prepends the no prefix to all specified variables.

Using the <enter-command> function in the index menu, you can query the value of a variable by prefixing the name of the variable with a question mark:

set ?allow_8bit

The question mark is actually only required for boolean and quadoption variables.

The reset command resets all given variables to the compile time defaults (hopefully mentioned in this manual). If you use the command set and prefix the variable with “&” this has the same behavior as the reset command.

With the reset command there exists the special variable “all”, which allows you to reset all variables to their system defaults.

26.3. User-Defined Variables

26.3.1. Introduction

Along with the variables listed in the Configuration variables section, Mutt supports user-defined variables with names starting with my_ as in, for example, my_cfgdir.

The set command either creates a custom my_ variable or changes its value if it does exist already. The unset and reset commands remove the variable entirely.

Since user-defined variables are expanded in the same way that environment variables are (except for the shell-escape command and backtick expansion), this feature can be used to make configuration files more readable.

26.3.2. Examples

The following example defines and uses the variable my_cfgdir to abbreviate the calls of the source command:

Example 3.15. Using user-defined variables for config file readability

set my_cfgdir = $HOME/mutt/config

source $my_cfgdir/hooks
source $my_cfgdir/macros
# more source commands...

A custom variable can also be used in macros to backup the current value of another variable. In the following example, the value of the $delete is changed temporarily while its original value is saved as my_delete. After the macro has executed all commands, the original value of $delete is restored.

Example 3.16. Using user-defined variables for backing up other config option values

macro pager ,x '\
<enter-command>set my_delete=$delete<enter>\
<enter-command>set delete=yes<enter>\
...\
<enter-command>set delete=$my_delete<enter>'

Since Mutt expands such values already when parsing the configuration file(s), the value of $my_delete in the last example would be the value of $delete exactly as it was at that point during parsing the configuration file. If another statement would change the value for $delete later in the same or another file, it would have no effect on $my_delete. However, the expansion can be deferred to runtime, as shown in the next example, when escaping the dollar sign.

Example 3.17. Deferring user-defined variable expansion to runtime

macro pager <PageDown> "\
<enter-command> set my_old_pager_stop=\$pager_stop pager_stop<Enter>\
<next-page>\
<enter-command> set pager_stop=\$my_old_pager_stop<Enter>\
<enter-command> unset my_old_pager_stop<Enter>"

Note that there is a space between <enter-command> and the set configuration command, preventing Mutt from recording the macro's commands into its history.

26.4. Type Conversions

Variables are always assigned string values which Mutt parses into its internal representation according to the type of the variable, for example an integer number for numeric types. For all queries (including $-expansion) the value is converted from its internal type back into string. As a result, any variable can be assigned any value given that its content is valid for the target. This also counts for custom variables which are of type string. In case of parsing errors, Mutt will print error messages. Example 3.18, “Type conversions using variables” demonstrates type conversions.

Example 3.18. Type conversions using variables

set my_lines = "5"                # value is string "5"
set pager_index_lines = $my_lines # value is integer 5

set my_sort = "date-received"     # value is string "date-received"
set sort = "last-$my_sort"        # value is sort last-date-received

set my_inc = $read_inc            # value is string "10" (default of $read_inc)
set my_foo = $my_inc              # value is string "10"

These assignments are all valid. If, however, the value of $my_lines would have been “five” (or something else that cannot be parsed into a number), the assignment to $pager_index_lines would have produced an error message.

Type conversion applies to all configuration commands which take arguments. But please note that every expanded value of a variable is considered just a single token. A working example is:

set my_pattern = "~A"
set my_number = "10"

# same as: score ~A +10
score $my_pattern +$my_number

What does not work is:

set my_mx = "+mailbox1 +mailbox2"
mailboxes $my_mx +mailbox3

because the value of $my_mx is interpreted as a single mailbox named “+mailbox1 +mailbox2” and not two distinct mailboxes.

27. Reading Initialization Commands From Another File

Usage:

source filename

This command allows the inclusion of initialization commands from other files. For example, I place all of my aliases in ~/.mail_aliases so that I can make my ~/.muttrc readable and keep my aliases private.

If the filename begins with a tilde (“~”), it will be expanded to the path of your home directory.

If the filename ends with a vertical bar (“|”), then filename is considered to be an executable program from which to read input (e.g. source ~/bin/myscript|).

28. Removing Hooks

Usage:

unhook { * | hook-type }

This command permits you to flush hooks you have previously defined. You can either remove all hooks by giving the “*” character as an argument, or you can remove all hooks of a specific type by saying something like unhook send-hook.

29. Format Strings

29.1. Basic usage

Format strings are a general concept you'll find in several locations through the Mutt configuration, especially in the $index_format, $pager_format, $status_format, and other related variables. These can be very straightforward, and it's quite possible you already know how to use them.

The most basic format string element is a percent symbol followed by another character. For example, %s represents a message's Subject: header in the $index_format variable. The “expandos” available are documented with each format variable, but there are general modifiers available with all formatting expandos, too. Those are our concern here.

Some of the modifiers are borrowed right out of C (though you might know them from Perl, Python, shell, or another language). These are the [-]m.n modifiers, as in %-12.12s. As with such programming languages, these modifiers allow you to specify the minimum and maximum size of the resulting string, as well as its justification. If the “-” sign follows the percent, the string will be left-justified instead of right-justified. If there's a number immediately following that, it's the minimum amount of space the formatted string will occupy — if it's naturally smaller than that, it will be padded out with spaces. If a decimal point and another number follow, that's the maximum space allowable — the string will not be permitted to exceed that width, no matter its natural size. Each of these three elements is optional, so that all these are legal format strings: %-12s, %4c, %.15F and %-12.15L.

Mutt adds some other modifiers to format strings. If you use an equals symbol (=) as a numeric prefix (like the minus above), it will force the string to be centered within its minimum space range. For example, %=14y will reserve 14 characters for the %y expansion — that's the X-Label: header, in $index_format. If the expansion results in a string less than 14 characters, it will be centered in a 14-character space. If the X-Label for a message were “test”, that expansion would look like “     test     ”.

There are two very little-known modifiers that affect the way that an expando is replaced. If there is an underline (“_”) character between any format modifiers (as above) and the expando letter, it will expands in all lower case. And if you use a colon (“:”), it will replace all decimal points with underlines.

29.2. Conditionals

Depending on the format string variable, some of its sequences can be used to optionally print a string if their value is nonzero. For example, you may only want to see the number of flagged messages if such messages exist, since zero is not particularly meaningful. To optionally print a string based upon one of the above sequences, the following construct is used:

%?<sequence_char>?<optional_string>?

where sequence_char is an expando, and optional_string is the string you would like printed if sequence_char is nonzero. optional_string may contain other sequences as well as normal text, but you may not nest optional strings.

Here is an example illustrating how to optionally print the number of new messages in a mailbox in $status_format:

%?n?%n new messages.?

You can also switch between two strings using the following construct:

%?<sequence_char>?<if_string>&<else_string>?

If the value of sequence_char is non-zero, if_string will be expanded, otherwise else_string will be expanded.

29.3. Filters

Any format string ending in a vertical bar (“|”) will be expanded and piped through the first word in the string, using spaces as separator. The string returned will be used for display. If the returned string ends in %, it will be passed through the formatter a second time. This allows the filter to generate a replacement format string including % expandos.

All % expandos in a format string are expanded before the script is called so that:

Example 3.19. Using external filters in format strings

set status_format="script.sh '%r %f (%L)'|"

will make Mutt expand %r, %f and %L before calling the script. The example also shows that arguments can be quoted: the script will receive the expanded string between the single quotes as the only argument.

A practical example is the mutt_xtitle script installed in the samples subdirectory of the Mutt documentation: it can be used as filter for $status_format to set the current terminal's title, if supported.

29.4. Padding

In most format strings, Mutt supports different types of padding using special %-expandos:

%|X

When this occurs, Mutt will fill the rest of the line with the character X. For example, filling the rest of the line with dashes is done by setting:

set status_format = "%v on %h: %B: %?n?%n&no? new messages %|-"
%>X

Since the previous expando stops at the end of line, there must be a way to fill the gap between two items via the %>X expando: it puts as many characters X in between two items so that the rest of the line will be right-justified. For example, to not put the version string and hostname the above example on the left but on the right and fill the gap with spaces, one might use (note the space after %>):

set status_format = "%B: %?n?%n&no? new messages %> (%v on %h)"
%*X

Normal right-justification will print everything to the left of the %>, displaying padding and whatever lies to the right only if there's room. By contrast, “soft-fill” gives priority to the right-hand side, guaranteeing space to display it and showing padding only if there's still room. If necessary, soft-fill will eat text leftwards to make room for rightward text. For example, to right-justify the subject making sure as much as possible of it fits on screen, one might use (note two spaces after %* : the second ensures there's a space between the truncated right-hand side and the subject):

set index_format="%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?)%*  %s"
mutt-1.5.21/doc/mimesupport.html0000644000175000017500000014231311444176767013556 00000000000000 Chapter 5. Mutt's MIME Support

Chapter 5. Mutt's MIME Support

Quite a bit of effort has been made to make Mutt the premier text-mode MIME MUA. Every effort has been made to provide the functionality that the discerning MIME user requires, and the conformance to the standards wherever possible. When configuring Mutt for MIME, there are two extra types of configuration files which Mutt uses. One is the mime.types file, which contains the mapping of file extensions to IANA MIME types. The other is the mailcap file, which specifies the external commands to use for handling specific MIME types.

1. Using MIME in Mutt

1.1. MIME Overview

MIME is short for “Multipurpose Internet Mail Extension” and describes mechanisms to internationalize and structure mail messages. Before the introduction of MIME, messages had a single text part and were limited to us-ascii header and content. With MIME, messages can have attachments (and even attachments which itself have attachments and thus form a tree structure), nearly arbitrary characters can be used for sender names, recipients and subjects.

Besides the handling of non-ascii characters in message headers, to Mutt the most important aspect of MIME are so-called MIME types. These are constructed using a major and minor type separated by a forward slash. These specify details about the content that follows. Based upon these, Mutt decides how to handle this part. The most popular major type is “text” with minor types for plain text, HTML and various other formats. Major types also exist for images, audio, video and of course general application data (e.g. to separate cryptographically signed data with a signature, send office documents, and in general arbitrary binary data). There's also the multipart major type which represents the root of a subtree of MIME parts. A list of supported MIME types can be found in Table 5.1, “Supported MIME types”.

MIME also defines a set of encoding schemes for transporting MIME content over the network: 7bit, 8bit, quoted-printable, base64 and binary. There're some rules when to choose what for encoding headers and/or body (if needed), and Mutt will in general make a good choice.

Mutt does most of MIME encoding/decoding behind the scenes to form messages conforming to MIME on the sending side. On reception, it can be flexibly configured as to how what MIME structure is displayed (and if it's displayed): these decisions are based on the content's MIME type. There are three areas/menus in dealing with MIME: the pager (while viewing a message), the attachment menu and the compose menu.

1.2. Viewing MIME Messages in the Pager

When you select a message from the index and view it in the pager, Mutt decodes as much of a message as possible to a text representation. Mutt internally supports a number of MIME types, including the text major type (with all minor types), the message/rfc822 (mail messages) type and some multipart types. In addition, it recognizes a variety of PGP MIME types, including PGP/MIME and application/pgp.

Mutt will denote attachments with a couple lines describing them. These lines are of the form:

[-- Attachment #1: Description --]
[-- Type: text/plain, Encoding: 7bit, Size: 10000 --]

Where the Description is the description or filename given for the attachment, and the Encoding is one of the already mentioned content encodings.

If Mutt cannot deal with a MIME type, it will display a message like:

[-- image/gif is unsupported (use 'v' to view this part) --]

1.3. The Attachment Menu

The default binding for <view-attachments> is “v”, which displays the attachment menu for a message. The attachment menu displays a list of the attachments in a message. From the attachment menu, you can save, print, pipe, delete, and view attachments. You can apply these operations to a group of attachments at once, by tagging the attachments and by using the <tag-prefix> operator. You can also reply to the current message from this menu, and only the current attachment (or the attachments tagged) will be quoted in your reply. You can view attachments as text, or view them using the mailcap viewer definition (the mailcap mechanism is explained later in detail).

Finally, you can apply the usual message-related functions (like <resend-message>, and the <reply> and <forward> functions) to attachments of type message/rfc822.

See table Table 9.7, “Default Attachment Menu Bindings” for all available functions.

1.4. The Compose Menu

The compose menu is the menu you see before you send a message. It allows you to edit the recipient list, the subject, and other aspects of your message. It also contains a list of the attachments of your message, including the main body. From this menu, you can print, copy, filter, pipe, edit, compose, review, and rename an attachment or a list of tagged attachments. You can also modifying the attachment information, notably the type, encoding and description.

Attachments appear as follows by default:

- 1 [text/plain, 7bit, 1K]           /tmp/mutt-euler-8082-0 <no description>
  2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description>

The “-” denotes that Mutt will delete the file after sending (or postponing, or canceling) the message. It can be toggled with the <toggle-unlink> command (default: u). The next field is the MIME content-type, and can be changed with the <edit-type> command (default: ^T). The next field is the encoding for the attachment, which allows a binary message to be encoded for transmission on 7bit links. It can be changed with the <edit-encoding> command (default: ^E). The next field is the size of the attachment, rounded to kilobytes or megabytes. The next field is the filename, which can be changed with the <rename-file> command (default: R). The final field is the description of the attachment, and can be changed with the <edit-description> command (default: d). See $attach_format for a full list of available expandos to format this display to your needs.

2. MIME Type Configuration with mime.types

To get most out of MIME, it's important that a MIME part's content type matches the content as closely as possible so that the recipient's client can automatically select the right viewer for the content. However, there's no reliable for Mutt to know how to detect every possible file type. Instead, it uses a simple plain text mapping file that specifies what file extension corresponds to what MIME type. This file is called mime.types.

When you add an attachment to your mail message, Mutt searches your personal mime.types file at $HOME/.mime.types, and then the system mime.types file at /usr/local/share/mutt/mime.types or /etc/mime.types

Each line starts with the full MIME type, followed by a space and space-separated list of file extensions. For example you could use:

Example 5.1. mime.types

application/postscript          ps eps
application/pgp                 pgp
audio/x-aiff                    aif aifc aiff

A sample mime.types file comes with the Mutt distribution, and should contain most of the MIME types you are likely to use.

If Mutt can not determine the MIME type by the extension of the file you attach, it will look at the file. If the file is free of binary information, Mutt will assume that the file is plain text, and mark it as text/plain. If the file contains binary information, then Mutt will mark it as application/octet-stream. You can change the MIME type that Mutt assigns to an attachment by using the <edit-type> command from the compose menu (default: ^T), see Table 5.1, “Supported MIME types” for supported major types. Mutt recognizes all of these if the appropriate entry is found in the mime.types file. Non-recognized mime types should only be used if the recipient of the message is likely to be expecting such attachments.

Table 5.1. Supported MIME types

MIME major typeStandardDescription
applicationyesGeneral application data
audioyesAudio data
imageyesImage data
messageyesMail messages, message status information
modelyesVRML and other modeling data
multipartyesContainer for other MIME parts
textyesText data
videoyesVideo data
chemicalnoMostly molecular data

MIME types are not arbitrary, they need to be assigned by IANA.

3. MIME Viewer Configuration with Mailcap

Mutt supports RFC 1524 MIME Configuration, in particular the Unix specific format specified in Appendix A of RFC 1524. This file format is commonly referred to as the “mailcap” format. Many MIME compliant programs utilize the mailcap format, allowing you to specify handling for all MIME types in one place for all programs. Programs known to use this format include Firefox, lynx and metamail.

In order to handle various MIME types that Mutt doesn't have built-in support for, it parses a series of external configuration files to find an external handler. The default search string for these files is a colon delimited list containing the following files:

  1. $HOME/.mailcap

  2. $PKGDATADIR/mailcap

  3. $SYSCONFDIR/mailcap

  4. /etc/mailcap

  5. /usr/etc/mailcap

  6. /usr/local/etc/mailcap

where $HOME is your home directory. The $PKGDATADIR and the $SYSCONFDIR directories depend on where Mutt is installed: the former is the default for shared data, the latter for system configuration files.

The default search path can be obtained by running the following command:

mutt -nF /dev/null -Q mailcap_path

In particular, the metamail distribution will install a mailcap file, usually as /usr/local/etc/mailcap, which contains some baseline entries.

3.1. The Basics of the Mailcap File

A mailcap file consists of a series of lines which are comments, blank, or definitions.

A comment line consists of a # character followed by anything you want.

A blank line is blank.

A definition line consists of a content type, a view command, and any number of optional fields. Each field of a definition line is divided by a semicolon “;” character.

The content type is specified in the MIME standard “type/subtype” notation. For example, text/plain, text/html, image/gif, etc. In addition, the mailcap format includes two formats for wildcards, one using the special “*” subtype, the other is the implicit wild, where you only include the major type. For example, image/*, or video will match all image types and video types, respectively.

The view command is a Unix command for viewing the type specified. There are two different types of commands supported. The default is to send the body of the MIME message to the command on stdin. You can change this behavior by using %s as a parameter to your view command. This will cause Mutt to save the body of the MIME message to a temporary file, and then call the view command with the %s replaced by the name of the temporary file. In both cases, Mutt will turn over the terminal to the view program until the program quits, at which time Mutt will remove the temporary file if it exists. This means that mailcap does not work out of the box with programs which detach themselves from the terminal right after starting, like open on Mac OS X. In order to nevertheless use these programs with mailcap, you probably need custom shell scripts.

So, in the simplest form, you can send a text/plain message to the external pager more on standard input:

text/plain; more

Or, you could send the message as a file:

text/plain; more %s

Perhaps you would like to use lynx to interactively view a text/html message:

text/html; lynx %s

In this case, lynx does not support viewing a file from standard input, so you must use the %s syntax.

Note

Some older versions of lynx contain a bug where they will check the mailcap file for a viewer for text/html. They will find the line which calls lynx, and run it. This causes lynx to continuously spawn itself to view the object.

On the other hand, maybe you don't want to use lynx interactively, you just want to have it convert the text/html to text/plain, then you can use:

text/html; lynx -dump %s | more

Perhaps you wish to use lynx to view text/html files, and a pager on all other text formats, then you would use the following:

text/html; lynx %s
text/*; more

3.2. Secure Use of Mailcap

The interpretation of shell meta-characters embedded in MIME parameters can lead to security problems in general. Mutt tries to quote parameters in expansion of %s syntaxes properly, and avoids risky characters by substituting them, see the $mailcap_sanitize variable.

Although Mutt's procedures to invoke programs with mailcap seem to be safe, there are other applications parsing mailcap, maybe taking less care of it. Therefore you should pay attention to the following rules:

Keep the %-expandos away from shell quoting. Don't quote them with single or double quotes. Mutt does this for you, the right way, as should any other program which interprets mailcap. Don't put them into backtick expansions. Be highly careful with evil statements, and avoid them if possible at all. Trying to fix broken behavior with quotes introduces new leaks — there is no alternative to correct quoting in the first place.

If you have to use the %-expandos' values in context where you need quoting or backtick expansions, put that value into a shell variable and reference the shell variable where necessary, as in the following example (using $charset inside the backtick expansion is safe, since it is not itself subject to any further expansion):

text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1

3.3. Advanced Mailcap Usage

3.3.1. Optional Fields

In addition to the required content-type and view command fields, you can add semi-colon “;” separated fields to set flags and other options. Mutt recognizes the following optional fields:

copiousoutput

This flag tells Mutt that the command passes possibly large amounts of text on standard output. This causes Mutt to invoke a pager (either the internal pager or the external pager defined by the pager variable) on the output of the view command. Without this flag, Mutt assumes that the command is interactive. One could use this to replace the pipe to more in the lynx -dump example in the Basic section:

text/html; lynx -dump %s ; copiousoutput

This will cause lynx to format the text/html output as text/plain and Mutt will use your standard pager to display the results.

Note that when using the built-in pager, only entries with this flag will be considered a handler for a MIME type — all other entries will be ignored.

needsterminal

Mutt uses this flag when viewing attachments with auto_view, in order to decide whether it should honor the setting of the $wait_key variable or not. When an attachment is viewed using an interactive program, and the corresponding mailcap entry has a needsterminal flag, Mutt will use $wait_key and the exit status of the program to decide if it will ask you to press a key after the external program has exited. In all other situations it will not prompt you for a key.

compose=<command>

This flag specifies the command to use to create a new attachment of a specific MIME type. Mutt supports this from the compose menu.

composetyped=<command>

This flag specifies the command to use to create a new attachment of a specific MIME type. This command differs from the compose command in that Mutt will expect standard MIME headers on the data. This can be used to specify parameters, filename, description, etc. for a new attachment. Mutt supports this from the compose menu.

print=<command>

This flag specifies the command to use to print a specific MIME type. Mutt supports this from the attachment and compose menus.

edit=<command>

This flag specifies the command to use to edit a specific MIME type. Mutt supports this from the compose menu, and also uses it to compose new attachments. Mutt will default to the defined $editor for text attachments.

nametemplate=<template>

This field specifies the format for the file denoted by %s in the command fields. Certain programs will require a certain file extension, for instance, to correctly view a file. For instance, lynx will only interpret a file as text/html if the file ends in .html. So, you would specify lynx as a text/html viewer with a line in the mailcap file like:

text/html; lynx %s; nametemplate=%s.html
test=<command>

This field specifies a command to run to test whether this mailcap entry should be used. The command is defined with the command expansion rules defined in the next section. If the command returns 0, then the test passed, and Mutt uses this entry. If the command returns non-zero, then the test failed, and Mutt continues searching for the right entry. Note that the content-type must match before Mutt performs the test. For example:

text/html; firefox -remote 'openURL(%s)' ; test=RunningX
text/html; lynx %s

In this example, Mutt will run the program RunningX which will return 0 if the X Window manager is running, and non-zero if it isn't. If RunningX returns 0, then Mutt will run firefox to display the text/html object. If RunningX doesn't return 0, then Mutt will go on to the next entry and use lynx to display the text/html object.

3.3.2. Search Order

When searching for an entry in the mailcap file, Mutt will search for the most useful entry for its purpose. For instance, if you are attempting to print an image/gif, and you have the following entries in your mailcap file, Mutt will search for an entry with the print command:

image/*;        xv %s
image/gif;      ; print= anytopnm %s | pnmtops | lpr; \
                nametemplate=%s.gif

Mutt will skip the image/* entry and use the image/gif entry with the print command.

In addition, you can use this with auto_view to denote two commands for viewing an attachment, one to be viewed automatically, the other to be viewed interactively from the attachment menu using the <view-mailcap> function (bound to “m” by default). In addition, you can then use the test feature to determine which viewer to use interactively depending on your environment.

text/html;      firefox -remote 'openURL(%s)' ; test=RunningX
text/html;      lynx %s; nametemplate=%s.html
text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput

For auto_view, Mutt will choose the third entry because of the copiousoutput tag. For interactive viewing, Mutt will run the program RunningX to determine if it should use the first entry. If the program returns non-zero, Mutt will use the second entry for interactive viewing. The last entry is for inline display in the pager and the <view-attach> function in the attachment menu.

Entries with the copiousoutput tag should always be specified as the last one per type. For non-interactive use, the last entry will then actually be the first matching one with the tag set. For non-interactive use, only copiousoutput-tagged entries are considered. For interactive use, Mutt ignores this tag and treats all entries equally. Therefore, if not specified last, all following entries without this tag would never be considered for <view-attach> because the copiousoutput before them matched already.

3.3.3. Command Expansion

The various commands defined in the mailcap files are passed to the /bin/sh shell using the system(3) function. Before the command is passed to /bin/sh -c, it is parsed to expand various special parameters with information from Mutt. The keywords Mutt expands are:

%s

As seen in the basic mailcap section, this variable is expanded to a filename specified by the calling program. This file contains the body of the message to view/print/edit or where the composing program should place the results of composition. In addition, the use of this keyword causes Mutt to not pass the body of the message to the view/print/edit program on stdin.

%t

Mutt will expand %t to the text representation of the content type of the message in the same form as the first parameter of the mailcap definition line, i.e. text/html or image/gif.

%{<parameter>}

Mutt will expand this to the value of the specified parameter from the Content-Type: line of the mail message. For instance, if your mail message contains:

Content-Type: text/plain; charset=iso-8859-1

then Mutt will expand %{charset} to “iso-8859-1”. The default metamail mailcap file uses this feature to test the charset to spawn an xterm using the right charset to view the message.

\%

This will be replaced by a literal %.

Mutt does not currently support the %F and %n keywords specified in RFC 1524. The main purpose of these parameters is for multipart messages, which is handled internally by Mutt.

3.4. Example Mailcap Files

This mailcap file is fairly simple and standard:

# I'm always running X :)
video/*;        xanim %s > /dev/null
image/*;        xv %s > /dev/null

# I'm always running firefox (if my computer had more memory, maybe)
text/html;      firefox -remote 'openURL(%s)'

This mailcap file shows quite a number of examples:

# Use xanim to view all videos   Xanim produces a header on startup,
# send that to /dev/null so I don't see it
video/*;        xanim %s > /dev/null

# Send html to a running firefox by remote
text/html;      firefox -remote 'openURL(%s)'; test=RunningFirefox

# If I'm not running firefox but I am running X, start firefox on the
# object
text/html;      firefox %s; test=RunningX

# Else use lynx to view it as text
text/html;      lynx %s

# This version would convert the text/html to text/plain
text/html;      lynx -dump %s; copiousoutput

# I use enscript to print text in two columns to a page
text/*;         more %s; print=enscript -2Gr %s

# Firefox adds a flag to tell itself to view jpegs internally
image/jpeg;xv %s; x-mozilla-flags=internal

# Use xv to view images if I'm running X
# In addition, this uses the \ to extend the line and set my editor
# for images
image/*;xv %s; test=RunningX; \
        edit=xpaint %s

# Convert images to text using the netpbm tools
image/*;  (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm |
pbmtoascii -1x2 ) 2>&1 ; copiousoutput

# Send excel spreadsheets to my NT box
application/ms-excel; open.pl %s

4. MIME Autoview

Usage:

auto_view mimetype [ mimetype ...]
unauto_view { * | mimetype ... }

In addition to explicitly telling Mutt to view an attachment with the MIME viewer defined in the mailcap file from the attachments menu, Mutt has support for automatically viewing MIME attachments while in the pager.

For this to work, you must define a viewer in the mailcap file which uses the copiousoutput option to denote that it is non-interactive. Usually, you also use the entry to convert the attachment to a text representation which you can view in the pager.

You then use the auto_view configuration command to list the content-types that you wish to view automatically. For instance, if you set it to:

auto_view text/html application/x-gunzip \
  application/postscript image/gif application/x-tar-gz

...Mutt would try to find corresponding entries for rendering attachments of these types as text. A corresponding mailcap could look like:

text/html;      lynx -dump %s; copiousoutput; nametemplate=%s.html
image/*;        anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | \
                pgmtopbm | pbmtoascii ; copiousoutput
application/x-gunzip;   gzcat; copiousoutput
application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput
application/postscript; ps2ascii %s; copiousoutput

unauto_view can be used to remove previous entries from the auto_view list. This can be used with message-hook to autoview messages based on size, etc. “unauto_view *” will remove all previous entries.

5. MIME Multipart/Alternative

The multipart/alternative container type only has child MIME parts which represent the same content in an alternative way. This is often used to send HTML messages which contain an alternative plain text representation.

Mutt has some heuristics for determining which attachment of a multipart/alternative type to display:

  1. First, Mutt will check the alternative_order list to determine if one of the available types is preferred. It consists of a number of MIME types in order, including support for implicit and explicit wildcards. For example:

    alternative_order text/enriched text/plain text \
      application/postscript image/*
    
  2. Next, Mutt will check if any of the types have a defined auto_view, and use that.

  3. Failing that, Mutt will look for any text type.

  4. As a last attempt, Mutt will look for any type it knows how to handle.

To remove a MIME type from the alternative_order list, use the unalternative_order command.

6. Attachment Searching and Counting

If you ever lose track of attachments in your mailboxes, Mutt's attachment-counting and -searching support might be for you. You can make your message index display the number of qualifying attachments in each message, or search for messages by attachment count. You also can configure what kinds of attachments qualify for this feature with the attachments and unattachments commands.

In order to provide this information, Mutt needs to fully MIME-parse all messages affected first. This can slow down operation especially for remote mail folders such as IMAP because all messages have to be downloaded first regardless whether the user really wants to view them or not though using Section 7.2, “Body Caching” usually means to download the message just once.

The syntax is:

attachments { + | - }disposition mime-type
unattachments { + | - }disposition mime-type
attachments ?

disposition is the attachment's Content-Disposition type — either inline or attachment. You can abbreviate this to I or A.

Disposition is prefixed by either a “+” symbol or a “-” symbol. If it's a “+”, you're saying that you want to allow this disposition and MIME type to qualify. If it's a “-”, you're saying that this disposition and MIME type is an exception to previous “+” rules. There are examples below of how this is useful.

mime-type is the MIME type of the attachment you want the command to affect. A MIME type is always of the format major/minor, where major describes the broad category of document you're looking at, and minor describes the specific type within that category. The major part of mime-type must be literal text (or the special token “*”), but the minor part may be a regular expression. (Therefore, “*/.*” matches any MIME type.)

The MIME types you give to the attachments directive are a kind of pattern. When you use the attachments directive, the patterns you specify are added to a list. When you use unattachments, the pattern is removed from the list. The patterns are not expanded and matched to specific MIME types at this time — they're just text in a list. They're only matched when actually evaluating a message.

Some examples might help to illustrate. The examples that are not commented out define the default configuration of the lists.

Example 5.2. Attachment counting


# Removing a pattern from a list removes that pattern literally. It
# does not remove any type matching the pattern.
#
#  attachments   +A */.*
#  attachments   +A image/jpeg
#  unattachments +A */.*
#
# This leaves "attached" image/jpeg files on the allowed attachments
# list. It does not remove all items, as you might expect, because the
# second */.* is not a matching expression at this time.
#
# Remember: "unattachments" only undoes what "attachments" has done!
# It does not trigger any matching on actual messages.

# Qualify any MIME part with an "attachment" disposition, EXCEPT for
# text/x-vcard and application/pgp parts. (PGP parts are already known
# to mutt, and can be searched for with ~g, ~G, and ~k.)
#
# I've added x-pkcs7 to this, since it functions (for S/MIME)
# analogously to PGP signature attachments. S/MIME isn't supported
# in a stock mutt build, but we can still treat it specially here.
#

attachments   +A */.*
attachments   -A text/x-vcard application/pgp.*
attachments   -A application/x-pkcs7-.*


# Discount all MIME parts with an "inline" disposition, unless they're
# text/plain. (Why inline a text/plain part unless it's external to the
# message flow?)

attachments   +I text/plain


# These two lines make Mutt qualify MIME containers.  (So, for example,
# a message/rfc822 forward will count as an attachment.)  The first
# line is unnecessary if you already have "attach-allow */.*", of
# course.  These are off by default!  The MIME elements contained
# within a message/* or multipart/* are still examined, even if the
# containers themselves don't qualify.

#attachments  +A message/.* multipart/.*
#attachments  +I message/.* multipart/.*


## You probably don't really care to know about deleted attachments.
attachments   -A message/external-body
attachments   -I message/external-body

Entering the command “attachments ?” as a command will list your current settings in Muttrc format, so that it can be pasted elsewhere.

7. MIME Lookup

Usage:

mime-lookup mimetype [ mimetype ...]
unmime-lookup { * | mimetype ... }

Mutt's mime_lookup list specifies a list of MIME types that should not be treated according to their mailcap entry. This option is designed to deal with binary types such as application/octet-stream. When an attachment's MIME type is listed in mime_lookup, then the extension of the filename will be compared to the list of extensions in the mime.types file. The MIME type associated with this extension will then be used to process the attachment according to the rules in the mailcap file and according to any other configuration options (such as auto_view) specified. Common usage would be:

mime_lookup application/octet-stream application/X-Lotus-Manuscript

In addition, the unmime_lookup command may be used to disable this feature for any particular MIME type if it had been set, for example, in a global .muttrc.

mutt-1.5.21/doc/advancedusage.html0000644000175000017500000023177111444176767013773 00000000000000 Chapter 4. Advanced Usage

Chapter 4. Advanced Usage

1. Character Set Handling

A “character set” is basically a mapping between bytes and glyphs and implies a certain character encoding scheme. For example, for the ISO 8859 family of character sets, an encoding of 8bit per character is used. For the Unicode character set, different character encodings may be used, UTF-8 being the most popular. In UTF-8, a character is represented using a variable number of bytes ranging from 1 to 4.

Since Mutt is a command-line tool run from a shell, and delegates certain tasks to external tools (such as an editor for composing/editing messages), all of these tools need to agree on a character set and encoding. There exists no way to reliably deduce the character set a plain text file has. Interoperability is gained by the use of well-defined environment variables. The full set can be printed by issuing locale on the command line.

Upon startup, Mutt determines the character set on its own using routines that inspect locale-specific environment variables. Therefore, it is generally not necessary to set the $charset variable in Mutt. It may even be counter-productive as Mutt uses system and library functions that derive the character set themselves and on which Mutt has no influence. It's safest to let Mutt work out the locale setup itself.

If you happen to work with several character sets on a regular basis, it's highly advisable to use Unicode and an UTF-8 locale. Unicode can represent nearly all characters in a message at the same time. When not using a Unicode locale, it may happen that you receive messages with characters not representable in your locale. When displaying such a message, or replying to or forwarding it, information may get lost possibly rendering the message unusable (not only for you but also for the recipient, this breakage is not reversible as lost information cannot be guessed).

A Unicode locale makes all conversions superfluous which eliminates the risk of conversion errors. It also eliminates potentially wrong expectations about the character set between Mutt and external programs.

The terminal emulator used also must be properly configured for the current locale. Terminal emulators usually do not derive the locale from environment variables, they need to be configured separately. If the terminal is incorrectly configured, Mutt may display random and unexpected characters (question marks, octal codes, or just random glyphs), format strings may not work as expected, you may not be abled to enter non-ascii characters, and possible more. Data is always represented using bytes and so a correct setup is very important as to the machine, all character sets “look” the same.

Warning: A mismatch between what system and library functions think the locale is and what Mutt was told what the locale is may make it behave badly with non-ascii input: it will fail at seemingly random places. This warning is to be taken seriously since not only local mail handling may suffer: sent messages may carry wrong character set information the receiver has too deal with. The need to set $charset directly in most cases points at terminal and environment variable setup problems, not Mutt problems.

A list of officially assigned and known character sets can be found at IANA, a list of locally supported locales can be obtained by running locale -a.

2. Regular Expressions

All string patterns in Mutt including those in more complex patterns must be specified using regular expressions (regexp) in the “POSIX extended” syntax (which is more or less the syntax used by egrep and GNU awk). For your convenience, we have included below a brief description of this syntax.

The search is case sensitive if the pattern contains at least one upper case letter, and case insensitive otherwise.

Note

“\” must be quoted if used for a regular expression in an initialization command: “\\”.

A regular expression is a pattern that describes a set of strings. Regular expressions are constructed analogously to arithmetic expressions, by using various operators to combine smaller expressions.

Note

The regular expression can be enclosed/delimited by either " or ' which is useful if the regular expression includes a white-space character. See Syntax of Initialization Files for more information on " and ' delimiter processing. To match a literal " or ' you must preface it with \ (backslash).

The fundamental building blocks are the regular expressions that match a single character. Most characters, including all letters and digits, are regular expressions that match themselves. Any metacharacter with special meaning may be quoted by preceding it with a backslash.

The period “.” matches any single character. The caret “^” and the dollar sign “$” are metacharacters that respectively match the empty string at the beginning and end of a line.

A list of characters enclosed by “[” and “]” matches any single character in that list; if the first character of the list is a caret “^” then it matches any character not in the list. For example, the regular expression [0123456789] matches any single digit. A range of ASCII characters may be specified by giving the first and last characters, separated by a hyphen “-”. Most metacharacters lose their special meaning inside lists. To include a literal “]” place it first in the list. Similarly, to include a literal “^” place it anywhere but first. Finally, to include a literal hyphen “-” place it last.

Certain named classes of characters are predefined. Character classes consist of “[:”, a keyword denoting the class, and “:]”. The following classes are defined by the POSIX standard in Table 4.1, “POSIX regular expression character classes”

Table 4.1. POSIX regular expression character classes

Character classDescription
[:alnum:]Alphanumeric characters
[:alpha:]Alphabetic characters
[:blank:]Space or tab characters
[:cntrl:]Control characters
[:digit:]Numeric characters
[:graph:]Characters that are both printable and visible. (A space is printable, but not visible, while an “a” is both)
[:lower:]Lower-case alphabetic characters
[:print:]Printable characters (characters that are not control characters)
[:punct:]Punctuation characters (characters that are not letter, digits, control characters, or space characters)
[:space:]Space characters (such as space, tab and formfeed, to name a few)
[:upper:]Upper-case alphabetic characters
[:xdigit:]Characters that are hexadecimal digits

A character class is only valid in a regular expression inside the brackets of a character list.

Note

Note that the brackets in these class names are part of the symbolic names, and must be included in addition to the brackets delimiting the bracket list. For example, [[:digit:]] is equivalent to [0-9].

Two additional special sequences can appear in character lists. These apply to non-ASCII character sets, which can have single symbols (called collating elements) that are represented with more than one character, as well as several characters that are equivalent for collating or sorting purposes:

Collating Symbols

A collating symbol is a multi-character collating element enclosed in “[.” and “.]”. For example, if “ch” is a collating element, then [[.ch.]] is a regexp that matches this collating element, while [ch] is a regexp that matches either “c” or “h”.

Equivalence Classes

An equivalence class is a locale-specific name for a list of characters that are equivalent. The name is enclosed in “[=” and “=]”. For example, the name “e” might be used to represent all of “e” with grave (“¨â€), “e” with acute (“İ”) and “e”. In this case, [[=e=]] is a regexp that matches any of: “e” with grave (“¨â€), “e” with acute (“İ”) and “e”.

A regular expression matching a single character may be followed by one of several repetition operators described in Table 4.2, “Regular expression repetition operators”.

Table 4.2. Regular expression repetition operators

OperatorDescription
?The preceding item is optional and matched at most once
*The preceding item will be matched zero or more times
+The preceding item will be matched one or more times
{n}The preceding item is matched exactly n times
{n,}The preceding item is matched n or more times
{,m}The preceding item is matched at most m times
{n,m}The preceding item is matched at least n times, but no more than m times

Two regular expressions may be concatenated; the resulting regular expression matches any string formed by concatenating two substrings that respectively match the concatenated subexpressions.

Two regular expressions may be joined by the infix operator “|”; the resulting regular expression matches any string matching either subexpression.

Repetition takes precedence over concatenation, which in turn takes precedence over alternation. A whole subexpression may be enclosed in parentheses to override these precedence rules.

Note

If you compile Mutt with the included regular expression engine, the following operators may also be used in regular expressions as described in Table 4.3, “GNU regular expression extensions”.

Table 4.3. GNU regular expression extensions

ExpressionDescription
\\yMatches the empty string at either the beginning or the end of a word
\\BMatches the empty string within a word
\\<Matches the empty string at the beginning of a word
\\>Matches the empty string at the end of a word
\\wMatches any word-constituent character (letter, digit, or underscore)
\\WMatches any character that is not word-constituent
\\`Matches the empty string at the beginning of a buffer (string)
\\'Matches the empty string at the end of a buffer

Please note however that these operators are not defined by POSIX, so they may or may not be available in stock libraries on various systems.

3. Patterns: Searching, Limiting and Tagging

3.1. Pattern Modifier

Many of Mutt's commands allow you to specify a pattern to match (limit, tag-pattern, delete-pattern, etc.). Table 4.4, “Pattern modifiers” shows several ways to select messages.

Table 4.4. Pattern modifiers

Pattern modifierDescription
~Aall messages
~b EXPRmessages which contain EXPR in the message body
=b STRINGmessages which contain STRING in the message body. If IMAP is enabled, searches for STRING on the server, rather than downloading each message and searching it locally.
~B EXPRmessages which contain EXPR in the whole message
~c EXPRmessages carbon-copied to EXPR
%c GROUPmessages carbon-copied to any member of GROUP
~C EXPRmessages either to: or cc: EXPR
%C GROUPmessages either to: or cc: to any member of GROUP
~d [MIN]-[MAX]messages with “date-sent” in a Date range
~Ddeleted messages
~e EXPRmessages which contains EXPR in the “Sender” field
%e GROUPmessages which contain a member of GROUP in the “Sender” field
~Eexpired messages
~Fflagged messages
~f EXPRmessages originating from EXPR
%f GROUPmessages originating from any member of GROUP
~gcryptographically signed messages
~Gcryptographically encrypted messages
~h EXPRmessages which contain EXPR in the message header
~H EXPRmessages with a spam attribute matching EXPR
~i EXPRmessages which match EXPR in the “Message-ID” field
~kmessages which contain PGP key material
~L EXPRmessages either originated or received by EXPR
%L GROUPmessage either originated or received by any member of GROUP
~lmessages addressed to a known mailing list
~m [MIN]-[MAX]messages in the range MIN to MAX *)
~n [MIN]-[MAX]messages with a score in the range MIN to MAX *)
~Nnew messages
~Oold messages
~pmessages addressed to you (consults alternates)
~Pmessages from you (consults alternates)
~Qmessages which have been replied to
~r [MIN]-[MAX]messages with “date-received” in a Date range
~Rread messages
~s EXPRmessages having EXPR in the “Subject” field.
~Ssuperseded messages
~t EXPRmessages addressed to EXPR
~Ttagged messages
~umessages addressed to a subscribed mailing list
~Uunread messages
~vmessages part of a collapsed thread.
~Vcryptographically verified messages
~x EXPRmessages which contain EXPR in the “References” or “In-Reply-To” field
~X [MIN]-[MAX]messages with MIN to MAX attachments *)
~y EXPRmessages which contain EXPR in the “X-Label” field
~z [MIN]-[MAX]messages with a size in the range MIN to MAX *) **)
~=duplicated messages (see $duplicate_threads)
~$unreferenced messages (requires threaded view)
~(PATTERN)messages in threads containing messages matching PATTERN, e.g. all threads containing messages from you: ~(~P)

Where EXPR is a regular expression, and GROUP is an address group.

*) The forms “<[MAX]”, “>[MIN]”, “[MIN]-” and “-[MAX]” are allowed, too.

**) The suffixes “K” and “M” are allowed to specify kilobyte and megabyte respectively.

Special attention has to be payed when using regular expressions inside of patterns. Specifically, Mutt's parser for these patterns will strip one level of backslash (“\”), which is normally used for quoting. If it is your intention to use a backslash in the regular expression, you will need to use two backslashes instead (“\\”). You can force Mutt to treat EXPR as a simple string instead of a regular expression by using = instead of ~ in the pattern name. For example, =b *.* will find all messages that contain the literal string “*.*”. Simple string matches are less powerful than regular expressions but can be considerably faster. This is especially true for IMAP folders, because string matches can be performed on the server instead of by fetching every message. IMAP treats =h specially: it must be of the form “header: substring” and will not partially match header names. The substring part may be omitted if you simply wish to find messages containing a particular header without regard to its value.

Patterns matching lists of addresses (notably c, C, p, P and t) match if there is at least one match in the whole list. If you want to make sure that all elements of that list match, you need to prefix your pattern with “^”. This example matches all mails which only has recipients from Germany.

Example 4.1. Matching all addresses in address lists

^~C \.de$

3.2. Simple Searches

Mutt supports two versions of so called “simple searches”. These are issued if the query entered for searching, limiting and similar operations does not seem to contain a valid pattern modifier (i.e. it does not contain one of these characters: “~”, “=” or “%”). If the query is supposed to contain one of these special characters, they must be escaped by prepending a backslash (“\”).

The first type is by checking whether the query string equals a keyword case-insensitively from Table 4.5, “Simple search keywords”: If that is the case, Mutt will use the shown pattern modifier instead. If a keyword would conflict with your search keyword, you need to turn it into a regular expression to avoid matching the keyword table. For example, if you want to find all messages matching “flag” (using $simple_search) but don't want to match flagged messages, simply search for “[f]lag”.

Table 4.5. Simple search keywords

KeywordPattern modifier
all~A
.~A
^~A
del~D
flag~F
new~N
old~O
repl~Q
read~R
tag~T
unread~U

The second type of simple search is to build a complex search pattern using $simple_search as a template. Mutt will insert your query properly quoted and search for the composed complex query.

3.3. Nesting and Boolean Operators

Logical AND is performed by specifying more than one criterion. For example:

~t mutt ~f elkins

would select messages which contain the word “mutt” in the list of recipients and that have the word “elkins” in the “From” header field.

Mutt also recognizes the following operators to create more complex search patterns:

  • ! — logical NOT operator

  • | — logical OR operator

  • () — logical grouping operator

Here is an example illustrating a complex search pattern. This pattern will select all messages which do not contain “mutt” in the “To” or “Cc” field and which are from “elkins”.

Example 4.2. Using boolean operators in patterns

!(~t mutt|~c mutt) ~f elkins

Here is an example using white space in the regular expression (note the “'” and “"” delimiters). For this to match, the mail's subject must match the “^Junk +From +Me$” and it must be from either “Jim +Somebody” or “Ed +SomeoneElse”:

'~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'

Note

If a regular expression contains parenthesis, or a vertical bar ("|"), you must enclose the expression in double or single quotes since those characters are also used to separate different parts of Mutt's pattern language. For example: ~f "me@(mutt\.org|cs\.hmc\.edu)" Without the quotes, the parenthesis wouldn't end. This would be separated to two OR'd patterns: ~f me@(mutt\.org and cs\.hmc\.edu). They are never what you want.

3.4. Searching by Date

Mutt supports two types of dates, absolute and relative.

3.4.1. Absolute Dates

Dates must be in DD/MM/YY format (month and year are optional, defaulting to the current month and year). An example of a valid range of dates is:

Limit to messages matching: ~d 20/1/95-31/10

If you omit the minimum (first) date, and just specify “-DD/MM/YY”, all messages before the given date will be selected. If you omit the maximum (second) date, and specify “DD/MM/YY-”, all messages after the given date will be selected. If you specify a single date with no dash (“-”), only messages sent on the given date will be selected.

You can add error margins to absolute dates. An error margin is a sign (+ or -), followed by a digit, followed by one of the units in Table 4.6, “Date units”. As a special case, you can replace the sign by a “*” character, which is equivalent to giving identical plus and minus error margins.

Table 4.6. Date units

UnitDescription
yYears
mMonths
wWeeks
dDays

Example: To select any messages two weeks around January 15, 2001, you'd use the following pattern:

Limit to messages matching: ~d 15/1/2001*2w

3.4.2. Relative Dates

This type of date is relative to the current date, and may be specified as:

  • >offset for messages older than offset units

  • <offset for messages newer than offset units

  • =offset for messages exactly offset units old

offset is specified as a positive number with one of the units from Table 4.6, “Date units”.

Example: to select messages less than 1 month old, you would use

Limit to messages matching: ~d <1m

Note

All dates used when searching are relative to the local time zone, so unless you change the setting of your $index_format to include a %[...] format, these are not the dates shown in the main index.

4. Using Tags

Sometimes it is desirable to perform an operation on a group of messages all at once rather than one at a time. An example might be to save messages to a mailing list to a separate folder, or to delete all messages with a given subject. To tag all messages matching a pattern, use the <tag-pattern> function, which is bound to “shift-T” by default. Or you can select individual messages by hand using the <tag-message> function, which is bound to “t” by default. See patterns for Mutt's pattern matching syntax.

Once you have tagged the desired messages, you can use the “tag-prefix” operator, which is the “;” (semicolon) key by default. When the “tag-prefix” operator is used, the next operation will be applied to all tagged messages if that operation can be used in that manner. If the $auto_tag variable is set, the next operation applies to the tagged messages automatically, without requiring the “tag-prefix”.

In macros or push commands, you can use the <tag-prefix-cond> operator. If there are no tagged messages, Mutt will “eat” the rest of the macro to abort it's execution. Mutt will stop “eating” the macro when it encounters the <end-cond> operator; after this operator the rest of the macro will be executed as normal.

5. Using Hooks

A hook is a concept found in many other programs which allows you to execute arbitrary commands before performing some operation. For example, you may wish to tailor your configuration based upon which mailbox you are reading, or to whom you are sending mail. In the Mutt world, a hook consists of a regular expression or pattern along with a configuration option/command. See:

for specific details on each type of hook available.

Note

If a hook changes configuration settings, these changes remain effective until the end of the current Mutt session. As this is generally not desired, a “default” hook needs to be added before all other hooks of that type to restore configuration defaults.

Example 4.3. Specifying a “default” hook

send-hook . 'unmy_hdr From:'
send-hook ~C'^b@b\.b$' my_hdr from: c@c.c

In Example 4.3, “Specifying a “default” hook”, by default the value of $from and $realname is not overridden. When sending messages either To: or Cc: to <b@b.b>, the From: header is changed to <c@c.c>.

5.1. Message Matching in Hooks

Hooks that act upon messages (message-hook, reply-hook, send-hook, send2-hook, save-hook, fcc-hook) are evaluated in a slightly different manner. For the other types of hooks, a regular expression is sufficient. But in dealing with messages a finer grain of control is needed for matching since for different purposes you want to match different criteria.

Mutt allows the use of the search pattern language for matching messages in hook commands. This works in exactly the same way as it would when limiting or searching the mailbox, except that you are restricted to those operators which match information Mutt extracts from the header of the message (i.e., from, to, cc, date, subject, etc.).

For example, if you wanted to set your return address based upon sending mail to a specific address, you could do something like:

send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>'

which would execute the given command when sending mail to me@cs.hmc.edu.

However, it is not required that you write the pattern to match using the full searching language. You can still specify a simple regular expression like the other hooks, in which case Mutt will translate your pattern into the full language, using the translation specified by the $default_hook variable. The pattern is translated at the time the hook is declared, so the value of $default_hook that is in effect at that time will be used.

6. External Address Queries

Mutt supports connecting to external directory databases such as LDAP, ph/qi, bbdb, or NIS through a wrapper script which connects to Mutt using a simple interface. Using the $query_command variable, you specify the wrapper command to use. For example:

set query_command = "mutt_ldap_query.pl %s"

The wrapper script should accept the query on the command-line. It should return a one line message, then each matching response on a single line, each line containing a tab separated address then name then some other optional information. On error, or if there are no matching addresses, return a non-zero exit code and a one line error message.

An example multiple response output:

Searching database ... 20 entries ... 3 matching:
me@cs.hmc.edu           Michael Elkins  mutt dude
blong@fiction.net       Brandon Long    mutt and more
roessler@does-not-exist.org        Thomas Roessler mutt pgp

There are two mechanisms for accessing the query function of Mutt. One is to do a query from the index menu using the <query> function (default: Q). This will prompt for a query, then bring up the query menu which will list the matching responses. From the query menu, you can select addresses to create aliases, or to mail. You can tag multiple addresses to mail, start a new query, or have a new query appended to the current responses.

The other mechanism for accessing the query function is for address completion, similar to the alias completion. In any prompt for address entry, you can use the <complete-query> function (default: ^T) to run a query based on the current address you have typed. Like aliases, Mutt will look for what you have typed back to the last space or comma. If there is a single response for that query, Mutt will expand the address in place. If there are multiple responses, Mutt will activate the query menu. At the query menu, you can select one or more addresses to be added to the prompt.

7. Mailbox Formats

Mutt supports reading and writing of four different local mailbox formats: mbox, MMDF, MH and Maildir. The mailbox type is auto detected, so there is no need to use a flag for different mailbox types. When creating new mailboxes, Mutt uses the default specified with the $mbox_type variable. A short description of the formats follows.

mbox. This is a widely used mailbox format for UNIX. All messages are stored in a single file. Each message has a line of the form:

From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST

to denote the start of a new message (this is often referred to as the “From_” line). The mbox format requires mailbox locking, is prone to mailbox corruption with concurrently writing clients or misinterpreted From_ lines. Depending on the environment, new mail detection can be unreliable. Mbox folders are fast to open and easy to archive.

MMDF. This is a variant of the mbox format. Each message is surrounded by lines containing “^A^A^A^A” (four times control-A's). The same problems as for mbox apply (also with finding the right message separator as four control-A's may appear in message bodies).

MH. A radical departure from mbox and MMDF, a mailbox consists of a directory and each message is stored in a separate file. The filename indicates the message number (however, this is may not correspond to the message number Mutt displays). Deleted messages are renamed with a comma (“,”) prepended to the filename. Mutt detects this type of mailbox by looking for either .mh_sequences or .xmhcache files (needed to distinguish normal directories from MH mailboxes). MH is more robust with concurrent clients writing the mailbox, but still may suffer from lost flags; message corruption is less likely to occur than with mbox/mmdf. It's usually slower to open compared to mbox/mmdf since many small files have to be read (Mutt provides Section 7.1, “Header Caching” to greatly speed this process up). Depending on the environment, MH is not very disk-space efficient.

Maildir. The newest of the mailbox formats, used by the Qmail MTA (a replacement for sendmail). Similar to MH, except that it adds three subdirectories of the mailbox: tmp, new and cur. Filenames for the messages are chosen in such a way they are unique, even when two programs are writing the mailbox over NFS, which means that no file locking is needed and corruption is very unlikely. Maildir maybe slower to open without caching in Mutt, it too is not very disk-space efficient depending on the environment. Since no additional files are used for metadata (which is embedded in the message filenames) and Maildir is locking-free, it's easy to sync across different machines using file-level synchronization tools.

8. Mailbox Shortcuts

There are a number of built in shortcuts which refer to specific mailboxes. These shortcuts can be used anywhere you are prompted for a file or mailbox path or in path-related configuration variables. Note that these only work at the beginning of a string.

Table 4.7. Mailbox shortcuts

ShortcutRefers to...
!your $spoolfile (incoming) mailbox
>your $mbox file
<your $record file
^the current mailbox
- or !!the file you've last visited
~your home directory
= or +your $folder directory
@aliasto the default save folder as determined by the address of the alias

For example, to store a copy of outgoing messages in the folder they were composed in, a folder-hook can be used to set $record:

folder-hook . 'set record=^'

9. Handling Mailing Lists

Mutt has a few configuration options that make dealing with large amounts of mail easier. The first thing you must do is to let Mutt know what addresses you consider to be mailing lists (technically this does not have to be a mailing list, but that is what it is most often used for), and what lists you are subscribed to. This is accomplished through the use of the lists and subscribe commands in your .muttrc.

Now that Mutt knows what your mailing lists are, it can do several things, the first of which is the ability to show the name of a list through which you received a message (i.e., of a subscribed list) in the index menu display. This is useful to distinguish between personal and list mail in the same mailbox. In the $index_format variable, the expando “%L” will print the string “To <list>” when “list” appears in the “To” field, and “Cc <list>” when it appears in the “Cc” field (otherwise it prints the name of the author).

Often times the “To” and “Cc” fields in mailing list messages tend to get quite large. Most people do not bother to remove the author of the message they reply to from the list, resulting in two or more copies being sent to that person. The <list-reply> function, which by default is bound to “L” in the index menu and pager, helps reduce the clutter by only replying to the known mailing list addresses instead of all recipients (except as specified by Mail-Followup-To, see below).

Mutt also supports the Mail-Followup-To header. When you send a message to a list of recipients which includes one or several subscribed mailing lists, and if the $followup_to option is set, Mutt will generate a Mail-Followup-To header which contains all the recipients to whom you send this message, but not your address. This indicates that group-replies or list-replies (also known as “followups”) to this message should only be sent to the original recipients of the message, and not separately to you - you'll receive your copy through one of the mailing lists you are subscribed to.

Conversely, when group-replying or list-replying to a message which has a Mail-Followup-To header, Mutt will respect this header if the $honor_followup_to configuration variable is set. Using list-reply will in this case also make sure that the reply goes to the mailing list, even if it's not specified in the list of recipients in the Mail-Followup-To.

Note

When header editing is enabled, you can create a Mail-Followup-To header manually. Mutt will only auto-generate this header if it doesn't exist when you send the message.

The other method some mailing list admins use is to generate a “Reply-To” field which points back to the mailing list address rather than the author of the message. This can create problems when trying to reply directly to the author in private, since most mail clients will automatically reply to the address given in the “Reply-To” field. Mutt uses the $reply_to variable to help decide which address to use. If set to ask-yes or ask-no, you will be prompted as to whether or not you would like to use the address given in the “Reply-To” field, or reply directly to the address given in the “From” field. When set to yes, the “Reply-To” field will be used when present.

The “X-Label:” header field can be used to further identify mailing lists or list subject matter (or just to annotate messages individually). The $index_format variable's “%y” and “%Y” expandos can be used to expand “X-Label:” fields in the index, and Mutt's pattern-matcher can match regular expressions to “X-Label:” fields with the “~y” selector. “X-Label:” is not a standard message header field, but it can easily be inserted by procmail and other mail filtering agents.

Lastly, Mutt has the ability to sort the mailbox into threads. A thread is a group of messages which all relate to the same subject. This is usually organized into a tree-like structure where a message and all of its replies are represented graphically. If you've ever used a threaded news client, this is the same concept. It makes dealing with large volume mailing lists easier because you can easily delete uninteresting threads and quickly find topics of value.

10. New Mail Detection

Mutt supports setups with multiple folders, allowing all of them to be monitored for new mail (see Section 14, “Monitoring Incoming Mail” for details).

10.1. How New Mail Detection Works

For Mbox and Mmdf folders, new mail is detected by comparing access and/or modification times of files: Mutt assumes a folder has new mail if it wasn't accessed after it was last modified. Utilities like biff or frm or any other program which accesses the mailbox might cause Mutt to never detect new mail for that mailbox if they do not properly reset the access time. Other possible causes of Mutt not detecting new mail in these folders are backup tools (updating access times) or filesystems mounted without access time update support (for Linux systems, see the relatime option).

Note

Contrary to older Mutt releases, it now maintains the new mail status of a folder by properly resetting the access time if the folder contains at least one message which is neither read, nor deleted, nor marked as old.

In cases where new mail detection for Mbox or Mmdf folders appears to be unreliable, the $check_mbox_size option can be used to make Mutt track and consult file sizes for new mail detection instead which won't work for size-neutral changes.

New mail for Maildir is assumed if there is one message in the new/ subdirectory which is not marked deleted (see $maildir_trash). For MH folders, a mailbox is considered having new mail if there's at least one message in the “unseen” sequence as specified by $mh_seq_unseen.

Mutt does not poll POP3 folders for new mail, it only periodically checks the currently opened folder (if it's a POP3 folder).

For IMAP, by default Mutt uses recent message counts provided by the server to detect new mail. If the $imap_idle option is set, it'll use the IMAP IDLE extension if advertised by the server.

10.2. Polling For New Mail

When in the index menu and being idle (also see $timeout), Mutt periodically checks for new mail in all folders which have been configured via the mailboxes command. The interval depends on the folder type: for local/IMAP folders it consults $mail_check and $pop_checkinterval for POP folders.

Outside the index menu the directory browser supports checking for new mail using the <check-new> function which is unbound by default. Pressing TAB will bring up a menu showing the files specified by the mailboxes command, and indicate which contain new messages. Mutt will automatically enter this mode when invoked from the command line with the -y option.

For the pager, index and directory browser menus, Mutt contains the <buffy-list> function (bound to “.” by default) which will print a list of folders with new mail in the command line at the bottom of the screen.

For the index, by default Mutt displays the number of mailboxes with new mail in the status bar, please refer to the $status_format variable for details.

When changing folders, Mutt fills the prompt with the first folder from the mailboxes list containing new mail (if any), pressing <Space> will cycle through folders with new mail. The (by default unbound) function <next-unread-mailbox> in the index can be used to immediately open the next folder with unread mail (if any).

11. Editing Threads

Mutt has the ability to dynamically restructure threads that are broken either by misconfigured software or bad behavior from some correspondents. This allows to clean your mailboxes from these annoyances which make it hard to follow a discussion.

11.1. Linking Threads

Some mailers tend to “forget” to correctly set the “In-Reply-To:” and “References:” headers when replying to a message. This results in broken discussions because Mutt has not enough information to guess the correct threading. You can fix this by tagging the reply, then moving to the parent message and using the <link-threads> function (bound to & by default). The reply will then be connected to this parent message.

You can also connect multiple children at once, tagging them and using the <tag-prefix> command (“;”) or the $auto_tag option.

11.2. Breaking Threads

On mailing lists, some people are in the bad habit of starting a new discussion by hitting “reply” to any message from the list and changing the subject to a totally unrelated one. You can fix such threads by using the <break-thread> function (bound by default to #), which will turn the subthread starting from the current message into a whole different thread.

12. Delivery Status Notification (DSN) Support

RFC1894 defines a set of MIME content types for relaying information about the status of electronic mail messages. These can be thought of as “return receipts.”

To support DSN, there are two variables. $dsn_notify is used to request receipts for different results (such as failed message, message delivered, etc.). $dsn_return requests how much of your message should be returned with the receipt (headers or full message).

When using $sendmail for mail delivery, you need to use either Berkeley sendmail 8.8.x (or greater) a MTA supporting DSN command line options compatible to Sendmail: The -N and -R options can be used by the mail client to make requests as to what type of status messages should be returned. Please consider your MTA documentation whether DSN is supported.

For SMTP delivery using $smtp_url, it depends on the capabilities announced by the server whether Mutt will attempt to request DSN or not.

13. Start a WWW Browser on URLs

If a message contains URLs, it is efficient to get a menu with all the URLs and start a WWW browser on one of them. This functionality is provided by the external urlview program which can be retrieved at ftp://ftp.mutt.org/mutt/contrib/ and the configuration commands:

macro index \cb |urlview\n
macro pager \cb |urlview\n

14. Miscellany

This section documents various features that fit nowhere else.

Address normalization

Mutt normalizes all e-mail addresses to the simplest form possible. If an address contains a realname, the form Joe User <joe@example.com> is used and the pure e-mail address without angle brackets otherwise, i.e. just joe@example.com.

This normalization affects all headers Mutt generates including aliases.

Initial folder selection

The folder Mutt opens at startup is determined as follows: the folder specified in the $MAIL environment variable if present. Otherwise, the value of $MAILDIR is taken into account. If that isn't present either, Mutt takes the user's mailbox in the mailspool as determined at compile-time (which may also reside in the home directory). The $spoolfile setting overrides this selection. Highest priority has the mailbox given with the -f command line option.

mutt-1.5.21/doc/optionalfeatures.html0000644000175000017500000010102311444176770014541 00000000000000 Chapter 6. Optional Features

Chapter 6. Optional Features

1. General Notes

1.1. Enabling/Disabling Features

Mutt supports several of optional features which can be enabled or disabled at compile-time by giving the configure script certain arguments. These are listed in the “Optional features” section of the configure --help output.

Which features are enabled or disabled can later be determined from the output of mutt -v. If a compile option starts with “+” it is enabled and disabled if prefixed with “-”. For example, if Mutt was compiled using GnuTLS for encrypted communication instead of OpenSSL, mutt -v would contain:

-USE_SSL_OPENSSL +USE_SSL_GNUTLS

1.2. URL Syntax

Mutt optionally supports the IMAP, POP3 and SMTP protocols which require to access servers using URLs. The canonical syntax for specifying URLs in Mutt is (an item enclosed in [] means it is optional and may be omitted):

proto[s]://[username[:password]@]server[:port][/path]

proto is the communication protocol: imap for IMAP, pop for POP3 and smtp for SMTP. If “s” for “secure communication” is appended, Mutt will attempt to establish an encrypted communication using SSL or TLS.

Since all protocols supported by Mutt support/require authentication, login credentials may be specified in the URL. This has the advantage that multiple IMAP, POP3 or SMTP servers may be specified (which isn't possible using, for example, $imap_user). The username may contain the “@” symbol being used by many mail systems as part of the login name. The special characters “/” (%2F), “:” (%3A) and “%” (%25) have to be URL-encoded in usernames using the %-notation.

A password can be given, too but is not recommended if the URL is specified in a configuration file on disk.

If no port number is given, Mutt will use the system's default for the given protocol (usually consulting /etc/services).

The optional path is only relevant for IMAP and ignored elsewhere.

Example 6.1. URLs

pops://host/
imaps://user@host/INBOX/Sent
smtp://user@host:587/

2. SSL/TLS Support

If Mutt is compiled with IMAP, POP3 and/or SMTP support, it can also be compiled with support for SSL or TLS using either OpenSSL or GnuTLS ( by running the configure script with the --enable-ssl=... option for OpenSSL or --enable-gnutls=... for GnuTLS). Mutt can then attempt to encrypt communication with remote servers if these protocols are suffixed with “s” for “secure communication”.

3. POP3 Support

If Mutt is compiled with POP3 support (by running the configure script with the --enable-pop flag), it has the ability to work with mailboxes located on a remote POP3 server and fetch mail for local browsing.

Remote POP3 servers can be accessed using URLs with the pop protocol for unencrypted and pops for encrypted communication, see Section 1.2, “URL Syntax” for details.

Polling for new mail is more expensive over POP3 than locally. For this reason the frequency at which Mutt will check for mail remotely can be controlled by the $pop_checkinterval variable, which defaults to every 60 seconds.

POP is read-only which doesn't allow for some features like editing messages or changing flags. However, using Section 7.1, “Header Caching” and Section 7.2, “Body Caching” Mutt simulates the new/old/read flags as well as flagged and replied. Mutt applies some logic on top of remote messages but cannot change them so that modifications of flags are lost when messages are downloaded from the POP server (either by Mutt or other tools).

Another way to access your POP3 mail is the <fetch-mail> function (default: G). It allows to connect to $pop_host, fetch all your new mail and place it in the local $spoolfile. After this point, Mutt runs exactly as if the mail had always been local.

Note

If you only need to fetch all messages to a local mailbox you should consider using a specialized program, such as fetchmail(1), getmail(1) or similar.

4. IMAP Support

If Mutt was compiled with IMAP support (by running the configure script with the --enable-imap flag), it has the ability to work with folders located on a remote IMAP server.

You can access the remote inbox by selecting the folder by its URL (see Section 1.2, “URL Syntax” for details) using the imap or imaps protocol. Alternatively, a pine-compatible notation is also supported, i.e. {[username@]imapserver[:port][/ssl]}path/to/folder

Note that not all servers use “/” as the hierarchy separator. Mutt should correctly notice which separator is being used by the server and convert paths accordingly.

When browsing folders on an IMAP server, you can toggle whether to look at only the folders you are subscribed to, or all folders with the toggle-subscribed command. See also the $imap_list_subscribed variable.

Polling for new mail on an IMAP server can cause noticeable delays. So, you'll want to carefully tune the $mail_check and $timeout variables. Reasonable values are:

set mail_check=90
set timeout=15

with relatively good results even over slow modem lines.

Note

Note that if you are using mbox as the mail store on UW servers prior to v12.250, the server has been reported to disconnect a client if another client selects the same folder.

4.1. The IMAP Folder Browser

As of version 1.2, Mutt supports browsing mailboxes on an IMAP server. This is mostly the same as the local file browser, with the following differences:

  • In lieu of file permissions, Mutt displays the string “IMAP”, possibly followed by the symbol “+”, indicating that the entry contains both messages and subfolders. On Cyrus-like servers folders will often contain both messages and subfolders.

  • For the case where an entry can contain both messages and subfolders, the selection key (bound to enter by default) will choose to descend into the subfolder view. If you wish to view the messages in that folder, you must use view-file instead (bound to space by default).

  • You can create, delete and rename mailboxes with the <create-mailbox>, <delete-mailbox>, and <rename-mailbox> commands (default bindings: C, d and r, respectively). You may also <subscribe> and <unsubscribe> to mailboxes (normally these are bound to s and u, respectively).

4.2. Authentication

Mutt supports four authentication methods with IMAP servers: SASL, GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add NTLM authentication for you poor exchange users out there, but it has yet to be integrated into the main tree). There is also support for the pseudo-protocol ANONYMOUS, which allows you to log in to a public IMAP server without having an account. To use ANONYMOUS, simply make your username blank or “anonymous”.

SASL is a special super-authenticator, which selects among several protocols (including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure method available on your host and the server. Using some of these methods (including DIGEST-MD5 and possibly GSSAPI), your entire session will be encrypted and invisible to those teeming network snoops. It is the best option if you have it. To use it, you must have the Cyrus SASL library installed on your system and compile Mutt with the --with-sasl flag.

Mutt will try whichever methods are compiled in and available on the server, in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN.

There are a few variables which control authentication:

  • $imap_user - controls the username under which you request authentication on the IMAP server, for all authenticators. This is overridden by an explicit username in the mailbox path (i.e. by using a mailbox name of the form {user@host}).

  • $imap_pass - a password which you may preset, used by all authentication methods where a password is needed.

  • $imap_authenticators - a colon-delimited list of IMAP authentication methods to try, in the order you wish to try them. If specified, this overrides Mutt's default (attempt everything, in the order listed above).

5. SMTP Support

Besides supporting traditional mail delivery through a sendmail-compatible program, Mutt supports delivery through SMTP if it was configured and built with --enable-smtp.

If the configuration variable $smtp_url is set, Mutt will contact the given SMTP server to deliver messages; if it is unset, Mutt will use the program specified by $sendmail.

For details on the URL syntax, please see Section 1.2, “URL Syntax”.

The built-in SMTP support supports encryption (the smtps protocol using SSL or TLS) as well as SMTP authentication using SASL. The authentication mechanisms for SASL are specified in $smtp_authenticators defaulting to an empty list which makes Mutt try all available methods from most-secure to least-secure.

6. Managing Multiple Accounts

Usage:

account-hook pattern command

If you happen to have accounts on multiple IMAP, POP and/or SMTP servers, you may find managing all the authentication settings inconvenient and error-prone. The account-hook command may help. This hook works like folder-hook but is invoked whenever Mutt needs to access a remote mailbox (including inside the folder browser), not just when you open the mailbox. This includes (for example) polling for new mail, storing Fcc messages and saving messages to a folder. As a consequence, account-hook should only be used to set connection-related settings such as passwords or tunnel commands but not settings such as sender address or name (because in general it should be considered unpredictable which account-hook was last used).

Some examples:

account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
account-hook smtp://user@host3/ 'set tunnel="ssh host3 /usr/libexec/smtpd"'

To manage multiple accounts with, for example, different values of $record or sender addresses, folder-hook has to be be used together with the mailboxes command.

Example 6.2. Managing multiple accounts

mailboxes imap://user@host1/INBOX
folder-hook imap://user@host1/ 'set folder=imap://host1/ ; set record=+INBOX/Sent'

mailboxes imap://user@host2/INBOX
folder-hook imap://user@host2/ 'set folder=imap://host2/ ; set record=+INBOX/Sent'

In example Example 6.2, “Managing multiple accounts” the folders are defined using mailboxes so Mutt polls them for new mail. Each folder-hook triggers when one mailbox below each IMAP account is opened and sets $folder to the account's root folder. Next, it sets $record to the INBOX/Sent folder below the newly set $folder. Please notice that the value the “+” mailbox shortcut refers to depends on the current value of $folder and therefore has to be set separately per account. Setting other values like $from or $signature is analogous to setting $record.

7. Local Caching

Mutt contains two types of local caching: (1) the so-called “header caching” and (2) the so-called “body caching” which are both described in this section.

Header caching is optional as it depends on external libraries, body caching is always enabled if Mutt is compiled with POP and/or IMAP support as these use it (body caching requires no external library).

7.1. Header Caching

Mutt provides optional support for caching message headers for the following types of folders: IMAP, POP, Maildir and MH. Header caching greatly speeds up opening large folders because for remote folders, headers usually only need to be downloaded once. For Maildir and MH, reading the headers from a single file is much faster than looking at possibly thousands of single files (since Maildir and MH use one file per message.)

Header caching can be enabled via the configure script and the --enable-hcache option. It's not turned on by default because external database libraries are required: one of tokyocabinet, qdbm, gdbm or bdb must be present.

If enabled, $header_cache can be used to either point to a file or a directory. If set to point to a file, one database file for all folders will be used (which may result in lower performance), but one file per folder if it points to a directory.

7.2. Body Caching

Both cache methods can be combined using the same directory for storage (and for IMAP/POP even provide meaningful file names) which simplifies manual maintenance tasks.

In addition to caching message headers only, Mutt can also cache whole message bodies. This results in faster display of messages for POP and IMAP folders because messages usually have to be downloaded only once.

For configuration, the variable $message_cachedir must point to a directory. There, Mutt will create a hierarchy of subdirectories named like the account and mailbox path the cache is for.

7.3. Cache Directories

For using both, header and body caching, $header_cache and $message_cachedir can be safely set to the same value.

In a header or body cache directory, Mutt creates a directory hierarchy named like: proto:user@hostname where proto is either “pop” or “imap.” Within there, for each folder, Mutt stores messages in single files and header caches in files with the “.hcache” extension. All files can be removed as needed if the consumed disk space becomes an issue as Mutt will silently fetch missing items again. Pathnames are always stored in UTF-8 encoding.

For Maildir and MH, the header cache files are named after the MD5 checksum of the path.

7.4. Maintenance

Mutt does not (yet) support maintenance features for header cache database files so that files have to be removed in case they grow too big. It depends on the database library used for header caching whether disk space freed by removing messages is re-used.

For body caches, Mutt can keep the local cache in sync with the remote mailbox if the $message_cache_clean variable is set. Cleaning means to remove messages from the cache which are no longer present in the mailbox which only happens when other mail clients or instances of Mutt using a different body cache location delete messages (Mutt itself removes deleted messages from the cache when syncing a mailbox). As cleaning can take a noticeable amount of time, it should not be set in general but only occasionally.

8. Exact Address Generation

Mutt supports the “Name <user@host>” address syntax for reading and writing messages, the older “user@host (Name)” syntax is only supported when reading messages. The --enable-exact-address switch can be given to configure to build it with write-support for the latter syntax. EXACT_ADDRESS in the output of mutt -v indicates whether it's supported.

9. Sending Anonymous Messages via Mixmaster

You may also have compiled Mutt to co-operate with Mixmaster, an anonymous remailer. Mixmaster permits you to send your messages anonymously using a chain of remailers. Mixmaster support in Mutt is for mixmaster version 2.04 or later.

To use it, you'll have to obey certain restrictions. Most important, you cannot use the Cc and Bcc headers. To tell Mutt to use mixmaster, you have to select a remailer chain, using the mix function on the compose menu.

The chain selection screen is divided into two parts. In the (larger) upper part, you get a list of remailers you may use. In the lower part, you see the currently selected chain of remailers.

You can navigate in the chain using the <chain-prev> and <chain-next> functions, which are by default bound to the left and right arrows and to the h and l keys (think vi keyboard bindings). To insert a remailer at the current chain position, use the <insert> function. To append a remailer behind the current chain position, use <select-entry> or <append>. You can also delete entries from the chain, using the corresponding function. Finally, to abandon your changes, leave the menu, or <accept> them pressing (by default) the Return key.

Note that different remailers do have different capabilities, indicated in the %c entry of the remailer menu lines (see $mix_entry_format). Most important is the “middleman” capability, indicated by a capital “M”: This means that the remailer in question cannot be used as the final element of a chain, but will only forward messages to other mixmaster remailers. For details on the other capabilities, please have a look at the mixmaster documentation.

mutt-1.5.21/doc/security.html0000644000175000017500000002123011444176770013025 00000000000000 Chapter 7. Security Considerations

Chapter 7. Security Considerations

First of all, Mutt contains no security holes included by intention but may contain unknown security holes. As a consequence, please run Mutt only with as few permissions as possible. Especially, do not run Mutt as the super user.

When configuring Mutt, there're some points to note about secure setups so please read this chapter carefully.

1. Passwords

Although Mutt can be told the various passwords for accounts, please never store passwords in configuration files. Besides the fact that the system's operator can always read them, you could forget to mask it out when reporting a bug or asking for help via a mailing list. Even worse, your mail including your password could be archived by internet search engines, mail-to-news gateways etc. It may already be too late before you notice your mistake.

2. Temporary Files

Mutt uses many temporary files for viewing messages, verifying digital signatures, etc. As long as being used, these files are visible by other users and maybe even readable in case of misconfiguration. Also, a different location for these files may be desired which can be changed via the $tmpdir variable.

3. Information Leaks

3.1. Message-Id: headers

Message-Id: headers contain a local part that is to be created in a unique fashion. In order to do so, Mutt will “leak” some information to the outside world when sending messages: the generation of this header includes a step counter which is increased (and rotated) with every message sent. In a longer running mutt session, others can make assumptions about your mailing habits depending on the number of messages sent. If this is not desired, the header can be manually provided using $edit_headers (though not recommended).

3.2. mailto:-style Links

As Mutt be can be set up to be the mail client to handle mailto: style links in websites, there're security considerations, too. Arbitrary header fields can be embedded in these links which could override existing header fields or attach arbitrary files using the Attach: pseudoheader. This may be problematic if the $edit-headers variable is unset, i.e. the user doesn't want to see header fields while editing the message and doesn't pay enough attention to the compose menu's listing of attachments.

For example, following a link like

mailto:joe@host?Attach=~/.gnupg/secring.gpg

will send out the user's private gnupg keyring to joe@host if the user doesn't follow the information on screen carefully enough.

4. External Applications

Mutt in many places has to rely on external applications or for convenience supports mechanisms involving external applications.

One of these is the mailcap mechanism as defined by RfC1524. Details about a secure use of the mailcap mechanisms is given in Section 3.2, “Secure Use of Mailcap”.

Besides the mailcap mechanism, Mutt uses a number of other external utilities for operation, for example to provide crypto support, in backtick expansion in configuration files or format string filters. The same security considerations apply for these as for tools involved via mailcap.

mutt-1.5.21/doc/tuning.html0000644000175000017500000002005611444176770012467 00000000000000 Chapter 8. Performance Tuning

Chapter 8. Performance Tuning

1. Reading and Writing Mailboxes

Mutt's performance when reading mailboxes can be improved in two ways:

  1. For remote folders (IMAP and POP) as well as folders using one-file-per message storage (Maildir and MH), Mutt's performance can be greatly improved using header caching. using a single database per folder.

  2. Mutt provides the $read_inc and $write_inc variables to specify at which rate to update progress counters. If these values are too low, Mutt may spend more time on updating the progress counter than it spends on actually reading/writing folders.

    For example, when opening a maildir folder with a few thousand messages, the default value for $read_inc may be too low. It can be tuned on on a folder-basis using folder-hooks:

    # use very high $read_inc to speed up reading hcache'd maildirs
    folder-hook . 'set read_inc=1000'
    # use lower value for reading slower remote IMAP folders
    folder-hook ^imap 'set read_inc=100'
    # use even lower value for reading even slower remote POP folders
    folder-hook ^pop 'set read_inc=1'

These settings work on a per-message basis. However, as messages may greatly differ in size and certain operations are much faster than others, even per-folder settings of the increment variables may not be desirable as they produce either too few or too much progress updates. Thus, Mutt allows to limit the number of progress updates per second it'll actually send to the terminal using the $time_inc variable.

2. Reading Messages from Remote Folders

Reading messages from remote folders such as IMAP an POP can be slow especially for large mailboxes since Mutt only caches a very limited number of recently viewed messages (usually 10) per session (so that it will be gone for the next session.)

To improve performance and permanently cache whole messages, please refer to Mutt's so-called body caching for details.

3. Searching and Limiting

When searching mailboxes either via a search or a limit action, for some patterns Mutt distinguishes between regular expression and string searches. For regular expressions, patterns are prefixed with “~” and with “=” for string searches.

Even though a regular expression search is fast, it's several times slower than a pure string search which is noticeable especially on large folders. As a consequence, a string search should be used instead of a regular expression search if the user already knows enough about the search pattern.

For example, when limiting a large folder to all messages sent to or by an author, it's much faster to search for the initial part of an e-mail address via =Luser@ instead of ~Luser@. This is especially true for searching message bodies since a larger amount of input has to be searched.

As for regular expressions, a lower case string search pattern makes Mutt perform a case-insensitive search except for IMAP (because for IMAP Mutt performs server-side searches which don't support case-insensitivity).

mutt-1.5.21/doc/reference.html0000644000175000017500000123400211444176777013127 00000000000000 Chapter 9. Reference

Chapter 9. Reference

Table of Contents

1. Command-Line Options
2. Configuration Commands
3. Configuration Variables
3.1. abort_nosubject
3.2. abort_unmodified
3.3. alias_file
3.4. alias_format
3.5. allow_8bit
3.6. allow_ansi
3.7. arrow_cursor
3.8. ascii_chars
3.9. askbcc
3.10. askcc
3.11. assumed_charset
3.12. attach_charset
3.13. attach_format
3.14. attach_sep
3.15. attach_split
3.16. attribution
3.17. auto_tag
3.18. autoedit
3.19. beep
3.20. beep_new
3.21. bounce
3.22. bounce_delivered
3.23. braille_friendly
3.24. certificate_file
3.25. charset
3.26. check_mbox_size
3.27. check_new
3.28. collapse_unread
3.29. compose_format
3.30. config_charset
3.31. confirmappend
3.32. confirmcreate
3.33. connect_timeout
3.34. content_type
3.35. copy
3.36. crypt_autoencrypt
3.37. crypt_autopgp
3.38. crypt_autosign
3.39. crypt_autosmime
3.40. crypt_replyencrypt
3.41. crypt_replysign
3.42. crypt_replysignencrypted
3.43. crypt_timestamp
3.44. crypt_use_gpgme
3.45. crypt_use_pka
3.46. crypt_verify_sig
3.47. date_format
3.48. default_hook
3.49. delete
3.50. delete_untag
3.51. digest_collapse
3.52. display_filter
3.53. dotlock_program
3.54. dsn_notify
3.55. dsn_return
3.56. duplicate_threads
3.57. edit_headers
3.58. editor
3.59. encode_from
3.60. entropy_file
3.61. envelope_from_address
3.62. escape
3.63. fast_reply
3.64. fcc_attach
3.65. fcc_clear
3.66. folder
3.67. folder_format
3.68. followup_to
3.69. force_name
3.70. forward_decode
3.71. forward_decrypt
3.72. forward_edit
3.73. forward_format
3.74. forward_quote
3.75. from
3.76. gecos_mask
3.77. hdrs
3.78. header
3.79. header_cache
3.80. header_cache_compress
3.81. header_cache_pagesize
3.82. help
3.83. hidden_host
3.84. hide_limited
3.85. hide_missing
3.86. hide_thread_subject
3.87. hide_top_limited
3.88. hide_top_missing
3.89. history
3.90. history_file
3.91. honor_disposition
3.92. honor_followup_to
3.93. hostname
3.94. ignore_linear_white_space
3.95. ignore_list_reply_to
3.96. imap_authenticators
3.97. imap_check_subscribed
3.98. imap_delim_chars
3.99. imap_headers
3.100. imap_idle
3.101. imap_keepalive
3.102. imap_list_subscribed
3.103. imap_login
3.104. imap_pass
3.105. imap_passive
3.106. imap_peek
3.107. imap_pipeline_depth
3.108. imap_servernoise
3.109. imap_user
3.110. implicit_autoview
3.111. include
3.112. include_onlyfirst
3.113. indent_string
3.114. index_format
3.115. ispell
3.116. keep_flagged
3.117. locale
3.118. mail_check
3.119. mail_check_recent
3.120. mailcap_path
3.121. mailcap_sanitize
3.122. maildir_header_cache_verify
3.123. maildir_trash
3.124. mark_old
3.125. markers
3.126. mask
3.127. mbox
3.128. mbox_type
3.129. menu_context
3.130. menu_move_off
3.131. menu_scroll
3.132. message_cache_clean
3.133. message_cachedir
3.134. message_format
3.135. meta_key
3.136. metoo
3.137. mh_purge
3.138. mh_seq_flagged
3.139. mh_seq_replied
3.140. mh_seq_unseen
3.141. mime_forward
3.142. mime_forward_decode
3.143. mime_forward_rest
3.144. mix_entry_format
3.145. mixmaster
3.146. move
3.147. narrow_tree
3.148. net_inc
3.149. pager
3.150. pager_context
3.151. pager_format
3.152. pager_index_lines
3.153. pager_stop
3.154. pgp_auto_decode
3.155. pgp_autoinline
3.156. pgp_check_exit
3.157. pgp_clearsign_command
3.158. pgp_decode_command
3.159. pgp_decrypt_command
3.160. pgp_encrypt_only_command
3.161. pgp_encrypt_sign_command
3.162. pgp_entry_format
3.163. pgp_export_command
3.164. pgp_getkeys_command
3.165. pgp_good_sign
3.166. pgp_ignore_subkeys
3.167. pgp_import_command
3.168. pgp_list_pubring_command
3.169. pgp_list_secring_command
3.170. pgp_long_ids
3.171. pgp_mime_auto
3.172. pgp_replyinline
3.173. pgp_retainable_sigs
3.174. pgp_show_unusable
3.175. pgp_sign_as
3.176. pgp_sign_command
3.177. pgp_sort_keys
3.178. pgp_strict_enc
3.179. pgp_timeout
3.180. pgp_use_gpg_agent
3.181. pgp_verify_command
3.182. pgp_verify_key_command
3.183. pipe_decode
3.184. pipe_sep
3.185. pipe_split
3.186. pop_auth_try_all
3.187. pop_authenticators
3.188. pop_checkinterval
3.189. pop_delete
3.190. pop_host
3.191. pop_last
3.192. pop_pass
3.193. pop_reconnect
3.194. pop_user
3.195. post_indent_string
3.196. postpone
3.197. postponed
3.198. preconnect
3.199. print
3.200. print_command
3.201. print_decode
3.202. print_split
3.203. prompt_after
3.204. query_command
3.205. query_format
3.206. quit
3.207. quote_regexp
3.208. read_inc
3.209. read_only
3.210. realname
3.211. recall
3.212. record
3.213. reply_regexp
3.214. reply_self
3.215. reply_to
3.216. resolve
3.217. reverse_alias
3.218. reverse_name
3.219. reverse_realname
3.220. rfc2047_parameters
3.221. save_address
3.222. save_empty
3.223. save_history
3.224. save_name
3.225. score
3.226. score_threshold_delete
3.227. score_threshold_flag
3.228. score_threshold_read
3.229. search_context
3.230. send_charset
3.231. sendmail
3.232. sendmail_wait
3.233. shell
3.234. sig_dashes
3.235. sig_on_top
3.236. signature
3.237. simple_search
3.238. sleep_time
3.239. smart_wrap
3.240. smileys
3.241. smime_ask_cert_label
3.242. smime_ca_location
3.243. smime_certificates
3.244. smime_decrypt_command
3.245. smime_decrypt_use_default_key
3.246. smime_default_key
3.247. smime_encrypt_command
3.248. smime_encrypt_with
3.249. smime_get_cert_command
3.250. smime_get_cert_email_command
3.251. smime_get_signer_cert_command
3.252. smime_import_cert_command
3.253. smime_is_default
3.254. smime_keys
3.255. smime_pk7out_command
3.256. smime_sign_command
3.257. smime_sign_opaque_command
3.258. smime_timeout
3.259. smime_verify_command
3.260. smime_verify_opaque_command
3.261. smtp_authenticators
3.262. smtp_pass
3.263. smtp_url
3.264. sort
3.265. sort_alias
3.266. sort_aux
3.267. sort_browser
3.268. sort_re
3.269. spam_separator
3.270. spoolfile
3.271. ssl_ca_certificates_file
3.272. ssl_client_cert
3.273. ssl_force_tls
3.274. ssl_min_dh_prime_bits
3.275. ssl_starttls
3.276. ssl_use_sslv2
3.277. ssl_use_sslv3
3.278. ssl_use_tlsv1
3.279. ssl_usesystemcerts
3.280. ssl_verify_dates
3.281. ssl_verify_host
3.282. status_chars
3.283. status_format
3.284. status_on_top
3.285. strict_threads
3.286. suspend
3.287. text_flowed
3.288. thorough_search
3.289. thread_received
3.290. tilde
3.291. time_inc
3.292. timeout
3.293. tmpdir
3.294. to_chars
3.295. tunnel
3.296. uncollapse_jump
3.297. use_8bitmime
3.298. use_domain
3.299. use_envelope_from
3.300. use_from
3.301. use_idn
3.302. use_ipv6
3.303. user_agent
3.304. visual
3.305. wait_key
3.306. weed
3.307. wrap
3.308. wrap_headers
3.309. wrap_search
3.310. wrapmargin
3.311. write_bcc
3.312. write_inc
4. Functions
4.1. Generic Menu
4.2. Index Menu
4.3. Pager Menu
4.4. Alias Menu
4.5. Query Menu
4.6. Attachment Menu
4.7. Compose Menu
4.8. Postpone Menu
4.9. Browser Menu
4.10. Pgp Menu
4.11. Smime Menu
4.12. Mixmaster Menu
4.13. Editor Menu

1. Command-Line Options

Running mutt with no arguments will make Mutt attempt to read your spool mailbox. However, it is possible to read other mailboxes and to send messages from the command line as well.

Table 9.1. Command line options

OptionDescription
-Aexpand an alias
-aattach a file to a message
-bspecify a blind carbon-copy (BCC) address
-cspecify a carbon-copy (Cc) address
-Dprint the value of all Mutt variables to stdout
-especify a config command to be run after initialization files are read
-fspecify a mailbox to load
-Fspecify an alternate file to read initialization commands
-hprint help on command line options
-Hspecify a draft file from which to read a header and body
-ispecify a file to include in a message composition
-mspecify a default mailbox type
-ndo not read the system Muttrc
-precall a postponed message
-Qquery a configuration variable
-Ropen mailbox in read-only mode
-sspecify a subject (enclose in quotes if it contains spaces)
-vshow version number and compile-time definitions
-xsimulate the mailx(1) compose mode
-yshow a menu containing the files specified by the mailboxes command
-zexit immediately if there are no messages in the mailbox
-Zopen the first folder with new message, exit immediately if none

To read messages in a mailbox

mutt [-nz] [-F muttrc ] [-m type ] [-f mailbox ]

To compose a new message

mutt [-n] [-F muttrc ] [-c address ] [-i filename ] [-s subject ] [ -a file [...] -- ] address | mailto_url ...

Mutt also supports a “batch” mode to send prepared messages. Simply redirect input from the file you wish to send. For example,

mutt -s "data set for run #2" professor@bigschool.edu < ~/run2.dat

will send a message to <professor@bigschool.edu> with a subject of “data set for run #2”. In the body of the message will be the contents of the file “~/run2.dat”.

All files passed with -a file will be attached as a MIME part to the message. To attach a single or several files, use “--” to separate files and recipient addresses:

mutt -a image.png -- some@one.org

or

mutt -a *.png -- some@one.org

Note

The -a option must be last in the option list.

In addition to accepting a list of email addresses, Mutt also accepts a URL with the mailto: schema as specified in RFC2368. This is useful when configuring a web browser to launch Mutt when clicking on mailto links.

mutt mailto:some@one.org?subject=test&cc=other@one.org

2. Configuration Commands

The following are the commands understood by Mutt:

3. Configuration Variables

3.1. abort_nosubject

Type: quadoption
Default: ask-yes

If set to yes, when composing messages and no subject is given at the subject prompt, composition will be aborted. If set to no, composing messages with no subject given at the subject prompt will never be aborted.

3.2. abort_unmodified

Type: quadoption
Default: yes

If set to yes, composition will automatically abort after editing the message body if no changes are made to the file (this check only happens after the first edit of the file). When set to no, composition will never be aborted.

3.3. alias_file

Type: path
Default: “~/.muttrc”

The default file in which to save aliases created by the <create-alias> function. Entries added to this file are encoded in the character set specified by $config_charset if it is set or the current character set otherwise.

Note: Mutt will not automatically source this file; you must explicitly use the “source” command for it to be executed in case this option points to a dedicated alias file.

The default for this option is the currently used muttrc file, or “~/.muttrc” if no user muttrc was found.

3.4. alias_format

Type: string
Default: “%4n %2f %t %-10a   %r”

Specifies the format of the data displayed for the “alias” menu. The following printf(3)-style sequences are available:

%a alias name
%f flags - currently, a “d” for an alias marked for deletion
%n index number
%r address which alias expands to
%t character which indicates if the alias is tagged for inclusion

3.5. allow_8bit

Type: boolean
Default: yes

Controls whether 8-bit data is converted to 7-bit using either Quoted- Printable or Base64 encoding when sending mail.

3.6. allow_ansi

Type: boolean
Default: no

Controls whether ANSI color codes in messages (and color tags in rich text messages) are to be interpreted. Messages containing these codes are rare, but if this option is set, their text will be colored accordingly. Note that this may override your color choices, and even present a security problem, since a message could include a line like

[-- PGP output follows ...

and give it the same color as your attachment color (see also $crypt_timestamp).

3.7. arrow_cursor

Type: boolean
Default: no

When set, an arrow (“->”) will be used to indicate the current entry in menus instead of highlighting the whole line. On slow network or modem links this will make response faster because there is less that has to be redrawn on the screen when moving to the next or previous entries in the menu.

3.8. ascii_chars

Type: boolean
Default: no

If set, Mutt will use plain ASCII characters when displaying thread and attachment trees, instead of the default ACS characters.

3.9. askbcc

Type: boolean
Default: no

If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients before editing an outgoing message.

3.10. askcc

Type: boolean
Default: no

If set, Mutt will prompt you for carbon-copy (Cc) recipients before editing the body of an outgoing message.

3.11. assumed_charset

Type: string
Default: (empty)

This variable is a colon-separated list of character encoding schemes for messages without character encoding indication. Header field values and message body content without character encoding indication would be assumed that they are written in one of this list. By default, all the header fields and message body without any charset indication are assumed to be in “us-ascii”.

For example, Japanese users might prefer this:

set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

However, only the first content is valid for the message body.

3.12. attach_charset

Type: string
Default: (empty)

This variable is a colon-separated list of character encoding schemes for text file attachments. Mutt uses this setting to guess which encoding files being attached are encoded in to convert them to a proper character set given in $send_charset.

If unset, the value of $charset will be used instead. For example, the following configuration would work for Japanese text handling:

set attach_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

Note: for Japanese users, “iso-2022-*” must be put at the head of the value as shown above if included.

3.13. attach_format

Type: string
Default: “%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] ”

This variable describes the format of the “attachment” menu. The following printf(3)-style sequences are understood:

%C charset
%c requires charset conversion (“n” or “c”)
%D deleted flag
%d description
%e MIME content-transfer-encoding
%f filename
%I disposition (“I” for inline, “A” for attachment)
%m major MIME type
%M MIME subtype
%n attachment number
%Q “Q”, if MIME part qualifies for attachment counting
%s size
%t tagged flag
%T graphic tree characters
%u unlink (=to delete) flag
%X number of qualifying MIME parts in this part and its children (please see the “attachments” section for possible speed effects)
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

3.14. attach_sep

Type: string
Default: “\n”

The separator to add between attachments when operating (saving, printing, piping, etc) on a list of tagged attachments.

3.15. attach_split

Type: boolean
Default: yes

If this variable is unset, when operating (saving, printing, piping, etc) on a list of tagged attachments, Mutt will concatenate the attachments and will operate on them as a single attachment. The $attach_sep separator is added after each attachment. When set, Mutt will operate on the attachments one by one.

3.16. attribution

Type: string
Default: “On %d, %n wrote:”

This is the string that will precede a message which has been included in a reply. For a full listing of defined printf(3)-like sequences see the section on $index_format.

3.17. auto_tag

Type: boolean
Default: no

When set, functions in the index menu which affect a message will be applied to all tagged messages (if there are any). When unset, you must first use the <tag-prefix> function (bound to “;” by default) to make the next function apply to all tagged messages.

3.18. autoedit

Type: boolean
Default: no

When set along with $edit_headers, Mutt will skip the initial send-menu (prompting for subject and recipients) and allow you to immediately begin editing the body of your message. The send-menu may still be accessed once you have finished editing the body of your message.

Note: when this option is set, you cannot use send-hooks that depend on the recipients when composing a new (non-reply) message, as the initial list of recipients is empty.

Also see $fast_reply.

3.19. beep

Type: boolean
Default: yes

When this variable is set, mutt will beep when an error occurs.

3.20. beep_new

Type: boolean
Default: no

When this variable is set, mutt will beep whenever it prints a message notifying you of new mail. This is independent of the setting of the $beep variable.

3.21. bounce

Type: quadoption
Default: ask-yes

Controls whether you will be asked to confirm bouncing messages. If set to yes you don't get asked if you want to bounce a message. Setting this variable to no is not generally useful, and thus not recommended, because you are unable to bounce messages.

3.22. bounce_delivered

Type: boolean
Default: yes

When this variable is set, mutt will include Delivered-To headers when bouncing messages. Postfix users may wish to unset this variable.

3.23. braille_friendly

Type: boolean
Default: no

When this variable is set, mutt will place the cursor at the beginning of the current line in menus, even when the $arrow_cursor variable is unset, making it easier for blind persons using Braille displays to follow these menus. The option is unset by default because many visual terminals don't permit making the cursor invisible.

3.24. certificate_file

Type: path
Default: “~/.mutt_certificates”

This variable specifies the file where the certificates you trust are saved. When an unknown certificate is encountered, you are asked if you accept it or not. If you accept it, the certificate can also be saved in this file and further connections are automatically accepted.

You can also manually add CA certificates in this file. Any server certificate that is signed with one of these CA certificates is also automatically accepted.

Example:

set certificate_file=~/.mutt/certificates

3.25. charset

Type: string
Default: (empty)

Character set your terminal uses to display and enter textual data. It is also the fallback for $send_charset.

Upon startup Mutt tries to derive this value from environment variables such as $LC_CTYPE or $LANG.

Note: It should only be set in case Mutt isn't able to determine the character set used correctly.

3.26. check_mbox_size

Type: boolean
Default: no

When this variable is set, mutt will use file size attribute instead of access time when checking for new mail in mbox and mmdf folders.

This variable is unset by default and should only be enabled when new mail detection for these folder types is unreliable or doesn't work.

Note that enabling this variable should happen before any “mailboxes” directives occur in configuration files regarding mbox or mmdf folders because mutt needs to determine the initial new mail status of such a mailbox by performing a fast mailbox scan when it is defined. Afterwards the new mail status is tracked by file size changes.

3.27. check_new

Type: boolean
Default: yes

Note: this option only affects maildir and MH style mailboxes.

When set, Mutt will check for new mail delivered while the mailbox is open. Especially with MH mailboxes, this operation can take quite some time since it involves scanning the directory and checking each file to see if it has already been looked at. If this variable is unset, no check for new mail is performed while the mailbox is open.

3.28. collapse_unread

Type: boolean
Default: yes

When unset, Mutt will not collapse a thread if it contains any unread messages.

3.29. compose_format

Type: string
Default: “-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-”

Controls the format of the status line displayed in the “compose” menu. This string is similar to $status_format, but has its own set of printf(3)-like sequences:

%a total number of attachments
%h local hostname
%l approximate size (in bytes) of the current message
%v Mutt version string

See the text describing the $status_format option for more information on how to set $compose_format.

3.30. config_charset

Type: string
Default: (empty)

When defined, Mutt will recode commands in rc files from this encoding to the current character set as specified by $charset and aliases written to $alias_file from the current character set.

Please note that if setting $charset it must be done before setting $config_charset.

Recoding should be avoided as it may render unconvertable characters as question marks which can lead to undesired side effects (for example in regular expressions).

3.31. confirmappend

Type: boolean
Default: yes

When set, Mutt will prompt for confirmation when appending messages to an existing mailbox.

3.32. confirmcreate

Type: boolean
Default: yes

When set, Mutt will prompt for confirmation when saving messages to a mailbox which does not yet exist before creating it.

3.33. connect_timeout

Type: number
Default: 30

Causes Mutt to timeout a network connection (for IMAP, POP or SMTP) after this many seconds if the connection is not able to be established. A negative value causes Mutt to wait indefinitely for the connection attempt to succeed.

3.34. content_type

Type: string
Default: “text/plain”

Sets the default Content-Type for the body of newly composed messages.

3.35. copy

Type: quadoption
Default: yes

This variable controls whether or not copies of your outgoing messages will be saved for later references. Also see $record, $save_name, $force_name and “fcc-hook”.

3.36. crypt_autoencrypt

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to PGP encrypt outgoing messages. This is probably only useful in connection to the “send-hook” command. It can be overridden by use of the pgp menu, when encryption is not required or signing is requested as well. If $smime_is_default is set, then OpenSSL is used instead to create S/MIME messages and settings can be overridden by use of the smime menu instead. (Crypto only)

3.37. crypt_autopgp

Type: boolean
Default: yes

This variable controls whether or not mutt may automatically enable PGP encryption/signing for messages. See also $crypt_autoencrypt, $crypt_replyencrypt, $crypt_autosign, $crypt_replysign and $smime_is_default.

3.38. crypt_autosign

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to cryptographically sign outgoing messages. This can be overridden by use of the pgp menu, when signing is not required or encryption is requested as well. If $smime_is_default is set, then OpenSSL is used instead to create S/MIME messages and settings can be overridden by use of the smime menu instead of the pgp menu. (Crypto only)

3.39. crypt_autosmime

Type: boolean
Default: yes

This variable controls whether or not mutt may automatically enable S/MIME encryption/signing for messages. See also $crypt_autoencrypt, $crypt_replyencrypt, $crypt_autosign, $crypt_replysign and $smime_is_default.

3.40. crypt_replyencrypt

Type: boolean
Default: yes

If set, automatically PGP or OpenSSL encrypt replies to messages which are encrypted. (Crypto only)

3.41. crypt_replysign

Type: boolean
Default: no

If set, automatically PGP or OpenSSL sign replies to messages which are signed.

Note: this does not work on messages that are encrypted and signed! (Crypto only)

3.42. crypt_replysignencrypted

Type: boolean
Default: no

If set, automatically PGP or OpenSSL sign replies to messages which are encrypted. This makes sense in combination with $crypt_replyencrypt, because it allows you to sign all messages which are automatically encrypted. This works around the problem noted in $crypt_replysign, that mutt is not able to find out whether an encrypted message is also signed. (Crypto only)

3.43. crypt_timestamp

Type: boolean
Default: yes

If set, mutt will include a time stamp in the lines surrounding PGP or S/MIME output, so spoofing such lines is more difficult. If you are using colors to mark these lines, and rely on these, you may unset this setting. (Crypto only)

3.44. crypt_use_gpgme

Type: boolean
Default: no

This variable controls the use of the GPGME-enabled crypto backends. If it is set and Mutt was built with gpgme support, the gpgme code for S/MIME and PGP will be used instead of the classic code. Note that you need to set this option in .muttrc; it won't have any effect when used interactively.

3.45. crypt_use_pka

Type: boolean
Default: no

Controls whether mutt uses PKA (see http://www.g10code.de/docs/pka-intro.de.pdf) during signature verification (only supported by the GPGME backend).

3.46. crypt_verify_sig

Type: quadoption
Default: yes

If “yes”, always attempt to verify PGP or S/MIME signatures. If “ask-*”, ask whether or not to verify the signature. If “no”, never attempt to verify cryptographic signatures. (Crypto only)

3.47. date_format

Type: string
Default: “!%a, %b %d, %Y at %I:%M:%S%p %Z”

This variable controls the format of the date printed by the “%d” sequence in $index_format. This is passed to the strftime(3) function to process the date, see the man page for the proper syntax.

Unless the first character in the string is a bang (“!”), the month and week day names are expanded according to the locale specified in the variable $locale. If the first character in the string is a bang, the bang is discarded, and the month and week day names in the rest of the string are expanded in the C locale (that is in US English).

3.48. default_hook

Type: string
Default: “~f %s !~P | (~P ~C %s)”

This variable controls how “message-hook”, “reply-hook”, “send-hook”, “send2-hook”, “save-hook”, and “fcc-hook” will be interpreted if they are specified with only a simple regexp, instead of a matching pattern. The hooks are expanded when they are declared, so a hook will be interpreted according to the value of this variable at the time the hook is declared.

The default value matches if the message is either from a user matching the regular expression given, or if it is from you (if the from address matches “alternates”) and is to or cc'ed to a user matching the given regular expression.

3.49. delete

Type: quadoption
Default: ask-yes

Controls whether or not messages are really deleted when closing or synchronizing a mailbox. If set to yes, messages marked for deleting will automatically be purged without prompting. If set to no, messages marked for deletion will be kept in the mailbox.

3.50. delete_untag

Type: boolean
Default: yes

If this option is set, mutt will untag messages when marking them for deletion. This applies when you either explicitly delete a message, or when you save it to another folder.

3.51. digest_collapse

Type: boolean
Default: yes

If this option is set, mutt's received-attachments menu will not show the subparts of individual messages in a multipart/digest. To see these subparts, press “v” on that menu.

3.52. display_filter

Type: path
Default: (empty)

When set, specifies a command used to filter messages. When a message is viewed it is passed as standard input to $display_filter, and the filtered message is read from the standard output.

3.53. dotlock_program

Type: path
Default: “/usr/local/bin/mutt_dotlock”

Contains the path of the mutt_dotlock(8) binary to be used by mutt.

3.54. dsn_notify

Type: string
Default: (empty)

This variable sets the request for when notification is returned. The string consists of a comma separated list (no spaces!) of one or more of the following: never, to never request notification, failure, to request notification on transmission failure, delay, to be notified of message delays, success, to be notified of successful transmission.

Example:

set dsn_notify="failure,delay"

Note: when using $sendmail for delivery, you should not enable this unless you are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1)-compatible interface supporting the -N option for DSN. For SMTP delivery, DSN support is auto-detected so that it depends on the server whether DSN will be used or not.

3.55. dsn_return

Type: string
Default: (empty)

This variable controls how much of your message is returned in DSN messages. It may be set to either hdrs to return just the message header, or full to return the full message.

Example:

set dsn_return=hdrs

Note: when using $sendmail for delivery, you should not enable this unless you are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1)-compatible interface supporting the -R option for DSN. For SMTP delivery, DSN support is auto-detected so that it depends on the server whether DSN will be used or not.

3.56. duplicate_threads

Type: boolean
Default: yes

This variable controls whether mutt, when $sort is set to threads, threads messages with the same Message-Id together. If it is set, it will indicate that it thinks they are duplicates of each other with an equals sign in the thread tree.

3.57. edit_headers

Type: boolean
Default: no

This option allows you to edit the header of your outgoing messages along with the body of your message.

Note that changes made to the References: and Date: headers are ignored for interoperability reasons.

3.58. editor

Type: path
Default: (empty)

This variable specifies which editor is used by mutt. It defaults to the value of the $VISUAL, or $EDITOR, environment variable, or to the string “vi” if neither of those are set.

3.59. encode_from

Type: boolean
Default: no

When set, mutt will quoted-printable encode messages when they contain the string “From ” (note the trailing space) in the beginning of a line. This is useful to avoid the tampering certain mail delivery and transport agents tend to do with messages (in order to prevent tools from misinterpreting the line as a mbox message separator).

3.60. entropy_file

Type: path
Default: (empty)

The file which includes random data that is used to initialize SSL library functions.

3.61. envelope_from_address

Type: e-mail address
Default: (empty)

Manually sets the envelope sender for outgoing messages. This value is ignored if $use_envelope_from is unset.

3.62. escape

Type: string
Default: “~”

Escape character to use for functions in the built-in editor.

3.63. fast_reply

Type: boolean
Default: no

When set, the initial prompt for recipients and subject are skipped when replying to messages, and the initial prompt for subject is skipped when forwarding messages.

Note: this variable has no effect when the $autoedit variable is set.

3.64. fcc_attach

Type: quadoption
Default: yes

This variable controls whether or not attachments on outgoing messages are saved along with the main body of your message.

3.65. fcc_clear

Type: boolean
Default: no

When this variable is set, FCCs will be stored unencrypted and unsigned, even when the actual message is encrypted and/or signed. (PGP only)

3.66. folder

Type: path
Default: “~/Mail”

Specifies the default location of your mailboxes. A “+” or “=” at the beginning of a pathname will be expanded to the value of this variable. Note that if you change this variable (from the default) value you need to make sure that the assignment occurs before you use “+” or “=” for any other variables since expansion takes place when handling the “mailboxes” command.

3.67. folder_format

Type: string
Default: “%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f”

This variable allows you to customize the file browser display to your personal taste. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%C current file number
%d date/time folder was last modified
%D date/time folder was last modified using $date_format.
%f filename (“/” is appended to directory names, “@” to symbolic links and “*” to executable files)
%F file permissions
%g group name (or numeric gid, if missing)
%l number of hard links
%N N if folder has new mail, blank otherwise
%s size in bytes
%t “*” if the file is tagged, blank otherwise
%u owner name (or numeric uid, if missing)
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

3.68. followup_to

Type: boolean
Default: yes

Controls whether or not the “Mail-Followup-To:” header field is generated when sending mail. When set, Mutt will generate this field when you are replying to a known mailing list, specified with the “subscribe” or “lists” commands.

This field has two purposes. First, preventing you from receiving duplicate copies of replies to messages which you send to mailing lists, and second, ensuring that you do get a reply separately for any messages sent to known lists to which you are not subscribed.

The header will contain only the list's address for subscribed lists, and both the list address and your own email address for unsubscribed lists. Without this header, a group reply to your message sent to a subscribed list will be sent to both the list and your address, resulting in two copies of the same email for you.

3.69. force_name

Type: boolean
Default: no

This variable is similar to $save_name, except that Mutt will store a copy of your outgoing message by the username of the address you are sending to even if that mailbox does not exist.

Also see the $record variable.

3.70. forward_decode

Type: boolean
Default: yes

Controls the decoding of complex MIME messages into text/plain when forwarding a message. The message header is also RFC2047 decoded. This variable is only used, if $mime_forward is unset, otherwise $mime_forward_decode is used instead.

3.71. forward_decrypt

Type: boolean
Default: yes

Controls the handling of encrypted messages when forwarding a message. When set, the outer layer of encryption is stripped off. This variable is only used if $mime_forward is set and $mime_forward_decode is unset. (PGP only)

3.72. forward_edit

Type: quadoption
Default: yes

This quadoption controls whether or not the user is automatically placed in the editor when forwarding messages. For those who always want to forward with no modification, use a setting of “no”.

3.73. forward_format

Type: string
Default: “[%a: %s]”

This variable controls the default subject when forwarding a message. It uses the same format sequences as the $index_format variable.

3.74. forward_quote

Type: boolean
Default: no

When set, forwarded messages included in the main body of the message (when $mime_forward is unset) will be quoted using $indent_string.

3.75. from

Type: e-mail address
Default: (empty)

When set, this variable contains a default from address. It can be overridden using “my_hdr” (including from a “send-hook”) and $reverse_name. This variable is ignored if $use_from is unset.

This setting defaults to the contents of the environment variable $EMAIL.

3.76. gecos_mask

Type: regular expression
Default: “^[^,]*”

A regular expression used by mutt to parse the GECOS field of a password entry when expanding the alias. The default value will return the string up to the first “,” encountered. If the GECOS field contains a string like “lastname, firstname” then you should set it to “.*”.

This can be useful if you see the following behavior: you address an e-mail to user ID “stevef” whose full name is “Steve Franklin”. If mutt expands “stevef” to “"Franklin" stevef@foo.bar” then you should set the $gecos_mask to a regular expression that will match the whole name so mutt will expand “Franklin” to “Franklin, Steve”.

3.77. hdrs

Type: boolean
Default: yes

When unset, the header fields normally added by the “my_hdr” command are not created. This variable must be unset before composing a new message or replying in order to take effect. If set, the user defined header fields are added to every new message.

3.78. header

Type: boolean
Default: no

When set, this variable causes Mutt to include the header of the message you are replying to into the edit buffer. The $weed setting applies.

3.79. header_cache

Type: path
Default: (empty)

This variable points to the header cache database. If pointing to a directory Mutt will contain a header cache database file per folder, if pointing to a file that file will be a single global header cache. By default it is unset so no header caching will be used.

Header caching can greatly improve speed when opening POP, IMAP MH or Maildir folders, see “caching” for details.

3.80. header_cache_compress

Type: boolean
Default: yes

When mutt is compiled with qdbm or tokyocabinet as header cache backend, this option determines whether the database will be compressed. Compression results in database files roughly being one fifth of the usual diskspace, but the decompression can result in a slower opening of cached folder(s) which in general is still much faster than opening non header cached folders.

3.81. header_cache_pagesize

Type: string
Default: “16384”

When mutt is compiled with either gdbm or bdb4 as the header cache backend, this option changes the database page size. Too large or too small values can waste space, memory, or CPU time. The default should be more or less optimal for most use cases.

3.82. help

Type: boolean
Default: yes

When set, help lines describing the bindings for the major functions provided by each menu are displayed on the first line of the screen.

Note: The binding will not be displayed correctly if the function is bound to a sequence rather than a single keystroke. Also, the help line may not be updated if a binding is changed while Mutt is running. Since this variable is primarily aimed at new users, neither of these should present a major problem.

3.83. hidden_host

Type: boolean
Default: no

When set, mutt will skip the host name part of $hostname variable when adding the domain part to addresses. This variable does not affect the generation of Message-IDs, and it will not lead to the cut-off of first-level domains.

3.84. hide_limited

Type: boolean
Default: no

When set, mutt will not show the presence of messages that are hidden by limiting, in the thread tree.

3.85. hide_missing

Type: boolean
Default: yes

When set, mutt will not show the presence of missing messages in the thread tree.

3.86. hide_thread_subject

Type: boolean
Default: yes

When set, mutt will not show the subject of messages in the thread tree that have the same subject as their parent or closest previously displayed sibling.

3.87. hide_top_limited

Type: boolean
Default: no

When set, mutt will not show the presence of messages that are hidden by limiting, at the top of threads in the thread tree. Note that when $hide_limited is set, this option will have no effect.

3.88. hide_top_missing

Type: boolean
Default: yes

When set, mutt will not show the presence of missing messages at the top of threads in the thread tree. Note that when $hide_missing is set, this option will have no effect.

3.89. history

Type: number
Default: 10

This variable controls the size (in number of strings remembered) of the string history buffer per category. The buffer is cleared each time the variable is set.

3.90. history_file

Type: path
Default: “~/.mutthistory”

The file in which Mutt will save its history.

3.91. honor_disposition

Type: boolean
Default: no

When set, Mutt will not display attachments with a disposition of “attachment” inline even if it could render the part to plain text. These MIME parts can only be viewed from the attachment menu.

If unset, Mutt will render all MIME parts it can properly transform to plain text.

3.92. honor_followup_to

Type: quadoption
Default: yes

This variable controls whether or not a Mail-Followup-To header is honored when group-replying to a message.

3.93. hostname

Type: string
Default: (empty)

Specifies the fully-qualified hostname of the system mutt is running on containing the host's name and the DNS domain it belongs to. It is used as the domain part (after “@”) for local email addresses as well as Message-Id headers.

Its value is determined at startup as follows: If the node's name as returned by the uname(3) function contains the hostname and the domain, these are used to construct $hostname. If there is no domain part returned, Mutt will look for a “domain” or “search” line in /etc/resolv.conf to determine the domain. Optionally, Mutt can be compiled with a fixed domain name in which case a detected one is not used.

Also see $use_domain and $hidden_host.

3.94. ignore_linear_white_space

Type: boolean
Default: no

This option replaces linear-white-space between encoded-word and text to a single space to prevent the display of MIME-encoded “Subject:” field from being divided into multiple lines.

3.95. ignore_list_reply_to

Type: boolean
Default: no

Affects the behavior of the <reply> function when replying to messages from mailing lists (as defined by the “subscribe” or “lists” commands). When set, if the “Reply-To:” field is set to the same value as the “To:” field, Mutt assumes that the “Reply-To:” field was set by the mailing list to automate responses to the list, and will ignore this field. To direct a response to the mailing list when this option is set, use the <list-reply> function; <group-reply> will reply to both the sender and the list.

3.96. imap_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an IMAP server, in the order mutt should try them. Authentication methods are either “login” or the right side of an IMAP “AUTH=xxx” capability string, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If it's unset (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set imap_authenticators="gssapi:cram-md5:login"

Note: Mutt will only fall back to other authentication methods if the previous methods are unavailable. If a method is available but authentication fails, mutt will not connect to the IMAP server.

3.97. imap_check_subscribed

Type: boolean
Default: no

When set, mutt will fetch the set of subscribed folders from your server on connection, and add them to the set of mailboxes it polls for new mail just as if you had issued individual “mailboxes” commands.

3.98. imap_delim_chars

Type: string
Default: “/.”

This contains the list of characters which you would like to treat as folder separators for displaying IMAP paths. In particular it helps in using the “=” shortcut for your folder variable.

3.99. imap_headers

Type: string
Default: (empty)

Mutt requests these header fields in addition to the default headers (“Date:”, “From:”, “Subject:”, “To:”, “Cc:”, “Message-Id:”, “References:”, “Content-Type:”, “Content-Description:”, “In-Reply-To:”, “Reply-To:”, “Lines:”, “List-Post:”, “X-Label:”) from IMAP servers before displaying the index menu. You may want to add more headers for spam detection.

Note: This is a space separated list, items should be uppercase and not contain the colon, e.g. “X-BOGOSITY X-SPAM-STATUS” for the “X-Bogosity:” and “X-Spam-Status:” header fields.

3.100. imap_idle

Type: boolean
Default: no

When set, mutt will attempt to use the IMAP IDLE extension to check for new mail in the current mailbox. Some servers (dovecot was the inspiration for this option) react badly to mutt's implementation. If your connection seems to freeze up periodically, try unsetting this.

3.101. imap_keepalive

Type: number
Default: 900

This variable specifies the maximum amount of time in seconds that mutt will wait before polling open IMAP connections, to prevent the server from closing them before mutt has finished with them. The default is well within the RFC-specified minimum amount of time (30 minutes) before a server is allowed to do this, but in practice the RFC does get violated every now and then. Reduce this number if you find yourself getting disconnected from your IMAP server due to inactivity.

3.102. imap_list_subscribed

Type: boolean
Default: no

This variable configures whether IMAP folder browsing will look for only subscribed folders or all folders. This can be toggled in the IMAP browser with the <toggle-subscribed> function.

3.103. imap_login

Type: string
Default: (empty)

Your login name on the IMAP server.

This variable defaults to the value of $imap_user.

3.104. imap_pass

Type: string
Default: (empty)

Specifies the password for your IMAP account. If unset, Mutt will prompt you for your password when you invoke the <imap-fetch-mail> function or try to open an IMAP folder.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.105. imap_passive

Type: boolean
Default: yes

When set, mutt will not open new IMAP connections to check for new mail. Mutt will only check for new mail over existing IMAP connections. This is useful if you don't want to be prompted to user/password pairs on mutt invocation, or if opening the connection is slow.

3.106. imap_peek

Type: boolean
Default: yes

When set, mutt will avoid implicitly marking your mail as read whenever you fetch a message from the server. This is generally a good thing, but can make closing an IMAP folder somewhat slower. This option exists to appease speed freaks.

3.107. imap_pipeline_depth

Type: number
Default: 15

Controls the number of IMAP commands that may be queued up before they are sent to the server. A deeper pipeline reduces the amount of time mutt must wait for the server, and can make IMAP servers feel much more responsive. But not all servers correctly handle pipelined commands, so if you have problems you might want to try setting this variable to 0.

Note: Changes to this variable have no effect on open connections.

3.108. imap_servernoise

Type: boolean
Default: yes

When set, mutt will display warning messages from the IMAP server as error messages. Since these messages are often harmless, or generated due to configuration problems on the server which are out of the users' hands, you may wish to suppress them at some point.

3.109. imap_user

Type: string
Default: (empty)

The name of the user whose mail you intend to access on the IMAP server.

This variable defaults to your user name on the local machine.

3.110. implicit_autoview

Type: boolean
Default: no

If set to “yes”, mutt will look for a mailcap entry with the “copiousoutput” flag set for every MIME attachment it doesn't have an internal viewer defined for. If such an entry is found, mutt will use the viewer defined in that entry to convert the body part to text form.

3.111. include

Type: quadoption
Default: ask-yes

Controls whether or not a copy of the message(s) you are replying to is included in your reply.

3.112. include_onlyfirst

Type: boolean
Default: no

Controls whether or not Mutt includes only the first attachment of the message you are replying.

3.113. indent_string

Type: string
Default: “> ”

Specifies the string to prepend to each line of text quoted in a message to which you are replying. You are strongly encouraged not to change this value, as it tends to agitate the more fanatical netizens.

The value of this option is ignored if $text_flowed is set, too because the quoting mechanism is strictly defined for format=flowed.

This option is a format string, please see the description of $index_format for supported printf(3)-style sequences.

3.114. index_format

Type: string
Default: “%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s”

This variable allows you to customize the message index display to your personal taste.

“Format strings” are similar to the strings used in the C function printf(3) to format output (see the man page for more details). The following sequences are defined in Mutt:

%a address of the author
%A reply-to address (if present; otherwise: address of author)
%b filename of the original message folder (think mailbox)
%B the list to which the letter was sent, or else the folder name (%b).
%c number of characters (bytes) in the message
%C current message number
%d date and time of the message in the format specified by $date_format converted to sender's time zone
%D date and time of the message in the format specified by $date_format converted to the local time zone
%e current message number in thread
%E number of messages in current thread
%f sender (address + real name), either From: or Return-Path:
%F author name, or recipient name if the message is from you
%H spam attribute(s) of this message
%i message-id of the current message
%l number of lines in the message (does not work with maildir, mh, and possibly IMAP folders)
%L If an address in the “To:” or “Cc:” header field matches an address defined by the users “subscribe” command, this displays "To <list-name>", otherwise the same as %F.
%m total number of message in the mailbox
%M number of hidden messages if the thread is collapsed.
%N message score
%n author's real name (or address if missing)
%O original save folder where mutt would formerly have stashed the message: list name or recipient name if not sent to a list
%P progress indicator for the built-in pager (how much of the file has been displayed)
%s subject of the message
%S status of the message (“N”/“D”/“d”/“!”/“r”/*)
%t “To:” field (recipients)
%T the appropriate character from the $to_chars string
%u user (login) name of the author
%v first name of the author, or the recipient if the message is from you
%X number of attachments (please see the “attachments” section for possible speed effects)
%y “X-Label:” field, if present
%Y “X-Label:” field, if present, and (1) not at part of a thread tree, (2) at the top of a thread, or (3) “X-Label:” is different from preceding message's “X-Label:”.
%Z message status flags
%{fmt} the date and time of the message is converted to sender's time zone, and “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%[fmt] the date and time of the message is converted to the local time zone, and “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%(fmt) the local date and time when the message was received. “fmt” is expanded by the library function strftime(3); a leading bang disables locales
%<fmt> the current local time. “fmt” is expanded by the library function strftime(3); a leading bang disables locales.
%>X right justify the rest of the string and pad with character “X”
%|X pad to the end of the line with character “X”
%*X soft-fill with character “X” as pad

“Soft-fill” deserves some explanation: Normal right-justification will print everything to the left of the “%>”, displaying padding and whatever lies to the right only if there's room. By contrast, soft-fill gives priority to the right-hand side, guaranteeing space to display it and showing padding only if there's still room. If necessary, soft-fill will eat text leftwards to make room for rightward text.

Note that these expandos are supported in “save-hook”, “fcc-hook” and “fcc-save-hook”, too.

3.115. ispell

Type: path
Default: “ispell”

How to invoke ispell (GNU's spell-checking software).

3.116. keep_flagged

Type: boolean
Default: no

If set, read messages marked as flagged will not be moved from your spool mailbox to your $mbox mailbox, or as a result of a “mbox-hook” command.

3.117. locale

Type: string
Default: “C”

The locale used by strftime(3) to format dates. Legal values are the strings your system accepts for the locale environment variable $LC_TIME.

3.118. mail_check

Type: number
Default: 5

This variable configures how often (in seconds) mutt should look for new mail. Also see the $timeout variable.

3.119. mail_check_recent

Type: boolean
Default: yes

When set, Mutt will only notify you about new mail that has been received since the last time you opened the mailbox. When unset, Mutt will notify you if any new mail exists in the mailbox, regardless of whether you have visited it recently.

When $mark_old is set, Mutt does not consider the mailbox to contain new mail if only old messages exist.

3.120. mailcap_path

Type: string
Default: (empty)

This variable specifies which files to consult when attempting to display MIME bodies not directly supported by Mutt.

3.121. mailcap_sanitize

Type: boolean
Default: yes

If set, mutt will restrict possible characters in mailcap % expandos to a well-defined set of safe characters. This is the safe setting, but we are not sure it doesn't break some more advanced MIME stuff.

DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE DOING!

3.122. maildir_header_cache_verify

Type: boolean
Default: yes

Check for Maildir unaware programs other than mutt having modified maildir files when the header cache is in use. This incurs one stat(2) per message every time the folder is opened (which can be very slow for NFS folders).

3.123. maildir_trash

Type: boolean
Default: no

If set, messages marked as deleted will be saved with the maildir trashed flag instead of unlinked. Note: this only applies to maildir-style mailboxes. Setting it will have no effect on other mailbox types.

3.124. mark_old

Type: boolean
Default: yes

Controls whether or not mutt marks new unread messages as old if you exit a mailbox without reading them. With this option set, the next time you start mutt, the messages will show up with an “O” next to them in the index menu, indicating that they are old.

3.125. markers

Type: boolean
Default: yes

Controls the display of wrapped lines in the internal pager. If set, a “+” marker is displayed at the beginning of wrapped lines.

Also see the $smart_wrap variable.

3.126. mask

Type: regular expression
Default: “!^\.[^.]”

A regular expression used in the file browser, optionally preceded by the not operator “!”. Only files whose names match this mask will be shown. The match is always case-sensitive.

3.127. mbox

Type: path
Default: “~/mbox”

This specifies the folder into which read mail in your $spoolfile folder will be appended.

Also see the $move variable.

3.128. mbox_type

Type: folder magic
Default: mbox

The default mailbox type used when creating new folders. May be any of “mbox”, “MMDF”, “MH” and “Maildir”. This is overridden by the -m command-line option.

3.129. menu_context

Type: number
Default: 0

This variable controls the number of lines of context that are given when scrolling through menus. (Similar to $pager_context.)

3.130. menu_move_off

Type: boolean
Default: yes

When unset, the bottom entry of menus will never scroll up past the bottom of the screen, unless there are less entries than lines. When set, the bottom entry may move off the bottom.

3.131. menu_scroll

Type: boolean
Default: no

When set, menus will be scrolled up or down one line when you attempt to move across a screen boundary. If unset, the screen is cleared and the next or previous page of the menu is displayed (useful for slow links to avoid many redraws).

3.132. message_cache_clean

Type: boolean
Default: no

If set, mutt will clean out obsolete entries from the message cache when the mailbox is synchronized. You probably only want to set it every once in a while, since it can be a little slow (especially for large folders).

3.133. message_cachedir

Type: path
Default: (empty)

Set this to a directory and mutt will cache copies of messages from your IMAP and POP servers here. You are free to remove entries at any time.

When setting this variable to a directory, mutt needs to fetch every remote message only once and can perform regular expression searches as fast as for local folders.

Also see the $message_cache_clean variable.

3.134. message_format

Type: string
Default: “%s”

This is the string displayed in the “attachment” menu for attachments of type message/rfc822. For a full listing of defined printf(3)-like sequences see the section on $index_format.

3.135. meta_key

Type: boolean
Default: no

If set, forces Mutt to interpret keystrokes with the high bit (bit 8) set as if the user had pressed the Esc key and whatever key remains after having the high bit removed. For example, if the key pressed has an ASCII value of 0xf8, then this is treated as if the user had pressed Esc then “x”. This is because the result of removing the high bit from 0xf8 is 0x78, which is the ASCII character “x”.

3.136. metoo

Type: boolean
Default: no

If unset, Mutt will remove your address (see the “alternates” command) from the list of recipients when replying to a message.

3.137. mh_purge

Type: boolean
Default: no

When unset, mutt will mimic mh's behavior and rename deleted messages to ,<old file name> in mh folders instead of really deleting them. This leaves the message on disk but makes programs reading the folder ignore it. If the variable is set, the message files will simply be deleted.

This option is similar to $maildir_trash for Maildir folders.

3.138. mh_seq_flagged

Type: string
Default: “flagged”

The name of the MH sequence used for flagged messages.

3.139. mh_seq_replied

Type: string
Default: “replied”

The name of the MH sequence used to tag replied messages.

3.140. mh_seq_unseen

Type: string
Default: “unseen”

The name of the MH sequence used for unseen messages.

3.141. mime_forward

Type: quadoption
Default: no

When set, the message you are forwarding will be attached as a separate message/rfc822 MIME part instead of included in the main body of the message. This is useful for forwarding MIME messages so the receiver can properly view the message as it was delivered to you. If you like to switch between MIME and not MIME from mail to mail, set this variable to “ask-no” or “ask-yes”.

Also see $forward_decode and $mime_forward_decode.

3.142. mime_forward_decode

Type: boolean
Default: no

Controls the decoding of complex MIME messages into text/plain when forwarding a message while $mime_forward is set. Otherwise $forward_decode is used instead.

3.143. mime_forward_rest

Type: quadoption
Default: yes

When forwarding multiple attachments of a MIME message from the attachment menu, attachments which cannot be decoded in a reasonable manner will be attached to the newly composed message if this option is set.

3.144. mix_entry_format

Type: string
Default: “%4n %c %-16s %a”

This variable describes the format of a remailer line on the mixmaster chain selection screen. The following printf(3)-like sequences are supported:

%n The running number on the menu.
%c Remailer capabilities.
%s The remailer's short name.
%a The remailer's e-mail address.

3.145. mixmaster

Type: path
Default: “mixmaster”

This variable contains the path to the Mixmaster binary on your system. It is used with various sets of parameters to gather the list of known remailers, and to finally send a message through the mixmaster chain.

3.146. move

Type: quadoption
Default: no

Controls whether or not Mutt will move read messages from your spool mailbox to your $mbox mailbox, or as a result of a “mbox-hook” command.

3.147. narrow_tree

Type: boolean
Default: no

This variable, when set, makes the thread tree narrower, allowing deeper threads to fit on the screen.

3.148. net_inc

Type: number
Default: 10

Operations that expect to transfer a large amount of data over the network will update their progress every $net_inc kilobytes. If set to 0, no progress messages will be displayed.

See also $read_inc, $write_inc and $net_inc.

3.149. pager

Type: path
Default: “builtin”

This variable specifies which pager you would like to use to view messages. The value “builtin” means to use the built-in pager, otherwise this variable should specify the pathname of the external pager you would like to use.

Using an external pager may have some disadvantages: Additional keystrokes are necessary because you can't call mutt functions directly from the pager, and screen resizes cause lines longer than the screen width to be badly formatted in the help menu.

3.150. pager_context

Type: number
Default: 0

This variable controls the number of lines of context that are given when displaying the next or previous page in the internal pager. By default, Mutt will display the line after the last one on the screen at the top of the next page (0 lines of context).

This variable also specifies the amount of context given for search results. If positive, this many lines will be given before a match, if 0, the match will be top-aligned.

3.151. pager_format

Type: string
Default: “-%Z- %C/%m: %-20.20n   %s%*  -- (%P)”

This variable controls the format of the one-line message “status” displayed before each message in either the internal or an external pager. The valid sequences are listed in the $index_format section.

3.152. pager_index_lines

Type: number
Default: 0

Determines the number of lines of a mini-index which is shown when in the pager. The current message, unless near the top or bottom of the folder, will be roughly one third of the way down this mini-index, giving the reader the context of a few messages before and after the message. This is useful, for example, to determine how many messages remain to be read in the current thread. One of the lines is reserved for the status bar from the index, so a setting of 6 will only show 5 lines of the actual index. A value of 0 results in no index being shown. If the number of messages in the current folder is less than $pager_index_lines, then the index will only use as many lines as it needs.

3.153. pager_stop

Type: boolean
Default: no

When set, the internal-pager will not move to the next message when you are at the end of a message and invoke the <next-page> function.

3.154. pgp_auto_decode

Type: boolean
Default: no

If set, mutt will automatically attempt to decrypt traditional PGP messages whenever the user performs an operation which ordinarily would result in the contents of the message being operated on. For example, if the user displays a pgp-traditional message which has not been manually checked with the <check-traditional-pgp> function, mutt will automatically check the message for traditional pgp.

3.155. pgp_autoinline

Type: boolean
Default: no

This option controls whether Mutt generates old-style inline (traditional) PGP encrypted or signed messages under certain circumstances. This can be overridden by use of the pgp menu, when inline is not required.

Note that Mutt might automatically use PGP/MIME for messages which consist of more than a single MIME part. Mutt can be configured to ask before sending PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.156. pgp_check_exit

Type: boolean
Default: yes

If set, mutt will check the exit code of the PGP subprocess when signing or encrypting. A non-zero exit code means that the subprocess failed. (PGP only)

3.157. pgp_clearsign_command

Type: string
Default: (empty)

This format is used to create an old-style “clearsigned” PGP message. Note that the use of this format is strongly deprecated.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.158. pgp_decode_command

Type: string
Default: (empty)

This format strings specifies a command which is used to decode application/pgp attachments.

The PGP command formats have their own set of printf(3)-like sequences:

%p Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty string otherwise. Note: This may be used with a %? construct.
%f Expands to the name of a file containing a message.
%s Expands to the name of a file containing the signature part of a multipart/signed attachment when verifying it.
%a The value of $pgp_sign_as.
%r One or more key IDs.

For examples on how to configure these formats for the various versions of PGP which are floating around, see the pgp and gpg sample configuration files in the samples/ subdirectory which has been installed on your system alongside the documentation. (PGP only)

3.159. pgp_decrypt_command

Type: string
Default: (empty)

This command is used to decrypt a PGP encrypted message.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.160. pgp_encrypt_only_command

Type: string
Default: (empty)

This command is used to encrypt a body part without signing it.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.161. pgp_encrypt_sign_command

Type: string
Default: (empty)

This command is used to both sign and encrypt a body part.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.162. pgp_entry_format

Type: string
Default: “%4n %t%f %4l/0x%k %-4a %2c %u”

This variable allows you to customize the PGP key selection menu to your personal taste. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%n number
%k key id
%u user id
%a algorithm
%l key length
%f flags
%c capabilities
%t trust/validity of the key-uid association
%[<s>] date of the key where <s> is an strftime(3) expression

(PGP only)

3.163. pgp_export_command

Type: string
Default: (empty)

This command is used to export a public key from the user's key ring.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.164. pgp_getkeys_command

Type: string
Default: (empty)

This command is invoked whenever mutt will need public key information. Of the sequences supported by $pgp_decode_command, %r is the only printf(3)-like sequence used with this format. (PGP only)

3.165. pgp_good_sign

Type: regular expression
Default: (empty)

If you assign a text to this variable, then a PGP signature is only considered verified if the output from $pgp_verify_command contains the text. Use this variable if the exit code from the command is 0 even for bad signatures. (PGP only)

3.166. pgp_ignore_subkeys

Type: boolean
Default: yes

Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, the principal key will inherit the subkeys' capabilities. Unset this if you want to play interesting key selection games. (PGP only)

3.167. pgp_import_command

Type: string
Default: (empty)

This command is used to import a key from a message into the user's public key ring.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.168. pgp_list_pubring_command

Type: string
Default: (empty)

This command is used to list the public key ring's contents. The output format must be analogous to the one used by

gpg --list-keys --with-colons.

This format is also generated by the pgpring utility which comes with mutt.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.169. pgp_list_secring_command

Type: string
Default: (empty)

This command is used to list the secret key ring's contents. The output format must be analogous to the one used by:

gpg --list-keys --with-colons.

This format is also generated by the pgpring utility which comes with mutt.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.170. pgp_long_ids

Type: boolean
Default: no

If set, use 64 bit PGP key IDs, if unset use the normal 32 bit key IDs. (PGP only)

3.171. pgp_mime_auto

Type: quadoption
Default: ask-yes

This option controls whether Mutt will prompt you for automatically sending a (signed/encrypted) message using PGP/MIME when inline (traditional) fails (for any reason).

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.172. pgp_replyinline

Type: boolean
Default: no

Setting this variable will cause Mutt to always attempt to create an inline (traditional) message when replying to a message which is PGP encrypted/signed inline. This can be overridden by use of the pgp menu, when inline is not required. This option does not automatically detect if the (replied-to) message is inline; instead it relies on Mutt internals for previously checked/flagged messages.

Note that Mutt might automatically use PGP/MIME for messages which consist of more than a single MIME part. Mutt can be configured to ask before sending PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using the old-style PGP message format is strongly deprecated. (PGP only)

3.173. pgp_retainable_sigs

Type: boolean
Default: no

If set, signed and encrypted messages will consist of nested multipart/signed and multipart/encrypted body parts.

This is useful for applications like encrypted and signed mailing lists, where the outer layer (multipart/encrypted) can be easily removed, while the inner multipart/signed part is retained. (PGP only)

3.174. pgp_show_unusable

Type: boolean
Default: yes

If set, mutt will display non-usable keys on the PGP key selection menu. This includes keys which have been revoked, have expired, or have been marked as “disabled” by the user. (PGP only)

3.175. pgp_sign_as

Type: string
Default: (empty)

If you have more than one key pair, this option allows you to specify which of your private keys to use. It is recommended that you use the keyid form to specify your key (e.g. 0x00112233). (PGP only)

3.176. pgp_sign_command

Type: string
Default: (empty)

This command is used to create the detached PGP signature for a multipart/signed PGP/MIME body part.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.177. pgp_sort_keys

Type: sort order
Default: address

Specifies how the entries in the pgp menu are sorted. The following are legal values:

address sort alphabetically by user id
keyid sort alphabetically by key id
date sort by key creation date
trust sort by the trust of the key

If you prefer reverse order of the above values, prefix it with “reverse-”. (PGP only)

3.178. pgp_strict_enc

Type: boolean
Default: yes

If set, Mutt will automatically encode PGP/MIME signed messages as quoted-printable. Please note that unsetting this variable may lead to problems with non-verifyable PGP signatures, so only change this if you know what you are doing. (PGP only)

3.179. pgp_timeout

Type: number
Default: 300

The number of seconds after which a cached passphrase will expire if not used. (PGP only)

3.180. pgp_use_gpg_agent

Type: boolean
Default: no

If set, mutt will use a possibly-running gpg-agent(1) process. (PGP only)

3.181. pgp_verify_command

Type: string
Default: (empty)

This command is used to verify PGP signatures.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.182. pgp_verify_key_command

Type: string
Default: (empty)

This command is used to verify key information from the key selection menu.

This is a format string, see the $pgp_decode_command command for possible printf(3)-like sequences. (PGP only)

3.183. pipe_decode

Type: boolean
Default: no

Used in connection with the <pipe-message> command. When unset, Mutt will pipe the messages without any preprocessing. When set, Mutt will weed headers and will attempt to decode the messages first.

3.184. pipe_sep

Type: string
Default: “\n”

The separator to add between messages when piping a list of tagged messages to an external Unix command.

3.185. pipe_split

Type: boolean
Default: no

Used in connection with the <pipe-message> function following <tag-prefix>. If this variable is unset, when piping a list of tagged messages Mutt will concatenate the messages and will pipe them all concatenated. When set, Mutt will pipe the messages one by one. In both cases the messages are piped in the current sorted order, and the $pipe_sep separator is added after each message.

3.186. pop_auth_try_all

Type: boolean
Default: yes

If set, Mutt will try all available authentication methods. When unset, Mutt will only fall back to other authentication methods if the previous methods are unavailable. If a method is available but authentication fails, Mutt will not connect to the POP server.

3.187. pop_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an POP server, in the order mutt should try them. Authentication methods are either “user”, “apop” or any SASL mechanism, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If this option is unset (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set pop_authenticators="digest-md5:apop:user"

3.188. pop_checkinterval

Type: number
Default: 60

This variable configures how often (in seconds) mutt should look for new mail in the currently selected mailbox if it is a POP mailbox.

3.189. pop_delete

Type: quadoption
Default: ask-no

If set, Mutt will delete successfully downloaded messages from the POP server when using the <fetch-mail> function. When unset, Mutt will download messages but also leave them on the POP server.

3.190. pop_host

Type: string
Default: (empty)

The name of your POP server for the <fetch-mail> function. You can also specify an alternative port, username and password, i.e.:

[pop[s]://][username[:password]@]popserver[:port]

where “[...]” denotes an optional part.

3.191. pop_last

Type: boolean
Default: no

If this variable is set, mutt will try to use the “LAST” POP command for retrieving only unread messages from the POP server when using the <fetch-mail> function.

3.192. pop_pass

Type: string
Default: (empty)

Specifies the password for your POP account. If unset, Mutt will prompt you for your password when you open a POP mailbox.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.193. pop_reconnect

Type: quadoption
Default: ask-yes

Controls whether or not Mutt will try to reconnect to the POP server if the connection is lost.

3.194. pop_user

Type: string
Default: (empty)

Your login name on the POP server.

This variable defaults to your user name on the local machine.

3.195. post_indent_string

Type: string
Default: (empty)

Similar to the $attribution variable, Mutt will append this string after the inclusion of a message which is being replied to.

3.196. postpone

Type: quadoption
Default: ask-yes

Controls whether or not messages are saved in the $postponed mailbox when you elect not to send immediately.

Also see the $recall variable.

3.197. postponed

Type: path
Default: “~/postponed”

Mutt allows you to indefinitely “postpone sending a message” which you are editing. When you choose to postpone a message, Mutt saves it in the mailbox specified by this variable.

Also see the $postpone variable.

3.198. preconnect

Type: string
Default: (empty)

If set, a shell command to be executed if mutt fails to establish a connection to the server. This is useful for setting up secure connections, e.g. with ssh(1). If the command returns a nonzero status, mutt gives up opening the server. Example:

set preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net \
sleep 20 < /dev/null > /dev/null"

Mailbox “foo” on “mailhost.net” can now be reached as “{localhost:1234}foo”.

Note: For this example to work, you must be able to log in to the remote machine without having to enter a password.

3.199. print

Type: quadoption
Default: ask-no

Controls whether or not Mutt really prints messages. This is set to “ask-no” by default, because some people accidentally hit “p” often.

3.200. print_command

Type: path
Default: “lpr”

This specifies the command pipe that should be used to print messages.

3.201. print_decode

Type: boolean
Default: yes

Used in connection with the <print-message> command. If this option is set, the message is decoded before it is passed to the external command specified by $print_command. If this option is unset, no processing will be applied to the message when printing it. The latter setting may be useful if you are using some advanced printer filter which is able to properly format e-mail messages for printing.

3.202. print_split

Type: boolean
Default: no

Used in connection with the <print-message> command. If this option is set, the command specified by $print_command is executed once for each message which is to be printed. If this option is unset, the command specified by $print_command is executed only once, and all the messages are concatenated, with a form feed as the message separator.

Those who use the enscript(1) program's mail-printing mode will most likely want to set this option.

3.203. prompt_after

Type: boolean
Default: yes

If you use an external $pager, setting this variable will cause Mutt to prompt you for a command when the pager exits rather than returning to the index menu. If unset, Mutt will return to the index menu when the external pager exits.

3.204. query_command

Type: path
Default: (empty)

This specifies the command Mutt will use to make external address queries. The string may contain a “%s”, which will be substituted with the query string the user types. Mutt will add quotes around the string substituted for “%s” automatically according to shell quoting rules, so you should avoid adding your own. If no “%s” is found in the string, Mutt will append the user's query to the end of the string. See “query” for more information.

3.205. query_format

Type: string
Default: “%4c %t %-25.25a %-25.25n %?e?(%e)?”

This variable describes the format of the “query” menu. The following printf(3)-style sequences are understood:

%a destination address
%c current entry number
%e extra information *
%n destination name
%t “*” if current entry is tagged, a space otherwise
%>X right justify the rest of the string and pad with “X”
%|X pad to the end of the line with “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

* = can be optionally printed if nonzero, see the $status_format documentation.

3.206. quit

Type: quadoption
Default: yes

This variable controls whether “quit” and “exit” actually quit from mutt. If this option is set, they do quit, if it is unset, they have no effect, and if it is set to ask-yes or ask-no, you are prompted for confirmation when you try to quit.

3.207. quote_regexp

Type: regular expression
Default: “^([ \t]*[|>:}#])+”

A regular expression used in the internal pager to determine quoted sections of text in the body of a message. Quoted text may be filtered out using the <toggle-quoted> command, or colored according to the “color quoted” family of directives.

Higher levels of quoting may be colored differently (“color quoted1”, “color quoted2”, etc.). The quoting level is determined by removing the last character from the matched text and recursively reapplying the regular expression until it fails to produce a match.

Match detection may be overridden by the $smileys regular expression.

3.208. read_inc

Type: number
Default: 10

If set to a value greater than 0, Mutt will display which message it is currently on when reading a mailbox or when performing search actions such as search and limit. The message is printed after this many messages have been read or searched (e.g., if set to 25, Mutt will print a message when it is at message 25, and then again when it gets to message 50). This variable is meant to indicate progress when reading or searching large mailboxes which may take some time. When set to 0, only a single message will appear before the reading the mailbox.

Also see the $write_inc, $net_inc and $time_inc variables and the “tuning” section of the manual for performance considerations.

3.209. read_only

Type: boolean
Default: no

If set, all folders are opened in read-only mode.

3.210. realname

Type: string
Default: (empty)

This variable specifies what “real” or “personal” name should be used when sending messages.

By default, this is the GECOS field from /etc/passwd. Note that this variable will not be used when the user has set a real name in the $from variable.

3.211. recall

Type: quadoption
Default: ask-yes

Controls whether or not Mutt recalls postponed messages when composing a new message.

Setting this variable to is not generally useful, and thus not recommended.

Also see $postponed variable.

3.212. record

Type: path
Default: “~/sent”

This specifies the file into which your outgoing messages should be appended. (This is meant as the primary method for saving a copy of your messages, but another way to do this is using the “my_hdr” command to create a “Bcc:” field with your email address in it.)

The value of $record is overridden by the $force_name and $save_name variables, and the “fcc-hook” command.

3.213. reply_regexp

Type: regular expression
Default: “^(re([\[0-9\]+])*|aw):[ \t]*”

A regular expression used to recognize reply messages when threading and replying. The default value corresponds to the English "Re:" and the German "Aw:".

3.214. reply_self

Type: boolean
Default: no

If unset and you are replying to a message sent by you, Mutt will assume that you want to reply to the recipients of that message rather than to yourself.

Also see the “alternates” command.

3.215. reply_to

Type: quadoption
Default: ask-yes

If set, when replying to a message, Mutt will use the address listed in the Reply-to: header as the recipient of the reply. If unset, it will use the address in the From: header field instead. This option is useful for reading a mailing list that sets the Reply-To: header field to the list address and you want to send a private message to the author of a message.

3.216. resolve

Type: boolean
Default: yes

When set, the cursor will be automatically advanced to the next (possibly undeleted) message whenever a command that modifies the current message is executed.

3.217. reverse_alias

Type: boolean
Default: no

This variable controls whether or not Mutt will display the “personal” name from your aliases in the index menu if it finds an alias that matches the message's sender. For example, if you have the following alias:

alias juser abd30425@somewhere.net (Joe User)

and then you receive mail which contains the following header:

From: abd30425@somewhere.net

It would be displayed in the index menu as “Joe User” instead of “abd30425@somewhere.net.” This is useful when the person's e-mail address is not human friendly.

3.218. reverse_name

Type: boolean
Default: no

It may sometimes arrive that you receive mail to a certain machine, move the messages to another machine, and reply to some the messages from there. If this variable is set, the default From: line of the reply messages is built using the address where you received the messages you are replying to if that address matches your “alternates”. If the variable is unset, or the address that would be used doesn't match your “alternates”, the From: line will use your address on the current machine.

Also see the “alternates” command.

3.219. reverse_realname

Type: boolean
Default: yes

This variable fine-tunes the behavior of the $reverse_name feature. When it is set, mutt will use the address from incoming messages as-is, possibly including eventual real names. When it is unset, mutt will override any such real names with the setting of the $realname variable.

3.220. rfc2047_parameters

Type: boolean
Default: no

When this variable is set, Mutt will decode RFC2047-encoded MIME parameters. You want to set this variable when mutt suggests you to save attachments to files named like:

=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=

When this variable is set interactively, the change won't be active until you change folders.

Note that this use of RFC2047's encoding is explicitly prohibited by the standard, but nevertheless encountered in the wild.

Also note that setting this parameter will not have the effect that mutt generates this kind of encoding. Instead, mutt will unconditionally use the encoding specified in RFC2231.

3.221. save_address

Type: boolean
Default: no

If set, mutt will take the sender's full address when choosing a default folder for saving a mail. If $save_name or $force_name is set too, the selection of the Fcc folder will be changed as well.

3.222. save_empty

Type: boolean
Default: yes

When unset, mailboxes which contain no saved messages will be removed when closed (the exception is $spoolfile which is never removed). If set, mailboxes are never removed.

Note: This only applies to mbox and MMDF folders, Mutt does not delete MH and Maildir directories.

3.223. save_history

Type: number
Default: 0

This variable controls the size of the history (per category) saved in the $history_file file.

3.224. save_name

Type: boolean
Default: no

This variable controls how copies of outgoing messages are saved. When set, a check is made to see if a mailbox specified by the recipient address exists (this is done by searching for a mailbox in the $folder directory with the username part of the recipient address). If the mailbox exists, the outgoing message will be saved to that mailbox, otherwise the message is saved to the $record mailbox.

Also see the $force_name variable.

3.225. score

Type: boolean
Default: yes

When this variable is unset, scoring is turned off. This can be useful to selectively disable scoring for certain folders when the $score_threshold_delete variable and related are used.

3.226. score_threshold_delete

Type: number
Default: -1

Messages which have been assigned a score equal to or lower than the value of this variable are automatically marked for deletion by mutt. Since mutt scores are always greater than or equal to zero, the default setting of this variable will never mark a message for deletion.

3.227. score_threshold_flag

Type: number
Default: 9999

Messages which have been assigned a score greater than or equal to this variable's value are automatically marked "flagged".

3.228. score_threshold_read

Type: number
Default: -1

Messages which have been assigned a score equal to or lower than the value of this variable are automatically marked as read by mutt. Since mutt scores are always greater than or equal to zero, the default setting of this variable will never mark a message read.

3.229. search_context

Type: number
Default: 0

For the pager, this variable specifies the number of lines shown before search results. By default, search results will be top-aligned.

3.230. send_charset

Type: string
Default: “us-ascii:iso-8859-1:utf-8”

A colon-delimited list of character sets for outgoing messages. Mutt will use the first character set into which the text can be converted exactly. If your $charset is not “iso-8859-1” and recipients may not understand “UTF-8”, it is advisable to include in the list an appropriate widely used standard character set (such as “iso-8859-2”, “koi8-r” or “iso-2022-jp”) either instead of or after “iso-8859-1”.

In case the text cannot be converted into one of these exactly, mutt uses $charset as a fallback.

3.231. sendmail

Type: path
Default: “/usr/sbin/sendmail -oem -oi”

Specifies the program and arguments used to deliver mail sent by Mutt. Mutt expects that the specified program interprets additional arguments as recipient addresses.

3.232. sendmail_wait

Type: number
Default: 0

Specifies the number of seconds to wait for the $sendmail process to finish before giving up and putting delivery in the background.

Mutt interprets the value of this variable as follows:

>0 number of seconds to wait for sendmail to finish before continuing
0 wait forever for sendmail to finish
<0 always put sendmail in the background without waiting

Note that if you specify a value other than 0, the output of the child process will be put in a temporary file. If there is some error, you will be informed as to where to find the output.

3.233. shell

Type: path
Default: (empty)

Command to use when spawning a subshell. By default, the user's login shell from /etc/passwd is used.

3.234. sig_dashes

Type: boolean
Default: yes

If set, a line containing “-- ” (note the trailing space) will be inserted before your $signature. It is strongly recommended that you not unset this variable unless your signature contains just your name. The reason for this is because many software packages use “-- \n” to detect your signature. For example, Mutt has the ability to highlight the signature in a different color in the built-in pager.

3.235. sig_on_top

Type: boolean
Default: no

If set, the signature will be included before any quoted or forwarded text. It is strongly recommended that you do not set this variable unless you really know what you are doing, and are prepared to take some heat from netiquette guardians.

3.236. signature

Type: path
Default: “~/.signature”

Specifies the filename of your signature, which is appended to all outgoing messages. If the filename ends with a pipe (“|”), it is assumed that filename is a shell command and input should be read from its standard output.

3.237. simple_search

Type: string
Default: “~f %s | ~s %s”

Specifies how Mutt should expand a simple search into a real search pattern. A simple search is one that does not contain any of the “~” pattern operators. See “patterns” for more information on search patterns.

For example, if you simply type “joe” at a search or limit prompt, Mutt will automatically expand it to the value specified by this variable by replacing “%s” with the supplied string. For the default value, “joe” would be expanded to: “~f joe | ~s joe”.

3.238. sleep_time

Type: number
Default: 1

Specifies time, in seconds, to pause while displaying certain informational messages, while moving from folder to folder and after expunging messages from the current folder. The default is to pause one second, so a value of zero for this option suppresses the pause.

3.239. smart_wrap

Type: boolean
Default: yes

Controls the display of lines longer than the screen width in the internal pager. If set, long lines are wrapped at a word boundary. If unset, lines are simply wrapped at the screen edge. Also see the $markers variable.

3.240. smileys

Type: regular expression
Default: “(>From )|(:[-^]?[][)(><}{|/DP])”

The pager uses this variable to catch some common false positives of $quote_regexp, most notably smileys and not consider a line quoted text if it also matches $smileys. This mostly happens at the beginning of a line.

3.241. smime_ask_cert_label

Type: boolean
Default: yes

This flag controls whether you want to be asked to enter a label for a certificate about to be added to the database or not. It is set by default. (S/MIME only)

3.242. smime_ca_location

Type: path
Default: (empty)

This variable contains the name of either a directory, or a file which contains trusted certificates for use with OpenSSL. (S/MIME only)

3.243. smime_certificates

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, mutt has to handle storage and retrieval of keys by itself. This is very basic right now, and keys and certificates are stored in two different directories, both named as the hash-value retrieved from OpenSSL. There is an index file which contains mailbox-address keyid pairs, and which can be manually edited. This option points to the location of the certificates. (S/MIME only)

3.244. smime_decrypt_command

Type: string
Default: (empty)

This format string specifies a command which is used to decrypt application/x-pkcs7-mime attachments.

The OpenSSL command formats have their own set of printf(3)-like sequences similar to PGP's:

%f Expands to the name of a file containing a message.
%s Expands to the name of a file containing the signature part of a multipart/signed attachment when verifying it.
%k The key-pair specified with $smime_default_key
%c One or more certificate IDs.
%a The algorithm used for encryption.
%C CA location: Depending on whether $smime_ca_location points to a directory or file, this expands to “-CApath $smime_ca_location” or “-CAfile $smime_ca_location”.

For examples on how to configure these formats, see the smime.rc in the samples/ subdirectory which has been installed on your system alongside the documentation. (S/MIME only)

3.245. smime_decrypt_use_default_key

Type: boolean
Default: yes

If set (default) this tells mutt to use the default key for decryption. Otherwise, if managing multiple certificate-key-pairs, mutt will try to use the mailbox-address to determine the key to use. It will ask you to supply a key, if it can't find one. (S/MIME only)

3.246. smime_default_key

Type: string
Default: (empty)

This is the default key-pair to use for signing. This must be set to the keyid (the hash-value that OpenSSL generates) to work properly (S/MIME only)

3.247. smime_encrypt_command

Type: string
Default: (empty)

This command is used to create encrypted S/MIME messages.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.248. smime_encrypt_with

Type: string
Default: (empty)

This sets the algorithm that should be used for encryption. Valid choices are “des”, “des3”, “rc2-40”, “rc2-64”, “rc2-128”. If unset, “3des” (TripleDES) is used. (S/MIME only)

3.249. smime_get_cert_command

Type: string
Default: (empty)

This command is used to extract X509 certificates from a PKCS7 structure.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.250. smime_get_cert_email_command

Type: string
Default: (empty)

This command is used to extract the mail address(es) used for storing X509 certificates, and for verification purposes (to check whether the certificate was issued for the sender's mailbox).

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.251. smime_get_signer_cert_command

Type: string
Default: (empty)

This command is used to extract only the signers X509 certificate from a S/MIME signature, so that the certificate's owner may get compared to the email's “From:” field.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.252. smime_import_cert_command

Type: string
Default: (empty)

This command is used to import a certificate via smime_keys.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.253. smime_is_default

Type: boolean
Default: no

The default behavior of mutt is to use PGP on all auto-sign/encryption operations. To override and to use OpenSSL instead this must be set. However, this has no effect while replying, since mutt will automatically select the same application that was used to sign/encrypt the original message. (Note that this variable can be overridden by unsetting $crypt_autosmime.) (S/MIME only)

3.254. smime_keys

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, mutt has to handle storage and retrieval of keys/certs by itself. This is very basic right now, and stores keys and certificates in two different directories, both named as the hash-value retrieved from OpenSSL. There is an index file which contains mailbox-address keyid pair, and which can be manually edited. This option points to the location of the private keys. (S/MIME only)

3.255. smime_pk7out_command

Type: string
Default: (empty)

This command is used to extract PKCS7 structures of S/MIME signatures, in order to extract the public X509 certificate(s).

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.256. smime_sign_command

Type: string
Default: (empty)

This command is used to created S/MIME signatures of type multipart/signed, which can be read by all mail clients.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.257. smime_sign_opaque_command

Type: string
Default: (empty)

This command is used to created S/MIME signatures of type application/x-pkcs7-signature, which can only be handled by mail clients supporting the S/MIME extension.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.258. smime_timeout

Type: number
Default: 300

The number of seconds after which a cached passphrase will expire if not used. (S/MIME only)

3.259. smime_verify_command

Type: string
Default: (empty)

This command is used to verify S/MIME signatures of type multipart/signed.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.260. smime_verify_opaque_command

Type: string
Default: (empty)

This command is used to verify S/MIME signatures of type application/x-pkcs7-mime.

This is a format string, see the $smime_decrypt_command command for possible printf(3)-like sequences. (S/MIME only)

3.261. smtp_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods mutt may attempt to use to log in to an SMTP server, in the order mutt should try them. Authentication methods are any SASL mechanism, e.g. “digest-md5”, “gssapi” or “cram-md5”. This option is case-insensitive. If it is “unset” (the default) mutt will try all available methods, in order from most-secure to least-secure.

Example:

set smtp_authenticators="digest-md5:cram-md5"

3.262. smtp_pass

Type: string
Default: (empty)

Specifies the password for your SMTP account. If unset, Mutt will prompt you for your password when you first send mail via SMTP. See $smtp_url to configure mutt to send mail via SMTP.

Warning: you should only use this option when you are on a fairly secure machine, because the superuser can read your muttrc even if you are the only one who can read the file.

3.263. smtp_url

Type: string
Default: (empty)

Defines the SMTP smarthost where sent messages should relayed for delivery. This should take the form of an SMTP URL, e.g.:

smtp[s]://[user[:pass]@]host[:port]

where “[...]” denotes an optional part. Setting this variable overrides the value of the $sendmail variable.

3.264. sort

Type: sort order
Default: date

Specifies how to sort messages in the “index” menu. Valid values are:

  • date or date-sent

  • date-received

  • from

  • mailbox-order (unsorted)

  • score

  • size

  • spam

  • subject

  • threads

  • to

You may optionally use the “reverse-” prefix to specify reverse sorting order (example: “set sort=reverse-date-sent”).

3.265. sort_alias

Type: sort order
Default: alias

Specifies how the entries in the “alias” menu are sorted. The following are legal values:

  • address (sort alphabetically by email address)

  • alias (sort alphabetically by alias name)

  • unsorted (leave in order specified in .muttrc)

3.266. sort_aux

Type: sort order
Default: date

When sorting by threads, this variable controls how threads are sorted in relation to other threads, and how the branches of the thread trees are sorted. This can be set to any value that $sort can, except “threads” (in that case, mutt will just use “date-sent”). You can also specify the “last-” prefix in addition to the “reverse-” prefix, but “last-” must come after “reverse-”. The “last-” prefix causes messages to be sorted against its siblings by which has the last descendant, using the rest of $sort_aux as an ordering. For instance,

set sort_aux=last-date-received

would mean that if a new message is received in a thread, that thread becomes the last one displayed (or the first, if you have “set sort=reverse-threads”.)

Note: For reversed $sort order $sort_aux is reversed again (which is not the right thing to do, but kept to not break any existing configuration setting).

3.267. sort_browser

Type: sort order
Default: alpha

Specifies how to sort entries in the file browser. By default, the entries are sorted alphabetically. Valid values:

  • alpha (alphabetically)

  • date

  • size

  • unsorted

You may optionally use the “reverse-” prefix to specify reverse sorting order (example: “set sort_browser=reverse-date”).

3.268. sort_re

Type: boolean
Default: yes

This variable is only useful when sorting by threads with $strict_threads unset. In that case, it changes the heuristic mutt uses to thread messages by subject. With $sort_re set, mutt will only attach a message as the child of another message by subject if the subject of the child message starts with a substring matching the setting of $reply_regexp. With $sort_re unset, mutt will attach the message whether or not this is the case, as long as the non-$reply_regexp parts of both messages are identical.

3.269. spam_separator

Type: string
Default: “,”

This variable controls what happens when multiple spam headers are matched: if unset, each successive header will overwrite any previous matches value for the spam label. If set, each successive match will append to the previous, using this variable's value as a separator.

3.270. spoolfile

Type: path
Default: (empty)

If your spool mailbox is in a non-default place where Mutt cannot find it, you can specify its location with this variable. Mutt will initially set this variable to the value of the environment variable $MAIL or $MAILDIR if either is defined.

3.271. ssl_ca_certificates_file

Type: path
Default: (empty)

This variable specifies a file containing trusted CA certificates. Any server certificate that is signed with one of these CA certificates is also automatically accepted.

Example:

set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt

3.272. ssl_client_cert

Type: path
Default: (empty)

The file containing a client certificate and its associated private key.

3.273. ssl_force_tls

Type: boolean
Default: no

If this variable is set, Mutt will require that all connections to remote servers be encrypted. Furthermore it will attempt to negotiate TLS even if the server does not advertise the capability, since it would otherwise have to abort the connection anyway. This option supersedes $ssl_starttls.

3.274. ssl_min_dh_prime_bits

Type: number
Default: 0

This variable specifies the minimum acceptable prime size (in bits) for use in any Diffie-Hellman key exchange. A value of 0 will use the default from the GNUTLS library.

3.275. ssl_starttls

Type: quadoption
Default: yes

If set (the default), mutt will attempt to use STARTTLS on servers advertising the capability. When unset, mutt will not attempt to use STARTTLS regardless of the server's capabilities.

3.276. ssl_use_sslv2

Type: boolean
Default: no

This variable specifies whether to attempt to use SSLv2 in the SSL authentication process.

3.277. ssl_use_sslv3

Type: boolean
Default: yes

This variable specifies whether to attempt to use SSLv3 in the SSL authentication process.

3.278. ssl_use_tlsv1

Type: boolean
Default: yes

This variable specifies whether to attempt to use TLSv1 in the SSL authentication process.

3.279. ssl_usesystemcerts

Type: boolean
Default: yes

If set to yes, mutt will use CA certificates in the system-wide certificate store when checking if a server certificate is signed by a trusted CA.

3.280. ssl_verify_dates

Type: boolean
Default: yes

If set (the default), mutt will not automatically accept a server certificate that is either not yet valid or already expired. You should only unset this for particular known hosts, using the <account-hook> function.

3.281. ssl_verify_host

Type: boolean
Default: yes

If set (the default), mutt will not automatically accept a server certificate whose host name does not match the host used in your folder URL. You should only unset this for particular known hosts, using the <account-hook> function.

3.282. status_chars

Type: string
Default: “-*%A”

Controls the characters used by the “%r” indicator in $status_format. The first character is used when the mailbox is unchanged. The second is used when the mailbox has been changed, and it needs to be resynchronized. The third is used if the mailbox is in read-only mode, or if the mailbox will not be written when exiting that mailbox (You can toggle whether to write changes to a mailbox with the <toggle-write> operation, bound by default to “%”). The fourth is used to indicate that the current folder has been opened in attach- message mode (Certain operations like composing a new mail, replying, forwarding, etc. are not permitted in this mode).

3.283. status_format

Type: string
Default: “-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---”

Controls the format of the status line displayed in the “index” menu. This string is similar to $index_format, but has its own set of printf(3)-like sequences:

%b number of mailboxes with new mail *
%d number of deleted messages *
%f the full pathname of the current mailbox
%F number of flagged messages *
%h local hostname
%l size (in bytes) of the current mailbox *
%L size (in bytes) of the messages shown (i.e., which match the current limit) *
%m the number of messages in the mailbox *
%M the number of messages shown (i.e., which match the current limit) *
%n number of new messages in the mailbox *
%o number of old unread messages *
%p number of postponed messages *
%P percentage of the way through the index
%r modified/read-only/won't-write/attach-message indicator, according to $status_chars
%s current sorting mode ($sort)
%S current aux sorting method ($sort_aux)
%t number of tagged messages *
%u number of unread messages *
%v Mutt version string
%V currently active limit pattern, if any *
%>X right justify the rest of the string and pad with “X”
%|X pad to the end of the line with “X”
%*X soft-fill with character “X” as pad

For an explanation of “soft-fill”, see the $index_format documentation.

* = can be optionally printed if nonzero

Some of the above sequences can be used to optionally print a string if their value is nonzero. For example, you may only want to see the number of flagged messages if such messages exist, since zero is not particularly meaningful. To optionally print a string based upon one of the above sequences, the following construct is used:

%?<sequence_char>?<optional_string>?

where sequence_char is a character from the table above, and optional_string is the string you would like printed if sequence_char is nonzero. optional_string may contain other sequences as well as normal text, but you may not nest optional strings.

Here is an example illustrating how to optionally print the number of new messages in a mailbox:

%?n?%n new messages.?

You can also switch between two strings using the following construct:

%?<sequence_char>?<if_string>&<else_string>?

If the value of sequence_char is non-zero, if_string will be expanded, otherwise else_string will be expanded.

You can force the result of any printf(3)-like sequence to be lowercase by prefixing the sequence character with an underscore (“_”) sign. For example, if you want to display the local hostname in lowercase, you would use: “%_h”.

If you prefix the sequence character with a colon (“:”) character, mutt will replace any dots in the expansion by underscores. This might be helpful with IMAP folders that don't like dots in folder names.

3.284. status_on_top

Type: boolean
Default: no

Setting this variable causes the “status bar” to be displayed on the first line of the screen rather than near the bottom. If $help is set, too it'll be placed at the bottom.

3.285. strict_threads

Type: boolean
Default: no

If set, threading will only make use of the “In-Reply-To” and “References:” fields when you $sort by message threads. By default, messages with the same subject are grouped together in “pseudo threads.”. This may not always be desirable, such as in a personal mailbox where you might have several unrelated messages with the subjects like “hi” which will get grouped together. See also $sort_re for a less drastic way of controlling this behavior.

3.286. suspend

Type: boolean
Default: yes

When unset, mutt won't stop when the user presses the terminal's susp key, usually “^Z”. This is useful if you run mutt inside an xterm using a command like “xterm -e mutt”.

3.287. text_flowed

Type: boolean
Default: no

When set, mutt will generate “format=flowed” bodies with a content type of “text/plain; format=flowed”. This format is easier to handle for some mailing software, and generally just looks like ordinary text. To actually make use of this format's features, you'll need support in your editor.

Note that $indent_string is ignored when this option is set.

3.288. thorough_search

Type: boolean
Default: yes

Affects the ~b and ~h search operations described in section “patterns”. If set, the headers and body/attachments of messages to be searched are decoded before searching. If unset, messages are searched as they appear in the folder.

Users searching attachments or for non-ASCII characters should set this value because decoding also includes MIME parsing/decoding and possible character set conversions. Otherwise mutt will attempt to match against the raw message received (for example quoted-printable encoded or with encoded headers) which may lead to incorrect search results.

3.289. thread_received

Type: boolean
Default: no

When set, mutt uses the date received rather than the date sent to thread messages by subject.

3.290. tilde

Type: boolean
Default: no

When set, the internal-pager will pad blank lines to the bottom of the screen with a tilde (“~”).

3.291. time_inc

Type: number
Default: 0

Along with $read_inc, $write_inc, and $net_inc, this variable controls the frequency with which progress updates are displayed. It suppresses updates less than $time_inc milliseconds apart. This can improve throughput on systems with slow terminals, or when running mutt on a remote system.

Also see the “tuning” section of the manual for performance considerations.

3.292. timeout

Type: number
Default: 600

When Mutt is waiting for user input either idling in menus or in an interactive prompt, Mutt would block until input is present. Depending on the context, this would prevent certain operations from working, like checking for new mail or keeping an IMAP connection alive.

This variable controls how many seconds Mutt will at most wait until it aborts waiting for input, performs these operations and continues to wait for input.

A value of zero or less will cause Mutt to never time out.

3.293. tmpdir

Type: path
Default: (empty)

This variable allows you to specify where Mutt will place its temporary files needed for displaying and composing messages. If this variable is not set, the environment variable $TMPDIR is used. If $TMPDIR is not set then “/tmp” is used.

3.294. to_chars

Type: string
Default: “ +TCFL”

Controls the character used to indicate mail addressed to you. The first character is the one used when the mail is not addressed to your address. The second is used when you are the only recipient of the message. The third is when your address appears in the “To:” header field, but you are not the only recipient of the message. The fourth character is used when your address is specified in the “Cc:” header field, but you are not the only recipient. The fifth character is used to indicate mail that was sent by you. The sixth character is used to indicate when a mail was sent to a mailing-list you subscribe to.

3.295. tunnel

Type: string
Default: (empty)

Setting this variable will cause mutt to open a pipe to a command instead of a raw socket. You may be able to use this to set up preauthenticated connections to your IMAP/POP3/SMTP server. Example:

set tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"

Note: For this example to work you must be able to log in to the remote machine without having to enter a password.

When set, Mutt uses the tunnel for all remote connections. Please see “account-hook” in the manual for how to use different tunnel commands per connection.

3.296. uncollapse_jump

Type: boolean
Default: no

When set, Mutt will jump to the next unread message, if any, when the current thread is uncollapsed.

3.297. use_8bitmime

Type: boolean
Default: no

Warning: do not set this variable unless you are using a version of sendmail which supports the -B8BITMIME flag (such as sendmail 8.8.x) or you may not be able to send mail.

When set, Mutt will invoke $sendmail with the -B8BITMIME flag when sending 8-bit messages to enable ESMTP negotiation.

3.298. use_domain

Type: boolean
Default: yes

When set, Mutt will qualify all local addresses (ones without the “@host” portion) with the value of $hostname. If unset, no addresses will be qualified.

3.299. use_envelope_from

Type: boolean
Default: no

When set, mutt will set the envelope sender of the message. If $envelope_from_address is set, it will be used as the sender address. If unset, mutt will attempt to derive the sender from the “From:” header.

Note that this information is passed to sendmail command using the -f command line switch. Therefore setting this option is not useful if the $sendmail variable already contains -f or if the executable pointed to by $sendmail doesn't support the -f switch.

3.300. use_from

Type: boolean
Default: yes

When set, Mutt will generate the “From:” header field when sending messages. If unset, no “From:” header field will be generated unless the user explicitly sets one using the “my_hdr” command.

3.301. use_idn

Type: boolean
Default: yes

When set, Mutt will show you international domain names decoded. Note: You can use IDNs for addresses even if this is unset. This variable only affects decoding.

3.302. use_ipv6

Type: boolean
Default: yes

When set, Mutt will look for IPv6 addresses of hosts it tries to contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. Normally, the default should work.

3.303. user_agent

Type: boolean
Default: yes

When set, mutt will add a “User-Agent:” header to outgoing messages, indicating which version of mutt was used for composing them.

3.304. visual

Type: path
Default: (empty)

Specifies the visual editor to invoke when the “~v” command is given in the built-in editor.

3.305. wait_key

Type: boolean
Default: yes

Controls whether Mutt will ask you to press a key after an external command has been invoked by these functions: <shell-escape>, <pipe-message>, <pipe-entry>, <print-message>, and <print-entry> commands.

It is also used when viewing attachments with “auto_view”, provided that the corresponding mailcap entry has a needsterminal flag, and the external program is interactive.

When set, Mutt will always ask for a key. When unset, Mutt will wait for a key only if the external command returned a non-zero status.

3.306. weed

Type: boolean
Default: yes

When set, mutt will weed headers when displaying, forwarding, printing, or replying to messages.

3.307. wrap

Type: number
Default: 0

When set to a positive value, mutt will wrap text at $wrap characters. When set to a negative value, mutt will wrap text so that there are $wrap characters of empty space on the right side of the terminal. Setting it to zero makes mutt wrap at the terminal width.

3.308. wrap_headers

Type: number
Default: 78

This option specifies the number of characters to use for wrapping an outgoing message's headers. Allowed values are between 78 and 998 inclusive.

Note: This option usually shouldn't be changed. RFC5233 recommends a line length of 78 (the default), so please only change this setting when you know what you're doing.

3.309. wrap_search

Type: boolean
Default: yes

Controls whether searches wrap around the end.

When set, searches will wrap around the first (or last) item. When unset, incremental searches will not wrap.

3.310. wrapmargin

Type: number
Default: 0

(DEPRECATED) Equivalent to setting $wrap with a negative value.

3.311. write_bcc

Type: boolean
Default: yes

Controls whether mutt writes out the “Bcc:” header when preparing messages to be sent. Exim users may wish to unset this. If mutt is set to deliver directly via SMTP (see $smtp_url), this option does nothing: mutt will never write out the “Bcc:” header in this case.

3.312. write_inc

Type: number
Default: 10

When writing a mailbox, a message will be printed every $write_inc messages to indicate progress. If set to 0, only a single message will be displayed before writing a mailbox.

Also see the $read_inc, $net_inc and $time_inc variables and the “tuning” section of the manual for performance considerations.

4. Functions

The following is the list of available functions listed by the mapping in which they are available. The default key setting is given, and an explanation of what the function does. The key bindings of these functions can be changed with the bind command.

4.1. Generic Menu

The generic menu is not a real menu, but specifies common functions (such as movement) available in all menus except for pager and editor. Changing settings for this menu will affect the default bindings for all menus (except as noted).

Table 9.2. Default Generic Menu Bindings

FunctionDefault keyDescription
<top-page>Hmove to the top of the page
<next-entry>jmove to the next entry
<previous-entry>kmove to the previous entry
<bottom-page>Lmove to the bottom of the page
<refresh>^Lclear and redraw the screen
<middle-page>Mmove to the middle of the page
<search-next>nsearch for next match
<exit>qexit this menu
<tag-entry>ttag the current entry
<next-page>zmove to the next page
<previous-page>Zmove to the previous page
<last-entry>*move to the last entry
<first-entry>=move to the first entry
<enter-command>:enter a muttrc command
<next-line>>scroll down one line
<previous-line><scroll up one line
<half-up>[scroll up 1/2 page
<half-down>]scroll down 1/2 page
<help>?this screen
<tag-prefix>;apply next function to tagged messages
<tag-prefix-cond> apply next function ONLY to tagged messages
<end-cond> end of conditional execution (noop)
<shell-escape>!invoke a command in a subshell
<select-entry><Return>select the current entry
<search>/search for a regular expression
<search-reverse>Esc /search backwards for a regular expression
<search-opposite> search for next match in opposite direction
<jump> jump to an index number
<current-top> move entry to top of screen
<current-middle> move entry to middle of screen
<current-bottom> move entry to bottom of screen
<what-key> display the keycode for a key press

4.2. Index Menu

Table 9.3. Default Index Menu Bindings

FunctionDefault keyDescription
<create-alias>acreate an alias from a message sender
<bounce-message>bremail a message to another user
<break-thread>#break the thread in two
<change-folder>copen a different folder
<change-folder-readonly>Esc copen a different folder in read only mode
<next-unread-mailbox> open next mailbox with new mail
<collapse-thread>Esc vcollapse/uncollapse current thread
<collapse-all>Esc Vcollapse/uncollapse all threads
<copy-message>Ccopy a message to a file/mailbox
<decode-copy>Esc Cmake decoded (text/plain) copy
<decode-save>Esc smake decoded copy (text/plain) and delete
<delete-message>ddelete the current entry
<delete-pattern>Ddelete messages matching a pattern
<delete-thread>^Ddelete all messages in thread
<delete-subthread>Esc ddelete all messages in subthread
<edit>eedit the raw message
<edit-type>^Eedit attachment content type
<forward-message>fforward a message with comments
<flag-message>Ftoggle a message's 'important' flag
<group-reply>greply to all recipients
<fetch-mail>Gretrieve mail from POP server
<imap-fetch-mail> force retrieval of mail from IMAP server
<imap-logout-all> logout from all IMAP servers
<display-toggle-weed>hdisplay message and toggle header weeding
<next-undeleted>jmove to the next undeleted message
<previous-undeleted>kmove to the previous undeleted message
<limit>lshow only messages matching a pattern
<link-threads>&link tagged message to the current one
<list-reply>Lreply to specified mailing list
<mail>mcompose a new mail message
<toggle-new>Ntoggle a message's 'new' flag
<toggle-write>%toggle whether the mailbox will be rewritten
<next-thread>^Njump to the next thread
<next-subthread>Esc njump to the next subthread
<query>Qquery external program for addresses
<quit>qsave changes to mailbox and quit
<reply>rreply to a message
<show-limit>Esc lshow currently active limit pattern
<sort-mailbox>osort messages
<sort-reverse>Osort messages in reverse order
<print-message>pprint the current entry
<previous-thread>^Pjump to previous thread
<previous-subthread>Esc pjump to previous subthread
<recall-message>Rrecall a postponed message
<read-thread>^Rmark the current thread as read
<read-subthread>Esc rmark the current subthread as read
<resend-message>Esc euse the current message as a template for a new one
<save-message>ssave message/attachment to a mailbox/file
<tag-pattern>Ttag messages matching a pattern
<tag-subthread> tag the current subthread
<tag-thread>Esc ttag the current thread
<untag-pattern>^Tuntag messages matching a pattern
<undelete-message>uundelete the current entry
<undelete-pattern>Uundelete messages matching a pattern
<undelete-subthread>Esc uundelete all messages in subthread
<undelete-thread>^Uundelete all messages in thread
<view-attachments>vshow MIME attachments
<show-version>Vshow the Mutt version number and date
<set-flag>wset a status flag on a message
<clear-flag>Wclear a status flag from a message
<display-message><Return>display a message
<buffy-list>.list mailboxes with new mail
<sync-mailbox>$save changes to mailbox
<display-address>@display full address of sender
<pipe-message>|pipe message/attachment to a shell command
<next-new> jump to the next new message
<next-new-then-unread><Tab>jump to the next new or unread message
<previous-new> jump to the previous new message
<previous-new-then-unread>Esc <Tab>jump to the previous new or unread message
<next-unread> jump to the next unread message
<previous-unread> jump to the previous unread message
<parent-message>Pjump to parent message in thread
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory
<check-traditional-pgp>Esc Pcheck for classic PGP
<mail-key>Esc kmail a PGP public key
<decrypt-copy> make decrypted copy
<decrypt-save> make decrypted copy and delete

4.3. Pager Menu

Table 9.4. Default Pager Menu Bindings

FunctionDefault keyDescription
<break-thread>#break the thread in two
<create-alias>acreate an alias from a message sender
<bounce-message>bremail a message to another user
<change-folder>copen a different folder
<change-folder-readonly>Esc copen a different folder in read only mode
<next-unread-mailbox> open next mailbox with new mail
<copy-message>Ccopy a message to a file/mailbox
<decode-copy>Esc Cmake decoded (text/plain) copy
<delete-message>ddelete the current entry
<delete-thread>^Ddelete all messages in thread
<delete-subthread>Esc ddelete all messages in subthread
<set-flag>wset a status flag on a message
<clear-flag>Wclear a status flag from a message
<edit>eedit the raw message
<edit-type>^Eedit attachment content type
<forward-message>fforward a message with comments
<flag-message>Ftoggle a message's 'important' flag
<group-reply>greply to all recipients
<imap-fetch-mail> force retrieval of mail from IMAP server
<imap-logout-all> logout from all IMAP servers
<display-toggle-weed>hdisplay message and toggle header weeding
<next-undeleted>jmove to the next undeleted message
<next-entry>Jmove to the next entry
<previous-undeleted>kmove to the previous undeleted message
<previous-entry>Kmove to the previous entry
<link-threads>&link tagged message to the current one
<list-reply>Lreply to specified mailing list
<redraw-screen>^Lclear and redraw the screen
<mail>mcompose a new mail message
<mark-as-new>Ntoggle a message's 'new' flag
<search-next>nsearch for next match
<next-thread>^Njump to the next thread
<next-subthread>Esc njump to the next subthread
<sort-mailbox>osort messages
<sort-reverse>Osort messages in reverse order
<print-message>pprint the current entry
<previous-thread>^Pjump to previous thread
<previous-subthread>Esc pjump to previous subthread
<quit>Qsave changes to mailbox and quit
<exit>qexit this menu
<reply>rreply to a message
<recall-message>Rrecall a postponed message
<read-thread>^Rmark the current thread as read
<read-subthread>Esc rmark the current subthread as read
<resend-message>Esc euse the current message as a template for a new one
<save-message>ssave message/attachment to a mailbox/file
<skip-quoted>Sskip beyond quoted text
<decode-save>Esc smake decoded copy (text/plain) and delete
<tag-message>ttag the current entry
<toggle-quoted>Ttoggle display of quoted text
<undelete-message>uundelete the current entry
<undelete-subthread>Esc uundelete all messages in subthread
<undelete-thread>^Uundelete all messages in thread
<view-attachments>vshow MIME attachments
<show-version>Vshow the Mutt version number and date
<search-toggle>\\toggle search pattern coloring
<display-address>@display full address of sender
<next-new> jump to the next new message
<pipe-message>|pipe message/attachment to a shell command
<help>?this screen
<next-page><Space>move to the next page
<previous-page>-move to the previous page
<top>^jump to the top of the message
<sync-mailbox>$save changes to mailbox
<shell-escape>!invoke a command in a subshell
<enter-command>:enter a muttrc command
<buffy-list>.list mailboxes with new mail
<search>/search for a regular expression
<search-reverse>Esc /search backwards for a regular expression
<search-opposite> search for next match in opposite direction
<next-line><Return>scroll down one line
<jump> jump to an index number
<next-unread> jump to the next unread message
<previous-new> jump to the previous new message
<previous-unread> jump to the previous unread message
<half-up> scroll up 1/2 page
<half-down> scroll down 1/2 page
<previous-line> scroll up one line
<bottom> jump to the bottom of the message
<parent-message>Pjump to parent message in thread
<check-traditional-pgp>Esc Pcheck for classic PGP
<mail-key>Esc kmail a PGP public key
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory
<decrypt-copy> make decrypted copy
<decrypt-save> make decrypted copy and delete
<what-key> display the keycode for a key press

4.4. Alias Menu

Table 9.5. Default Alias Menu Bindings

FunctionDefault keyDescription
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry

4.5. Query Menu

Table 9.6. Default Query Menu Bindings

FunctionDefault keyDescription
<create-alias>acreate an alias from a message sender
<mail>mcompose a new mail message
<query>Qquery external program for addresses
<query-append>Aappend new query results to current results

4.6. Attachment Menu

Table 9.7. Default Attachment Menu Bindings

FunctionDefault keyDescription
<bounce-message>bremail a message to another user
<display-toggle-weed>hdisplay message and toggle header weeding
<edit-type>^Eedit attachment content type
<print-entry>pprint the current entry
<save-entry>ssave message/attachment to a mailbox/file
<pipe-entry>|pipe message/attachment to a shell command
<view-mailcap>mforce viewing of attachment using mailcap
<reply>rreply to a message
<resend-message>Esc euse the current message as a template for a new one
<group-reply>greply to all recipients
<list-reply>Lreply to specified mailing list
<forward-message>fforward a message with comments
<view-text>Tview attachment as text
<view-attach><Return>view attachment using mailcap entry if necessary
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry
<collapse-parts>vToggle display of subparts
<check-traditional-pgp>Esc Pcheck for classic PGP
<extract-keys>^Kextract supported public keys
<forget-passphrase>^Fwipe passphrase(s) from memory

4.7. Compose Menu

Table 9.8. Default Compose Menu Bindings

FunctionDefault keyDescription
<attach-file>aattach file(s) to this message
<attach-message>Aattach message(s) to this message
<edit-bcc>bedit the BCC list
<edit-cc>cedit the CC list
<copy-file>Csave message/attachment to a mailbox/file
<detach-file>Ddelete the current entry
<toggle-disposition>^Dtoggle disposition between inline/attachment
<edit-description>dedit attachment description
<edit-message>eedit the message
<edit-headers>Eedit the message with headers
<edit-file>^X eedit the file to be attached
<edit-encoding>^Eedit attachment transfer-encoding
<edit-from>Esc fedit the from field
<edit-fcc>fenter a file to save a copy of this message in
<filter-entry>Ffilter attachment through a shell command
<get-attachment>Gget a temporary copy of an attachment
<display-toggle-weed>hdisplay message and toggle header weeding
<ispell>irun ispell on the message
<print-entry>lprint the current entry
<edit-mime>medit attachment using mailcap entry
<new-mime>ncompose new attachment using mailcap entry
<postpone-message>Psave this message to send later
<edit-reply-to>redit the Reply-To field
<rename-file>Rrename/move an attached file
<edit-subject>sedit the subject of this message
<edit-to>tedit the TO list
<edit-type>^Tedit attachment content type
<write-fcc>wwrite the message to a folder
<toggle-unlink>utoggle whether to delete file after sending it
<toggle-recode> toggle recoding of this attachment
<update-encoding>Uupdate an attachment's encoding info
<view-attach><Return>view attachment using mailcap entry if necessary
<send-message>ysend the message
<pipe-entry>|pipe message/attachment to a shell command
<attach-key>Esc kattach a PGP public key
<pgp-menu>pshow PGP options
<forget-passphrase>^Fwipe passphrase(s) from memory
<smime-menu>Sshow S/MIME options
<mix>Msend the message through a mixmaster remailer chain

4.8. Postpone Menu

Table 9.9. Default Postpone Menu Bindings

FunctionDefault keyDescription
<delete-entry>ddelete the current entry
<undelete-entry>uundelete the current entry

4.9. Browser Menu

Table 9.10. Default Browser Menu Bindings

FunctionDefault keyDescription
<change-dir>cchange directories
<display-filename>@display the currently selected file's name
<enter-mask>menter a file mask
<sort>osort messages
<sort-reverse>Osort messages in reverse order
<select-new>Nselect a new file in this directory
<check-new> check mailboxes for new mail
<toggle-mailboxes><Tab>toggle whether to browse mailboxes or all files
<view-file><Space>view file
<buffy-list>.list mailboxes with new mail
<create-mailbox>Ccreate a new mailbox (IMAP only)
<delete-mailbox>ddelete the current mailbox (IMAP only)
<rename-mailbox>rrename the current mailbox (IMAP only)
<subscribe>ssubscribe to current mailbox (IMAP only)
<unsubscribe>uunsubscribe from current mailbox (IMAP only)
<toggle-subscribed>Ttoggle view all/subscribed mailboxes (IMAP only)

4.10. Pgp Menu

Table 9.11. Default Pgp Menu Bindings

FunctionDefault keyDescription
<verify-key>cverify a PGP public key
<view-name>%view the key's user id

4.11. Smime Menu

Table 9.12. Default Smime Menu Bindings

FunctionDefault keyDescription
<verify-key>cverify a PGP public key
<view-name>%view the key's user id

4.12. Mixmaster Menu

Table 9.13. Default Mixmaster Menu Bindings

FunctionDefault keyDescription
<accept><Return>Accept the chain constructed
<append>aAppend a remailer to the chain
<insert>iInsert a remailer into the chain
<delete>dDelete a remailer from the chain
<chain-prev><Left>Select the previous element of the chain
<chain-next><Right>Select the next element of the chain

4.13. Editor Menu

Table 9.14. Default Editor Menu Bindings

FunctionDefault keyDescription
<bol>^Ajump to the beginning of the line
<backward-char>^Bmove the cursor one character to the left
<backward-word>Esc bmove the cursor to the beginning of the word
<capitalize-word>Esc ccapitalize the word
<downcase-word>Esc lconvert the word to lower case
<upcase-word>Esc uconvert the word to upper case
<delete-char>^Ddelete the char under the cursor
<eol>^Ejump to the end of the line
<forward-char>^Fmove the cursor one character to the right
<forward-word>Esc fmove the cursor to the end of the word
<backspace><Backspace>delete the char in front of the cursor
<kill-eol>^Kdelete chars from cursor to end of line
<kill-eow>Esc ddelete chars from the cursor to the end of the word
<kill-line>^Udelete all chars on the line
<quote-char>^Vquote the next typed key
<kill-word>^Wdelete the word in front of the cursor
<complete><Tab>complete filename or alias
<complete-query>^Tcomplete address with query
<buffy-cycle><Space>cycle among incoming mailboxes
<history-up> scroll up through the history list
<history-down> scroll down through the history list
<transpose-chars> transpose character under cursor with previous

mutt-1.5.21/doc/miscellany.html0000644000175000017500000002531211444176777013332 00000000000000 Chapter 10. Miscellany

Chapter 10. Miscellany

1. Acknowledgements

Kari Hurtta co-developed the original MIME parsing code back in the ELM-ME days.

The following people have been very helpful to the development of Mutt:

2. About This Document

This document was written in DocBook, and then rendered using the Gnome XSLT toolkit.

mutt-1.5.21/contrib/0000755000175000017500000000000011444177014011235 500000000000000mutt-1.5.21/contrib/iconv/0000755000175000017500000000000011444177014012353 500000000000000mutt-1.5.21/contrib/iconv/README0000644000175000017500000000102010770271152013143 00000000000000This directory contains sample collections of iconv-hooks for various platforms. The files have been auto-generated from the source code of Bruno Haible's libiconv implementation, version 1.5.1. libiconv is available from . If you want to re-generate the files from a newer version of libiconv, just type: rm -f *.rc ./make.sh Note, however, that make.sh isn't guaranteed to run on any system but the one used for generating these files. mutt-1.5.21/contrib/iconv/make.sh0000755000175000017500000000145110770271152013547 00000000000000#!/bin/sh -- # # Create sample configuration files from the tables contained with libiconv. # Copyright (C) 2001 Thomas Roessler # # This ugly shell script is free software; you can distribute and/or modify # it under the terms of the GNU General Public License version 2 or later. # LIBICONV="$1" test -d $LIBICONV/libcharset/tools || { echo "Sorry, I can't find libiconv's source!" >&2 ; exit 1 ; } for f in $LIBICONV/libcharset/tools/* ; do rm -f tmp.rc. ( head -3 $f | grep -q 'locale name.*locale charmap.*locale_charset' ) && ( sed '1,/^$/d' $f | awk '($4 != $3) { printf ("iconv-hook %s %s\n", $4, $3); }' | \ sed -e 's/^iconv-hook SJIS /iconv-hook Shift_JIS /gi' | sort -u > tmp.rc ) test -s tmp.rc && mv tmp.rc iconv.`basename $f`.rc rm -f tmp.rc done mutt-1.5.21/contrib/iconv/iconv.aix-3.2.5.rc0000644000175000017500000000007110770271152015157 00000000000000iconv-hook CP850 IBM-850 iconv-hook ISO-8859-1 ISO8859-1 mutt-1.5.21/contrib/iconv/iconv.aix-4.1.5.rc0000644000175000017500000000056610770271152015170 00000000000000iconv-hook CP1046 IBM-1046 iconv-hook CP850 IBM-850 iconv-hook CP856 IBM-856 iconv-hook CP932 IBM-932 iconv-hook EUC-CN IBM-eucCN iconv-hook EUC-JP IBM-eucJP iconv-hook EUC-KR IBM-eucKR iconv-hook EUC-TW IBM-eucTW iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-6 ISO8859-6 iconv-hook ISO-8859-8 ISO8859-8 mutt-1.5.21/contrib/iconv/iconv.aix-4.2.0.rc0000644000175000017500000000100310770271152015147 00000000000000iconv-hook BIG5 big5 iconv-hook CP1046 IBM-1046 iconv-hook CP850 IBM-850 iconv-hook CP856 IBM-856 iconv-hook CP922 IBM-922 iconv-hook CP932 IBM-932 iconv-hook EUC-CN IBM-eucCN iconv-hook EUC-JP IBM-eucJP iconv-hook EUC-KR IBM-eucKR iconv-hook EUC-TW IBM-eucTW iconv-hook ISO-8859-13 IBM-921 iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-6 ISO8859-6 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-8 ISO8859-8 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.aix-4.3.2.rc0000644000175000017500000000121710770271152015161 00000000000000iconv-hook BIG5 big5 iconv-hook CP1046 IBM-1046 iconv-hook CP1124 IBM-1124 iconv-hook CP1129 IBM-1129 iconv-hook CP1252 IBM-1252 iconv-hook CP850 IBM-850 iconv-hook CP856 IBM-856 iconv-hook CP922 IBM-922 iconv-hook CP932 IBM-932 iconv-hook CP943 IBM-943 iconv-hook EUC-CN IBM-eucCN iconv-hook EUC-JP IBM-eucJP iconv-hook EUC-KR IBM-eucKR iconv-hook EUC-TW IBM-eucTW iconv-hook ISO-8859-13 IBM-921 iconv-hook ISO-8859-15 ISO8859-15 iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-6 ISO8859-6 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-8 ISO8859-8 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.freebsd-3.3.rc0000644000175000017500000000024710770271152015653 00000000000000iconv-hook ASCII iconv-hook CP866 iconv-hook ISO-8859-15 iconv-hook ISO-8859-1 iconv-hook ISO-8859-2 iconv-hook KOI8-R mutt-1.5.21/contrib/iconv/iconv.glibc-2.1.3.rc0000644000175000017500000000004510770271152015453 00000000000000iconv-hook ISO-8859-1 ANSI_X3.4-1968 mutt-1.5.21/contrib/iconv/iconv.glibc-2.1.90.rc0000644000175000017500000000004010770271152015534 00000000000000iconv-hook ASCII ANSI_X3.4-1968 mutt-1.5.21/contrib/iconv/iconv.hpux-10.01.rc0000644000175000017500000000067010770271152015361 00000000000000iconv-hook EUC-CN hp15CN iconv-hook EUC-TW eucTW iconv-hook HP-ARABIC8 arabic8 iconv-hook HP-GREEK8 greek8 iconv-hook HP-HEBREW8 hebrew8 iconv-hook HP-ROMAN8 roman8 iconv-hook HP-TURKISH8 turkish8 iconv-hook ISO-8859-1 iso88591 iconv-hook ISO-8859-2 iso88592 iconv-hook ISO-8859-5 iso88595 iconv-hook ISO-8859-6 iso88596 iconv-hook ISO-8859-7 iso88597 iconv-hook ISO-8859-8 iso88598 iconv-hook ISO-8859-9 iso88599 iconv-hook TIS-620 tis620 mutt-1.5.21/contrib/iconv/iconv.hpux-10.20.rc0000644000175000017500000000067610770271152015370 00000000000000iconv-hook HP-ARABIC8 arabic8 iconv-hook HP-GREEK8 greek8 iconv-hook HP-HEBREW8 hebrew8 iconv-hook HP-ROMAN8 roman8 iconv-hook HP-TURKISH8 turkish8 iconv-hook ISO-8859-15 iso885915 iconv-hook ISO-8859-1 iso88591 iconv-hook ISO-8859-2 iso88592 iconv-hook ISO-8859-5 iso88595 iconv-hook ISO-8859-6 iso88596 iconv-hook ISO-8859-7 iso88597 iconv-hook ISO-8859-8 iso88598 iconv-hook ISO-8859-9 iso88599 iconv-hook TIS-620 tis620 iconv-hook UTF-8 utf8 mutt-1.5.21/contrib/iconv/iconv.hpux-11.00.rc0000644000175000017500000000111610770271152015355 00000000000000iconv-hook BIG5 big5 iconv-hook EUC-CN hp15CN iconv-hook EUC-JP eucJP iconv-hook EUC-KR eucKR iconv-hook EUC-TW eucTW iconv-hook HP-ARABIC8 arabic8 iconv-hook HP-GREEK8 greek8 iconv-hook HP-HEBREW8 hebrew8 iconv-hook HP-KANA8 kana8 iconv-hook HP-ROMAN8 roman8 iconv-hook HP-TURKISH8 turkish8 iconv-hook ISO-8859-15 iso885915 iconv-hook ISO-8859-1 iso88591 iconv-hook ISO-8859-2 iso88592 iconv-hook ISO-8859-5 iso88595 iconv-hook ISO-8859-6 iso88596 iconv-hook ISO-8859-7 iso88597 iconv-hook ISO-8859-8 iso88598 iconv-hook ISO-8859-9 iso88599 iconv-hook TIS-620 tis620 iconv-hook UTF-8 utf8 mutt-1.5.21/contrib/iconv/iconv.irix-6.5.rc0000644000175000017500000000040010770271152015210 00000000000000iconv-hook EUC-CN eucCN iconv-hook EUC-JP eucJP iconv-hook EUC-KR eucKR iconv-hook EUC-TW eucTW iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.osf1-4.0a.rc0000644000175000017500000000014010770271152015240 00000000000000iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.osf1-4.0d.rc0000644000175000017500000000016710770271152015254 00000000000000iconv-hook CP850 cp850 iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.solaris-2.4.rc0000644000175000017500000000002010770271152015702 00000000000000iconv-hook bug mutt-1.5.21/contrib/iconv/iconv.solaris-2.5.1.rc0000644000175000017500000000004010770271152016044 00000000000000iconv-hook ISO-8859-1 ISO8859-1 mutt-1.5.21/contrib/iconv/iconv.solaris-2.6-cjk.rc0000644000175000017500000000047410770271152016466 00000000000000iconv-hook EUC-CN gb2312 iconv-hook EUC-JP eucJP iconv-hook EUC-KR 5601 iconv-hook EUC-TW cns11643 iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-4 ISO8859-4 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-9 ISO8859-9 iconv-hook Shift_JIS PCK mutt-1.5.21/contrib/iconv/iconv.solaris-2.6.rc0000644000175000017500000000030010770271152015705 00000000000000iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-4 ISO8859-4 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-9 ISO8859-9 mutt-1.5.21/contrib/iconv/iconv.solaris-2.7.rc0000644000175000017500000000055710770271152015724 00000000000000iconv-hook ASCII 646 iconv-hook ISO-8859-15 ISO8859-15 iconv-hook ISO-8859-1 ISO8859-1 iconv-hook ISO-8859-2 ISO8859-2 iconv-hook ISO-8859-4 ISO8859-4 iconv-hook ISO-8859-5 ISO8859-5 iconv-hook ISO-8859-6 ISO8859-6 iconv-hook ISO-8859-7 ISO8859-7 iconv-hook ISO-8859-8 ISO8859-8 iconv-hook ISO-8859-9 ISO8859-9 iconv-hook KOI8-R koi8-r iconv-hook TIS-620 TIS620.2533 mutt-1.5.21/contrib/Makefile.am0000644000175000017500000000214210770271152013207 00000000000000# $Id$ subdir = contrib SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \ sample.muttrc sample.mailcap sample.muttrc-tlr \ colors.default colors.linux smime.rc \ ca-bundle.crt smime_keys_test.pl mutt_xtitle EXTRA_DIST = language.txt language50.txt \ patch.slang-1.2.2.keypad.1 \ $(SAMPLES) \ iconv/README \ iconv/make.sh install-data-local: $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv for f in $(SAMPLES) ; do \ $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir)/samples ; \ done for f in $(srcdir)/iconv/*.rc ; do \ $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/samples/iconv ; \ done uninstall-local: for f in $(SAMPLES) ; do \ rm -f $(DESTDIR)$(docdir)/samples/$$f ; \ done -rm -rf $(DESTDIR)$(docdir)/samples/iconv -rmdir $(DESTDIR)$(docdir)/samples -rmdir $(DESTDIR)$(docdir) distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist-hook: Makefile $(DISTFILES) mkdir -p $(distdir)/iconv for file in $(srcdir)/iconv/*.rc ; do \ ln $$file $(distdir)/iconv 2> /dev/null \ || cp -p $$file $(distdir)/iconv ; \ done mutt-1.5.21/contrib/Makefile.in0000644000175000017500000002666711435242563013245 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # $Id$ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/curslib.m4 $(top_srcdir)/m4/funcdecl.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpgme.m4 \ $(top_srcdir)/m4/gssapi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/types.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DBX = @DBX@ DEBUGGER = @DEBUGGER@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOTLOCK_GROUP = @DOTLOCK_GROUP@ DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ DOTLOCK_TARGET = @DOTLOCK_TARGET@ DSLROOT = @DSLROOT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDB = @GDB@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GPGME_CFLAGS = @GPGME_CFLAGS@ GPGME_CONFIG = @GPGME_CONFIG@ GPGME_LIBS = @GPGME_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ ISPELL = @ISPELL@ KRB5CFGPATH = @KRB5CFGPATH@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBIMAP = @LIBIMAP@ LIBIMAPDEPS = @LIBIMAPDEPS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MUTTLIBS = @MUTTLIBS@ MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ MUTT_MD5 = @MUTT_MD5@ OBJEXT = @OBJEXT@ OPS = @OPS@ OSPCAT = @OSPCAT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGPAUX_TARGET = @PGPAUX_TARGET@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDB = @SDB@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ STRIP = @STRIP@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ subdir = contrib SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \ sample.muttrc sample.mailcap sample.muttrc-tlr \ colors.default colors.linux smime.rc \ ca-bundle.crt smime_keys_test.pl mutt_xtitle EXTRA_DIST = language.txt language50.txt \ patch.slang-1.2.2.keypad.1 \ $(SAMPLES) \ iconv/README \ iconv/make.sh distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign contrib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-local install-data-local: $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv for f in $(SAMPLES) ; do \ $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir)/samples ; \ done for f in $(srcdir)/iconv/*.rc ; do \ $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/samples/iconv ; \ done uninstall-local: for f in $(SAMPLES) ; do \ rm -f $(DESTDIR)$(docdir)/samples/$$f ; \ done -rm -rf $(DESTDIR)$(docdir)/samples/iconv -rmdir $(DESTDIR)$(docdir)/samples -rmdir $(DESTDIR)$(docdir) dist-hook: Makefile $(DISTFILES) mkdir -p $(distdir)/iconv for file in $(srcdir)/iconv/*.rc ; do \ ln $$file $(distdir)/iconv 2> /dev/null \ || cp -p $$file $(distdir)/iconv ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mutt-1.5.21/contrib/language.txt0000644000175000017500000044121610770271152013510 00000000000000# Translation file for PGP 2.6.3(i)n. # $Id$ # ------------------------------------------------------------------ # Character set: ISO-Latin/1 (ISO 8859/1) # Date revised: 7 October 1997 # ------------------------------------------------------------------ # Language: German/Deutsch (de) # Translator: Frank Pruefer # (based on the German translation for PGP 2.3a by # Marc Aurel <4-tea-2@bong.saar.de>) # ------------------------------------------------------------------ # Language: Spanish/Español (es) # Translator: Armando Ramos # ------------------------------------------------------------------ # Language: French/Francais (fr) # Translator: Yanik Crépeau # (based on the French translation for PGP 2.3a by # Jean-loup Gailly ) # ------------------------------------------------------------------ # # Additional language files may be obtained from: # # http://www.ifi.uio.no/pgp/modules.shtml # ftp://ftp.ifi.uio.no/pub/pgp/lang/ # # ------------------------------------------------------------------ "\nClear signature file: %s\n" de: "\nDateiname der Klartext-Unterschrift: %s\n" es: "\nFichero normal con firma: %s\n" fr: "\nFichier de signature en clair: %s\n" muttde: "\nDateiname der Klartext-Unterschrift: %s\n" "\nTransport armor file: %s\n" de: "\nDateiname der Versandhülle: %s\n" es: "\nFichero con armadura: %s\n" fr: "\nFichier de transport armure: %s\n" muttde: "\nDateiname der Versandhülle: %s\n" "\nTransport armor files: " de: "\nDateinamen der Versandhüllen: " es: "\nFicheros con armadura: " fr: "\nFichiers de transport armure: " muttde: "\nDateinamen der Versandhüllen: " "Invalid ASCII armor header line: \"%.40s\"\n\ ASCII armor corrupted.\n" de: "\nUnzulässige Kopfzeile \"%.40s\"\n\ in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n" es: "Línea incorrecta en la cabecera de la armadura ASCII:\n\ \"%.40s\"\n\ Armadura dañada\n" fr: "Entête enveloppe ASCII invalide: \"%.40s\"\n\ l'enveloppe ASCII est corrompue" muttde: "\nUnzulässige Kopfzeile \"%.40s\"\n\ in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n" "Warning: Unrecognized ASCII armor header label \"%.*s:\" ignored.\n" de: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\ in der ASCII-Versandhülle wurde überlesen.\n" es: "Advertencia: Se ignora la etiqueta \"%.*s:\"\n\ No se reconoce como cabecera de armadura ASCII\n" fr: "Avertissement: Type d'entête de l'envloppe ASCII \"%.*s:\" ignoré\n" muttde: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\ in der ASCII-Versandhülle wurde überlesen.\n" "ERROR: Bad ASCII armor checksum in section %d.\n" de: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n" es: "ERROR: Suma incorrecta de comprobación en armadura ASCII,\n\ sección %d.\n" fr: "ERREUR: mauvaise vérification de l'armure ASCII dans la section %d.\n" muttde: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n" "Can't find section %d.\n" de: "\nAbschnitt %d nicht gefunden.\n" es: "No se encuentra la sección %d.\n" fr: "Section %d introuvable.\n" muttde: "\nAbschnitt %d nicht gefunden.\n" "Badly formed section delimiter, part %d.\n" de: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n" es: "Delimitador de sección mal formado, parte %d.\n" fr: "Séparateurs de section mal formés" muttde: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n" "Sections out of order, expected part %d" de: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d" es: "Las secciones están desordenadas: se esperaba la parte %d" fr: "Sections en désordre, partie %d attendue" muttde: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d" ", got part %d\n" de: ", angekommen ist Teil %d.\n" es: ", se encuentra la parte %d\n" fr: ", partie %d obtenue\n" muttde: ", angekommen ist Teil %d.\n" "ERROR: Hit EOF in header of section %d.\n" de: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n" es: "ERROR: Hay un EOF (fin de fichero) en la cabecera de\ la sección %d.\n" fr: "ERREUR: find de fichier dans l'en-tête de la section %d.\n" muttde: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n" "ERROR: Badly formed ASCII armor checksum, line %d.\n" de: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n" es: "ERROR: Suma de comprobación mal construida en la armadura ASCII,\n\ línea %d.\n" fr: "ERREUR: Verification de l'armure ASCII mal formée, ligne %d.\n" muttde: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n" "WARNING: No ASCII armor `END' line.\n" de: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n" es: "ADVERTENCIA: No hay línea `END' en la armadura ASCII.\n" fr: "ATTENTION: Pas de ligne `END' dans l'armure ASCII.\n" muttde: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n" "ERROR: Bad ASCII armor character, line %d.\n" de: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n" es: "ERROR: Carácter incorrecto en la armadura ASCII, línea %d.\n" fr: "ERREUR: Mauvais charactère dans l'armure ASCII, ligne %d.\n" muttde: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n" "ERROR: Bad ASCII armor line length %d on line %d.\n" de: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n" es: "ERROR: Longitud incorrecta (%d) de línea en la armadura ASCII,\n\ línea %d.\n" fr: "ERREUR: Mauvais longueur de ligne %d dans l'armure ASCII, ligne %d.\n" muttde: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n" "ERROR: Bad ASCII armor checksum" de: "\nFEHLER: Falsche Prüfsumme der Versandhülle" es: "ERROR: Suma incorrecta de comprobación en la armadura ASCII" fr: "ERREUR de vérification dans l'armure ASCII" muttde: "\nFEHLER: Falsche Prüfsumme der Versandhülle" " in section %d" de: " im Abschnitt %d.\n" es: " en la sección %d" fr: " dans la section %d" muttde: " im Abschnitt %d.\n" "Warning: Transport armor lacks a checksum.\n" de: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n" es: "Advertencia: La armadura de transporte no lleva suma de\ comprobación.\n" fr: "Attention: l'armure de transport n'a pas de vérification.\n" muttde: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n" "ERROR: Can't find file %s\n" de: "\nFEHLER: Datei '%s' nicht gefunden.\n" es: "ERROR: No se encuentra el fichero %s\n" fr: "ERREUR: Fichier %s introuvable\n" muttde: "\nFEHLER: Datei '%s' nicht gefunden.\n" "ERROR: No ASCII armor `BEGIN' line!\n" de: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n" es: "ERROR: No hay línea 'BEGIN' en la armadura ASCII\n" fr: "ERREUR: Pas de ligne `BEGIN' dans l'armure ASCII!\n" muttde: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n" "ERROR: ASCII armor decode input ended unexpectedly!\n" de: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n" es: "ERROR: La entrada con armadura ASCII termina antes de tiempo\n" fr: "ERREUR: fin prématurée du fichier armure ASCII!\n" muttde: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n" "ERROR: Header line added to ASCII armor: \"%s\"\n\ ASCII armor corrupted.\n" de: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\ in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n" es: "ERROR: Línea de cabecera añadida a la armadura ASCII:\n\ \"%s\" Armadura dañada\n" fr: "Ligne d'entête ajoutée à l'enveloppe ASCII: \"%s\"\n\ enveloppe ASCII corrompue" muttde: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\ in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n" "\n\007Unable to write ciphertext output file '%s'.\n" de: "\n\007FEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n" es: "\n\007No puede escribirse el fichero de salida cifrado '%s'.\n" fr: "\n\007Ecriture impossible dans le fichier de sortie chiffré '%s'.\n" mutt: "\nUnable to write ciphertext output file '%s'.\n" muttde: "\nFEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n" "ERROR: Hit EOF in header.\n" de: "\nFEHLER: EOF (Dateiende) im Header.\n" es: "ERROR: Hay un EOF (fin de fichero) en la cabecera.\n" fr: "ERREUR: fin de fichier dans l'en-tête.\n" muttde: "\nFEHLER: EOF (Dateiende) im Header.\n" "Unsupported character set: '%s'\n" de: "\nKeine Unterstützung für Zeichensatz '%s'.\n" es: "Conjunto de caracteres no admitido: '%s'\n" fr: "Table de caractères non supportée: '%s'\n" muttde: "\nKeine Unterstützung für Zeichensatz '%s'.\n" "The legal_kludge cannot be disabled in US version.\n" de: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n" es: "'legal_kludge' no puede desactivarse en la versión para los EE.UU.\n" fr: "Les embarras légaux ne peuvent pas être désactivés aux Etats-Unis.\n" muttde: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n" "The multiple_recipients flag is unnecessary in this \ version of MacPGP.\ \nPlease remove this entry from your configuration file.\n" de: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\ \nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n" es: "No se necesita la bandera 'multiple_recipients' en esta versión\n\ de MacPGP.\ \nElimina esa entrada del fichero de configuración.\n" fr: "L'indicateur de destinataires multiples n'est pas nécessaire dans \ version de MacPGP. \ \nS.V.P. supprimez cette entrée de votre fichier de configuration. \n" muttde: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\ \nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n" "\007\nWARNING: This key has been revoked by its owner,\n\ possibly because the secret key was compromised.\n" de: "\007\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\ möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n" es: "\007\nADVERTENCIA: Esta clave ha sido revocada por su propietario;\n\ es posible que la clave secreta se haya visto comprometida.\n" fr: "\007\nATTENTION: cette clé a été révoquée par son propriétaire,\n\ probablement parce que la clé secrète a été compromise.\n" mutt: "\nWARNING: This key has been revoked by its owner,\n\ possibly because the secret key was compromised.\n" muttde: "\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\ möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n" "This could mean that this signature is a forgery.\n" de: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n" es: "Puede significar que la firma está falsificada.\n" fr: "Ceci peut signifier que cette signature est un faux.\n" muttde: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n" "You cannot use this revoked key.\n" de: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n" es: "No puedes utilizar esta clave revocada.\n" fr: "Vous ne pouvez pas utiliser cette clé révoquée.\n" muttde: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n" "\007\nWARNING: Because this public key is not certified with \ a trusted\nsignature, it is not known with high confidence that this \ public key\nactually belongs to: \"%s\".\n" de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\ Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n" es: "\nAVISO: Esta clave pública no está certificada con una firma\ de confianza,\n\ por lo que no se sabe con seguridad si realmente pertenece a:\n\ \"%s\".\n" fr: "\007\nATTENTION: Cette clé publique n'est pas certifiée avec une\n\ signature fiable. Il n'est donc pas reconnu avec un haut degré de confiance\n\ que cette signature appartient effectivement à: \"%s\".\n" mutt: "\nWARNING: Because this public key is not certified with \ a trusted\nsignature, it is not known with high confidence that this \ public key\nactually belongs to: \"%s\".\n" muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\ Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n" "\007\nWARNING: This public key is not trusted to actually belong \ to:\n\"%s\".\n" de: "\007\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\ zu \"%s\" gehört.\n" es: "\nADVERTENCIA: No se sabe con seguridad si esta clave pública\n\ pertenece realmente a: \"%s\".\n" fr: "\007\nATTENTION: Cette clé publique n'est pas reconnue comme\n\ appartenant à: \"%s\".\n" mutt: "\nWARNING: This public key is not trusted to actually belong \ to:\n\"%s\".\n" muttde: "\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\ zu \"%s\" gehört.\n" "\007\nWARNING: Because this public key is not certified with enough \ trusted\nsignatures, it is not known with high confidence that this \ public key\nactually belongs to: \"%s\".\n" de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\ Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\ daß er wirklich zu \"%s\" gehört.\n" es: "\nADVERTENCIA: Como esta clave no está certificada con suficientes\n\ firmas fiables, no se sabe con seguridad si realmente pertenece a:\n\ \"%s\".\n" fr: "\007\nATTENTION: puisque cette clé publique n'est pas certifiée avec\n\ suffisament de signatures, il n'est pas connu avec un haut niveau de confiance\ \nque cette clé appartient effectivement à: \"%s\".\n" mutt: "\nWARNING: Because this public key is not certified with enough \ trusted\nsignatures, it is not known with high confidence that this \ public key\nactually belongs to: \"%s\".\n" muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\ Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\ daß er wirklich zu \"%s\" gehört.\n" "But you previously approved using this public key anyway.\n" de: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n" es: "Ya has permitido antes que se utilice esta clave p\372blica.\n" fr: "Mais vous avez déjà accepté l'usage de cette clé publique.\n" muttde: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n" "\nAre you sure you want to use this public key (y/N)? " de: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) " es: "\nżEstás seguro de querer utilizar esta clave pública (s/N)? " fr: "\nEtes vous sûr(e) de vouloir utiliser cette clé publique (o/N)? " muttde: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) " "\n\007Unsupported packet format - you need a newer version of PGP \ for this file.\n" de: "\n\007WARNUNG: nicht unterstütztes Datenformat!\n\ Du brauchst eine neuere PGP-Version für diese Datei.\n" es: "\n\007Formato desconocido -\ se necesita una versión más reciente de PGP" fr: "\n\007Format non-supporté - vous devez utiliser un version nouvelle de PGP pour ce fichier.\n" mutt: "\nUnsupported packet format - you need a newer version of PGP \ for this file.\n" muttde: "\nWARNUNG: nicht unterstütztes Datenformat!\n\ Du brauchst eine neuere PGP-Version für diese Datei.\n" "Preparing random session key..." de: "\nVorbereitung des zufälligen IDEA-Schlüssels..." es: "Preparando la clave aleatoria de la sesión..." fr: "Préparation de la clé aléatoire..." muttde: "\nVorbereitung des zufälligen IDEA-Schlüssels..." "\n\007Error: System clock/calendar is set wrong.\n" de: "\n\007FEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n" es: "\n\007Error: El reloj/calendario del sistema está equivocado.\n" fr: "\n\007Erreur: L'horloge du système est incorrecte.\n" mutt: "\nError: System clock/calendar is set wrong.\n" muttde: "\nFEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n" "Just a moment..." de: "\nEinen Augenblick, bitte..." es: "Un momento..." fr: "Un moment..." muttde: "\nEinen Augenblick, bitte..." "\n\007Can't open input plaintext file '%s'\n" de: "\n\007FEHLER beim Öffnen der Eingabedatei '%s'.\n" es: "\n\007No puede abrirse el fichero normal de entrada '%s'\n" fr: "\n\007Ouverture du fichier en clair '%s' impossible.\n" mutt: "\nCan't open input plaintext file '%s'\n" muttde: "\nFEHLER beim Öffnen der Eingabedatei '%s'.\n" "\n\007Can't open plaintext file '%s'\n" de: "\n\007FEHLER beim Öffnen der Klartextdatei '%s'.\n" es: "\n\007No puede abrirse el fichero normal '%s'\n" fr: "\n\007Ouverture du fichier en clair '%s' impossible\n" mutt: "\nCan't open plaintext file '%s'\n" muttde: "\nFEHLER beim Öffnen der Klartextdatei '%s'.\n" "\n\007Can't create signature file '%s'\n" de: "\n\007FEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n" es: "\n\007No puede crearse el fichero de firma '%s'\n" fr: "\n\007Création du fichier de signature '%s' impossible\n" mutt: "\nCan't create signature file '%s'\n" muttde: "\nFEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n" "\n\007Can't open key ring file '%s'\n" de: "\n\007FEHLER beim Öffnen des Schlüsselbunds '%s'.\n" es: "\n\007No puede abrirse el anillo de claves '%s'\n" fr: "\n\007Ouverture du fichier de clé '%s' impossible\n" mutt: "\nCan't open key ring file '%s'\n" muttde: "\nFEHLER beim Öffnen des Schlüsselbunds '%s'.\n" "This key has already been revoked.\n" de: "Dieser Schlüssel wurde bereits zurückgezogen.\n" es: "Esta clave ya se había revocado.\n" fr: "Cette clé a déjà été révoquée.\n" muttde: "Dieser Schlüssel wurde bereits zurückgezogen.\n" "\n\007Can't create output file to update key ring.\n" de: "\n\007Dateifehler bei der Aktualisierung des Schlüsselbunds.\n" es: "\n\007No puede crearse el fichero de salida para actualizar\ el anillo.\n" fr: "\n\007Impossible de créer le fichier de sortie pour modifier le\ \nfichier de clés\n" mutt: "\nCan't create output file to update key ring.\n" muttde: "\nDateifehler bei der Aktualisierung des Schlüsselbunds.\n" "\nKey compromise certificate created.\n" de: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n" es: "\nCreado el certificado de compromiso de clave.\n" fr: "\nCertificat de compromission de clé créé.\n" muttde: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n" "\n\007Key is already signed by user '%s'.\n" de: "\n\007Der Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n" es: "\n\007La clave ya ha sido firmada por '%s'.\n" fr: "\n\007La clé est déjà signée par l'utilisateur '%s'.\n" mutt: "\nKey is already signed by user '%s'.\n" muttde: "\nDer Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n" "\n\nREAD CAREFULLY: Based on your own direct first-hand knowledge, \ are\nyou absolutely certain that you are prepared to solemnly certify \ that\nthe above public key actually belongs to the user specified by \ the\nabove user ID (y/N)? " de: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\ erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\ oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\ gehört? (j/N) " es: "\n\nLEE ATENTAMENTE: Según tu conocimiento directo,\n\ żestás absolutamente seguro de poder certificar solemnemente que la\n\ clave pública pertenece realmente al usuario especificado por\n\ este identificador (s/N)? " fr: "\n\nLIRE ATTENTIVEMENT: Selon votre propre connaissance directe,\n\ êtes vous absoluement certain(e) d'être prêt(e) à certifier\n\ solennellement que la clé publique ci-dessus appartient effectivement à\n\ la personne spécifiée par le nom d'utilisateur ci-dessus (o/N)? " muttde: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\ erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\ oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\ gehört? (j/N) " "\nKey signature certificate added.\n" de: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n" es: "\nSe ha añadido el certificado de firma.\n" fr: "\nCertificat de signature de clé ajouté.\n" muttde: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n" "\nError: Key for signing userid '%s'\n\ does not appear in public keyring '%s'.\n\ Thus, a signature made with this key cannot be checked on this keyring.\n" de: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\ \"%s\" ist nicht im öffentlichen\n\ Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\ Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n" es: "\nError: La clave del firmante '%s'\n\ no se encuentra en el anillo '%s'.\n\ No puede comprobarse la firma realizada con esa clave.\n" fr: "\nErreur: La clef du signataire id '%s'\n\ est absente du fichier de clefs publiques '%s'\n\ en consequence, une signature faite avec cette clef ne peut etre verifiee.\n" muttde: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\ \"%s\" ist nicht im öffentlichen\n\ Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\ Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n" "\nLooking for key for user '%s':\n" de: "\nSuche den Schlüssel für \"%s\":\n" es: "\nBuscando la clave del usuario '%s':\n" fr: "\nRecherche de la clé pour l'utilisateur '%s':\n" muttde: "\nSuche den Schlüssel für \"%s\":\n" "\n\007Can't open ciphertext file '%s'\n" de: "\n\007FEHLER beim Öffnen der verschlüsselten Datei '%s'.\n" es: "\n\007No puede abrirse el fichero cifrado '%s'\n" fr: "\n\007Ouverture du fichier chiffré '%s' impossible\n" mutt: "\nCan't open ciphertext file '%s'\n" muttde: "\nFEHLER beim Öffnen der verschlüsselten Datei '%s'.\n" "\nFile '%s' has signature, but with no text." de: "\nDie Datei '%s' enthält eine Unterschrift, aber keinen Text." es: "\nEl fichero '%s' tiene firma, pero no texto." fr: "\nLe fichier '%s' à une signature, mais pas de texte." mutt: " " muttde: " " "\nText is assumed to be in file '%s'.\n" de: "\nDer Text könnte sich in der Datei '%s' befinden.\n" es: "\nSe asume que el texto se encuentra en el fichero '%s'.\n" fr: "\nLe texte est supposé être dans le fichier '%s'.\n" mutt: " " muttde: " " "\nPlease enter filename of material that signature applies to: " de: "\nName der Datei, zu der die Unterschrift gehört: " es: "\nIntroduzca el nombre del fichero al que se aplica la firma: " fr: "SVP indiques le nom du fichier que vous voulez signer: " muttde: "\nName der Datei, zu der die Unterschrift gehört: " "File signature applies to?" de: "Die Unterschrift gehört zu welcher Datei?" es: "żDónde se aplica la firma?" fr: "Ce fichier signataire s'applique à quoi? " muttde: "Die Unterschrift gehört zu welcher Datei?" "\n\007Can't open file '%s'\n" de: "\n\007FEHLER beim Öffnen der Datei '%s'.\n" es: "\n\007No puede abrirse el fichero '%s'\n" fr: "\n\007Ouverture du fichier '%s' impossible\n" mutt: "\nCan't open file '%s'\n" muttde: "\nFEHLER beim Öffnen der Datei '%s'.\n" "File type: '%c'\n" de: "\nDateityp: '%c'\n" es: "\nTipo de fichero: '%c'\n" fr: "Type de fichier: '%c'\n" muttde: "\nDateityp: '%c'\n" "Original plaintext file name was: '%s'\n" de: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n" es: "El nombre del fichero original era: '%s'\n" fr: "Le nom originel du fichier en clair était: '%s'\n" muttde: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n" "\nWARNING: Can't find the right public key-- can't check signature \ integrity.\n" de: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\ Eine Überprüfung der Unterschrift ist nicht möglich.\n" es: "\nAVISO: No se encuentra la clave pública necesaria para comprobar\n\ la integridad de la firma.\n" fr: "\nATTENTION: impossible de trouver la clé publique adéquate et de\n\ vérifier l'integrité de la signature.\n" muttde: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\ Eine Überprüfung der Unterschrift ist nicht möglich.\n" "\007\nUnrecognized message digest algorithm.\n\ This may require a newer version of PGP.\n\ Can't check signature integrity.\n" de: "\007\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\ Du brauchst wahrscheinlich eine neuere Version von PGP.\n\ Eine Überprüfung der Unterschrift ist nicht möglich.\n" es: "\007\nAlgoritmo desconocido de resumen de mensaje.\n\ Puede necesitarse una nueva versión de PGP.\n\ No puede comprobarse la integridad de la firma.\n" fr: "\007Algorithme de digest inconnu.\n\ Ceci peut vouloir dire que vous avez besoin d'une version plus récente\n\ de PGP. Incapable de vérifier la signature.\n" mutt: "\nUnrecognized message digest algorithm.\n\ This may require a newer version of PGP.\n\ Can't check signature integrity.\n" muttde: "\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\ Du brauchst wahrscheinlich eine neuere Version von PGP.\n\ Eine Überprüfung der Unterschrift ist nicht möglich.\n" "\a\nMalformed or obsolete signature. Can't check signature \ integrity.\n" de: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n" es: "\a\nFirma incorrecta u obsoleta.\n\ No puede comprobarse su integridad.\n" fr: "\a\nSignature déformée ou obsolète. Vérification impossible. \n" muttde: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n" "\a\nSigning key is too large. Can't check signature integrity.\n" de: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\ Unterschrift ist deshalb nicht möglich.\n" es: "\a\nLa clave para firmar es demasiado grande.\n\ No puede comprobarse la integridad de la firma." fr: "La clef signataire est trop grande. Incapable d'en vérifier l'intégrité. \n" muttde: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\ Unterschrift ist deshalb nicht möglich.\n" "\n\007Error: RSA-decrypted block is corrupted.\n\ This may be caused either by corrupted data or by using the wrong RSA key.\n\ " de: "\n\007FEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\ Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n" es: "\n\007Error: El bloque desencriptado RSA está dañado.\n\ Puede deberse a un problema en los datos o a una clave RSA equivocada.\n" fr: "\n\007Erreur: le block dechiffré par RSA est endommagé.\n\ Ceci est peut être causé par des données endommagées our par\n\ l'utilisation d'une mauvaise clé RSA.\n" mutt: "\nError: RSA-decrypted block is corrupted.\n\ This may be caused either by corrupted data or by using the wrong RSA key.\n\ " muttde: "\nFEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\ Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n" "WARNING: Bad signature, doesn't match file contents!" de: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!" es: "ADVERTENCIA: Firma incorrecta, no coincide con el contenido\ del fichero\n" fr: "ATTENTION: Mauvaise signature, ne correspond pas au contenu!" muttde: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!" "\nBad signature from user \"%s\".\n" de: "\nFEHLERHAFTE Unterschrift von \"%s\",\n" es: "\nFirma incorrecta de \"%s\".\n" fr: "\nMauvaise signature de l'utilisateur \"%s\".\n" muttde: "\nFEHLERHAFTE Unterschrift von \"%s\",\n" "Signature made %s using %d-bit key, key ID %s\n" de: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n" es: "Firma realizada el %s con una clave de %d bits, identificador %s\n" fr: "Signature faite %s en utilisant un clef de %d bits. Id de la clef:%s\n" muttde: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n" "\nPress ENTER to continue..." de: "\nWeiter mit Return..." es: "\nPulse 'Enter' para continuar..." fr: "\nAppuyez sur la touche Retour ou Entrée pour continuer..." muttde: "\nWeiter mit Return..." "\nGood signature from user \"%s\".\n" de: "\nBESTÄTIGTE Unterschrift von \"%s\",\n" es: "\nFirma correcta de \"%s\".\n" fr: "\nBonne signature de l'utilisateur \"%s\".\n" muttde: "\nBESTÄTIGTE Unterschrift von \"%s\",\n" "\nSignature and text are separate. No output file produced. " de: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt." es: "\nLa firma y el texto están separados.\n\ No se produce fichero de salida. " fr: "\nLa signature et le texte sont séparés. Fichier de sortie non produit." muttde: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt." "\n\007Can't create plaintext file '%s'\n" de: "\n\007FEHLER beim Erzeugen der Klartextdatei '%s'.\n" es: "\n\007No puede crearse el fichero normal '%s'\n" fr: "\n\007Creation du fichier en clair '%s' impossible.\n" mutt: "\nCan't create plaintext file '%s'\n" muttde: "\nFEHLER beim Erzeugen der Klartextdatei '%s'.\n" "\n\007Signature file '%s' already exists. Overwrite (y/N)? " de: "\n\007Die Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) " es: "\n\007El fichero de firma '%s' ya existe.\n\ żSe sobreescribe (s/N)? " fr: "\n\007Le fichier de signature '%s' existe déjà. A écraser (o/N)? " mutt: "\nSignature file '%s' already exists. Overwrite (y/N)? " muttde: "\nDie Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) " "\nWriting signature certificate to '%s'\n" de: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n" es: "\nEscribiendo el certificado de firma para '%s'\n" fr: "\nEcriture du certificat de signature dans '%s'\n" muttde: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n" "\n\007Error: Badly-formed or corrupted signature certificate.\n" de: "\n\007FEHLER: Format- oder Datenfehler in der Unterschrift.\n" es: "\n\007Error: Certificado de firma incorrecto o dañado.\n" fr: "\n\007Erreur: certificat de signature mal formé ou endommagé\n" mutt: "\nError: Badly-formed or corrupted signature certificate.\n" muttde: "\nFEHLER: Format- oder Datenfehler in der Unterschrift.\n" "File \"%s\" does not have a properly-formed signature.\n" de: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n" es: "El fichero \"%s\" no tiene una firma construida correctamente.\n" fr: "Le fichier \"%s\" n'a pas une signature correctement formée.\n" muttde: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n" "compressed. " de: "gepackt. " es: "comprimido. " fr: "comprimé. " muttde: "gepackt. " "\n\007Can't create compressed file '%s'\n" de: "\n\007FEHLER beim Erzeugen der gepackten Datei '%s'.\n" es: "\n\007No puede crearse el fichero comprimido '%s'\n" fr: "\n\007Création du fichier compressé '%s' impossible\n" mutt: "\nCan't create compressed file '%s'\n" muttde: "\nFEHLER beim Erzeugen der gepackten Datei '%s'.\n" "Compressing file..." de: "Packen der Datei..." es: "Comprimiendo el fichero..." fr: "Compression du fichier..." muttde: "Packen der Datei..." "\n\007Can't create ciphertext file '%s'\n" de: "\n\007FEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n" es: "\n\007No puede crearse el fichero cifrado '%s'\n" fr: "\n\007Création du fichier chiffré '%s' impossible.\n" mutt: "\nCan't create ciphertext file '%s'\n" muttde: "\nFEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n" "\nYou need a pass phrase to encrypt the file. " de: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei." es: "\nSe necesita una contraseña para encriptar el fichero. " fr: "\nUn mot de passe est nécessaire pour chiffrer ce fichier. " muttde: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei." "\n\007Cannot find the public key matching userid '%s'\n\ This user will not be able to decrypt this message.\n" de: "\n\007Der öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\ ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\ entschlüsseln können.\n" es: "\n\007No puede encontrarse la clave pública de '%s'\n\ Ese usuario no podrá descifrar el mensaje.\n" fr: "\n\007Impossible de trouver la clé publique pour l'utilisateur '%s'\n\ Cet utilisateur ne pourra pas déchiffrer ce message.\n" mutt: "\nCannot find the public key matching userid '%s'\n\ This user will not be able to decrypt this message.\n" muttde: "\nDer öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\ ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\ entschlüsseln können.\n" "Skipping userid %s\n" de: "Die Benutzer-ID \"%s\" wird übersprungen.\n" es: "Saltando el identificador %s\n" fr: "je passe l'utiliateur %s\n" muttde: "Die Benutzer-ID \"%s\" wird übersprungen.\n" "\n\007'%s' is not a cipher file.\n" de: "\n\007'%s' ist keine verschlüsselte Datei.\n" es: "\n\007'%s' no es un fichero cifrado.\n" fr: "\n\007'%s' n'est pas un fichier chiffré.\n" mutt: "\n'%s' is not a cipher file.\n" muttde: "\n'%s' ist keine verschlüsselte Datei.\n" "\n\007Error: RSA block is possibly malformed. Old format, maybe?\n" de: "\n\007FEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n" es: "\n\007Error: El bloque RSA está mal formado.\n\ Quizá se trate de un formato antiguo.\n" fr: "\n\007Erreur: Block RSA malformé, vieux format ???" mutt: "\nError: RSA block is possibly malformed. Old format, maybe?\n" muttde: "\nFEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n" "\nThis message can only be read by:\n" de: "\nDiese Nachricht kann nur gelesen werden von:\n" es: "\nEste mensaje sólo puede leerlo:\n" fr: "\nCe message ne peut être lu que par:\n" muttde: "\nDiese Nachricht kann nur gelesen werden von:\n" " keyID: %s\n" de: " Schlüssel-ID: %s\n" es: " identificador: %s\n" fr: " Id de la clef: %s \n" muttde: " Schlüssel-ID: %s\n" "\n\007You do not have the secret key needed to decrypt this file.\n" de: "\n\007Dir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n" es: "\n\007No tienes la clave secreta necesaria para descifrar\ este fichero.\n" fr: "\n\007Vous n'avez pas la clé secrète requise pour déchiffrer\ \nce fichier.\n" mutt: "\nYou do not have the secret key needed to decrypt this file.\n" muttde: "\nDir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n" "\n\007Error: Decrypted plaintext is corrupted.\n" de: "\n\007FEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n" es: "\n\007Error: El texto en claro desencriptado está dañado.\n" fr: "\n\007Erreur: le fichier déchiffré est endommagé.\n" mutt: "\nError: Decrypted plaintext is corrupted.\n" muttde: "\nFEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n" "\nYou need a pass phrase to decrypt this file. " de: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei." es: "\nSe necesita la contraseña para desencriptar este fichero. " fr: "\nUn mot de passe est nécessaire pour déchiffrer ce fichier. " muttde: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei." "\n\007Error: Bad pass phrase.\n" de: "\n\007FEHLER: Falsches Mantra!\n" es: "\n\007Error: Contraseña incorrecta.\n" fr: "\n\007Erreur: Mauvais mot de passe.\n" mutt: "\nError: Bad pass phrase.\n" muttde: "\nFEHLER: Falsches Mantra!\n" "Pass phrase appears good. " de: "\nDas Mantra scheint zu stimmen.\n" es: "Parece correcta. " fr: "Le mot de passe semble correct. " muttde: "\nDas Mantra scheint zu stimmen.\n" "Decompressing plaintext..." de: "Entpacken des Klartextes..." es: "Descomprimiendo el texto normal..." fr: "Decompression du texte en clair..." muttde: "Entpacken des Klartextes..." "\n\007Can't open compressed file '%s'\n" de: "\n\007FEHLER beim Öffnen der gepackten Datei '%s'.\n" es: "\n\007No puede abrirse el fichero comprimido '%s'\n" fr: "\n\007Ouverture du fichier compressé '%s' impossible.\n" mutt: "\nCan't open compressed file '%s'\n" muttde: "\nFEHLER beim Öffnen der gepackten Datei '%s'.\n" "\007\nUnrecognized compression algorithm.\n\ This may require a newer version of PGP.\n" de: "\007\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n" es: "\007\nAlgoritmo de compresión no reconocido.\n\ Puede necesitarse una nueva versión de PGP.\n" fr: "\007\nAlgorithme de compression non reconnu.\n\ Ceci peut nécessiter une nouvelle version de PGP.\n" mutt: "\nUnrecognized compression algorithm.\n\ This may require a newer version of PGP.\n" muttde: "\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n" "\n\007Can't create decompressed file '%s'\n" de: "\n\007FEHLER beim Erzeugen der entpackten Datei '%s'.\n" es: "\n\007No puede crearse el fichero descomprimido '%s'\n" fr: "\n\007Création du fichier décompressé '%s' impossible.\n" mutt: "\nCan't create decompressed file '%s'\n" muttde: "\nFEHLER beim Erzeugen der entpackten Datei '%s'.\n" "\n\007Decompression error. Probable corrupted input.\n" de: "\n\007FEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n" es: "\n007Error en descompresión. Probable entrada dañada.\n" fr: "\n\007Erreur de Decompression, entrée probablement corrompue" mutt: "\nDecompression error. Probable corrupted input.\n" muttde: "\nFEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n" "done. " de: "fertig. " es: "finalizado. " fr: "terminé. " muttde: "fertig. " "Truncating filename '%s' " de: "Kürzung des Dateinamens '%s' " es: "Truncando el nombre de fichero '%s' " fr: "troncation du fichier '%s'" muttde: "Kürzung des Dateinamens '%s' " "y" de: "j" es: "s" fr: "o" muttde: "j" "n" de: "n" es: "n" fr: "n" muttde: "n" "\nShould '%s' be renamed to '%s' (Y/n)? " de: "\nSoll '%s' in '%s' umbenannt werden? (J/n) " es: "\nżRenombrar '%s' como '%s' (S/n)? " fr: "\nEst-ce que '%s' doit être renommé '%s' (O/n)? " muttde: "\nSoll '%s' in '%s' umbenannt werden? (J/n) " "\nDisk full.\n" de: "\nDie Platte ist voll!\n" es: "\nDisco lleno.\n" fr: "\nDisque plein.\n" muttde: "\nDie Platte ist voll!\n" "\nFile write error.\n" de: "\nFEHLER beim Schreiben einer Datei.\n" es: "\nError de escritura del fichero.\n" fr: "\nErreur d'écriture sur fichier.\n" muttde: "\nFEHLER beim Schreiben einer Datei.\n" "\007Write error on stdout.\n" de: "\n\007FEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n" es: "\007Error de escritura en la salida estándar (\"stdout\").\n" fr: "\007Erreur d'écriture sur la sortie standard.\n" mutt: "Write error on stdout.\n" muttde: "\nFEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n" "\n\007Cannot create temporary file '%s'\n" de: "\n\007FEHLER beim Erzeugen der Temporärdatei '%s'.\n" es: "\n\007No puede crearse el fichero temporal '%s'\n" fr: "\n\007Création du fichier temporaire '%s' impossible\n" mutt: "\nCannot create temporary file '%s'\n" muttde: "\nFEHLER beim Erzeugen der Temporärdatei '%s'.\n" "Can't create output file '%s'\n" de: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n" es: "No puede crearse el fichero '%s'\n" fr: "Création du fichier '%s' impossible.\n" muttde: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n" "\n\007Output file '%s' already exists.\n" de: "\n\007Die Ausgabedatei '%s' existiert bereits.\n" es: "\n\007El fichero de salida '%s' ya existe.\n" fr: "\n\007Le ficher de sortie '%s' existe déjà.\n" mutt: "\nOutput file '%s' already exists.\n" muttde: "\nDie Ausgabedatei '%s' existiert bereits.\n" "\n\007Output file '%s' already exists. Overwrite (y/N)? " de: "\n\007Die Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) " es: "\n\007El fichero de salida '%s' ya existe. żSobrescribir (s/N)? " fr: "\n\007Le fichier de sortie '%s' existe déjà. A écraser (o/N)? " mutt: "\nOutput file '%s' already exists. Overwrite (y/N)? " muttde: "\nDie Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) " "Enter new file name:" de: "Gib den neuen Dateinamen ein:" es: "Introduzca el nuevo nombre de fichero: " fr: "Donnez un nouveau nom de fichier:" muttde: "Gib den neuen Dateinamen ein:" "Replacing signature from keyID %s on userid \"%s\"\n" de: "Die Unterschrift von der Schlüssel-ID %s unter der\n\ Benutzer-ID \"%s\" wird ersetzt.\n" es: "Sustituyendo la firma de la clave %s para el usuario\n\ \"%s\"\n" fr: "Remplacement la signature de keyID %s de l'utilisateur '%s'\n" muttde: "Die Unterschrift von der Schlüssel-ID %s unter der\n\ Benutzer-ID \"%s\" wird ersetzt.\n" "Verifying signature from %s\n" de: "Überprüfung der Unterschrift von \"%s\"\n" es: "Verificando la firma de %s\n" fr: "Vérification de la signature de %s\n" muttde: "Überprüfung der Unterschrift von \"%s\"\n" "on userid \"%s\"\n" de: "unter \"%s\".\n" es: "en el identificador \"%s\"\n" fr: "pour le nom d'utilisateur \"%s\"\n" muttde: "unter \"%s\".\n" "Replacing signature from %s\n" de: "Ersetzung der Unterschrift von \"%s\"\n" es: "Sustituyendo la firma de %s\n" fr: "Remplacement de la signature de %s" muttde: "Ersetzung der Unterschrift von \"%s\"\n" "Verification Failed\n" de: "\nDie Überprüfung ist fehlgeschlagen!\n" es: "Verificación fallida\n" fr: "Echec de la vérification" muttde: "\nDie Überprüfung ist fehlgeschlagen!\n" "New signature from keyID %s on userid \"%s\"\n" de: "Neue Unterschrift von %s unter \"%s\".\n" es: "Nueva firma de la clave %s para el usuario \"%s\"\n" fr: "Nouvelle signature de la clé %s sur l'utilisateur \"%s\"\n" muttde: "Neue Unterschrift von %s unter \"%s\".\n" "New signature from %s\n" de: "Neue Unterschrift von \"%s\"\n" es: "Nueva firma de %s\n" fr: "\nNouvelle signature de %s\n" muttde: "Neue Unterschrift von \"%s\"\n" "Key revocation certificate from \"%s\".\n" de: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n" es: "Certificado de revocación de clave de \"%s\".\n" fr: "Certificat de révocation de clé de \"%s\".\n" muttde: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n" "\n\007WARNING: File '%s' contains bad revocation certificate.\n" de: "\n\007WARNUNG: Die Datei '%s' enthält eine\n\ fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n" es: "\n\007AVISO: El fichero '%s' tiene un certificado de revocación\ incorrecto.\n" fr: "\n\007ATTENTION: the fichier '%s' contient de mauvais certificats\n\ de révocation.\n" mutt: "\nWARNING: File '%s' contains bad revocation certificate.\n" muttde: "\nWARNUNG: Die Datei '%s' enthält eine\n\ fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n" "New userid: \"%s\".\n" de: "Neue Benutzer-ID: \"%s\".\n" es: "Nuevo identificador: \"%s\".\n" fr: "Nouveau nom d'utilisateur: \"%s\".\n" muttde: "Neue Benutzer-ID: \"%s\".\n" "\nWill be added to the following key:\n" de: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n" es: "\nSe añadirá a la clave siguiente:\n" fr: "\nSera ajouté(e) à la clé suivante:\n" muttde: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n" "\nAdd this userid (y/N)? " de: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) " es: "\nżAñadir este identificador (s/N)? " fr: "\nAjouter ce nom d'utilisateur (o/N)? " muttde: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) " "\n\007Can't open key file '%s'\n" de: "\n\007FEHLER beim Öffnen der Schlüsseldatei '%s'.\n" es: "\n\007No puede abrirse el fichero de claves '%s'\n" fr: "\n\007Ouverture du fichier de clé '%s' impossible\n" mutt: "\nCan't open key file '%s'\n" muttde: "\nFEHLER beim Öffnen der Schlüsseldatei '%s'.\n" "\nKey ring file '%s' cannot be created.\n" de: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n" es: "\nNo se puede crear el anillo de claves '%s'.\n" fr: "\nCréation du fichier de clés '%s' impossible.\n" muttde: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n" "\nLooking for new keys...\n" de: "\nSuche nach neuen Schlüsseln...\n" es: "\nBuscando nuevas claves...\n" fr: "\nRecherche des nouvelles clés...\n" muttde: "\nSuche nach neuen Schlüsseln...\n" "\n\007Could not read key from file '%s'.\n" de: "\n\007FEHLER beim Lesen des Schlüssels aus Datei '%s'.\n" es: "\n\007No ha podido leerse la clave en el fichero '%s'.\n" fr: "\n\007Lecture impossible de la clé dans le fichier '%s'.\n" mutt: "\nCould not read key from file '%s'.\n" muttde: "\nFEHLER beim Lesen des Schlüssels aus Datei '%s'.\n" "\n\007Warning: Key ID %s matches key ID of key already on \n\ key ring '%s', but the keys themselves differ.\n\ This is highly suspicious. This key will not be added to ring.\n\ Acknowledge by pressing return: " de: "\n\007WARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\ im Schlüsselbund '%s' vorhandenen Schlüssel\n\ überein, aber die Schlüssel selbst sind nicht identisch.\n\ Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\ Schlüsselbund hinzugefügt. Mit Return bestätigen: " es: "\n\007Advertencia: El identificador de clave %s coincide con otro\n\ en el anillo '%s', pero las claves son distintas.\n\ Es muy sospechoso. Esta clave no se incluirá en el anillo.\n\ Confirmar pulsando 'retorno': " fr: "\n\007Attention: l'identificateur de clé %s correspond à une clé\ \ndéjà dans le fichier de clés '%s', mais les clés sont différentes.\ \nCeci est très suspect. Cette clé ne sera pas ajoutée au fichier de clés.\ \nAppuyez sur la touche Retour ou Entrée: " mutt: "\nWarning: Key ID %s matches key ID of key already on \n\ key ring '%s', but the keys themselves differ.\n\ This is highly suspicious. This key will not be added to ring.\n\ Acknowledge by pressing return: " muttde: "\nWARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\ im Schlüsselbund '%s' vorhandenen Schlüssel\n\ überein, aber die Schlüssel selbst sind nicht identisch.\n\ Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\ Schlüsselbund hinzugefügt. Mit Return bestätigen: " "\nDo you want to add this key to keyring '%s' (y/N)? " de: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) " es: "\nżQuieres añadir esta clave al anillo '%s' (s/N)? " fr: "\nVoulez vous ajouter cette clé au fichier de clés '%s' (o/N)? " muttde: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) " "Key has been revoked.\n" de: "Der Schlüssel wurde zurückgezogen.\n" es: "La clave se ha revocado.\n" fr: "La clé a été révoquée.\n" muttde: "Der Schlüssel wurde zurückgezogen.\n" "\n\007Key file contains duplicate keys: cannot be added to keyring\n" de: "\n\007Die Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\ hinzugefügt werden.\n" es: "\n\007El fichero contiene claves duplicadas: \ no puede añadirse al anillo\n" fr: "\n\007Le fichier contient des clés dupliquées: impossible\n\ de l'ajouter au fichier de clés\n" mutt: "\nKey file contains duplicate keys: cannot be added to keyring\n" muttde: "\nDie Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\ hinzugefügt werden.\n" "No new keys or signatures in keyfile.\n" de: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n" es: "No hay nuevas claves ni nuevas firmas en el fichero.\n" fr: "Pas de nouvelles clés ou signatures dans le fichier de clés.\n" muttde: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n" "\nKeyfile contains:\n" de: "\nDie Datei enthält folgende Schlüssel:\n" es: "\nEl fichero de claves contiene:\n" fr: "\nLe fichier de clés contient:\n" muttde: "\nDie Datei enthält folgende Schlüssel:\n" "%4d new key(s)\n" de: "%4d neue(n) Schlüssel\n" es: "%4d nueva(s) clave(s)\n" fr: "%4d nouvelle(s) clé(s)\n" muttde: "%4d neue(n) Schlüssel\n" "%4d new signatures(s)\n" de: "%4d neue Unterschrift(en)\n" es: "%4d nueva(s) firma(s)\n" fr: "%4d nouvelle(s) signatures(s)\n" muttde: "%4d neue Unterschrift(en)\n" "%4d new user ID(s)\n" de: "%4d neue Benutzer-ID(s)\n" es: "%4d nuevo(s) identificador(es) de usuario\n" fr: "%4d nouveau(x) nom(s) d'utilisateur\n" muttde: "%4d neue Benutzer-ID(s)\n" "%4d new revocation(s)\n" de: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n" es: "%4d nueva(s) revocacion(es)\n" fr: "%4d nouvelle(s) révocation(s)\n" muttde: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n" "\nNo keys found in '%s'.\n" de: "\nKeine Schlüssel in '%s' gefunden.\n" es: "\nNo se encuentran claves en '%s'.\n" fr: "\nPas de clés trouvées dans '%s'.\n" muttde: "\nKeine Schlüssel in '%s' gefunden.\n" "\nOne or more of the new keys are not fully certified.\n\ Do you want to certify any of these keys yourself (y/N)? " de: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\ Willst Du sie selbst beglaubigen? (j/N) " es: "\nUna o más de las nuevas claves no están completamente certificadas.\n\ żQuieres certificar alguna de ellas tú mismo (s/N)? " fr: "\nUne ou plusieurs des nouvelles clés ne sont pas complètement\ \ncertifiées. Voulez vous certifier ces clés vous même (o/N)? " muttde: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\ Willst Du sie selbst beglaubigen? (j/N) " "\nDo you want to certify this key yourself (y/N)? " de: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) " es: "\nżQuieres certificar esta clave tú mismo (s/N)? " fr: "\nVoulez vous certifier cette clé vous même (o/N)? " muttde: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) " "undefined" de: "undefin." es: "sin definir" fr: "indéfinie" muttde: "undefin." "unknown" de: "unbekannt" es: "desconocida" fr: "inconnu" muttde: "unbekannt" "untrusted" de: "kein" es: "no fiable" fr: "non sûr" muttde: "kein" "marginal" de: "teilweise" es: "relativa" fr: "marginal" muttde: "teilweise" "complete" de: "voll" es: "completa" fr: "complète" muttde: "voll" "ultimate" de: "absolut" es: "fundamental" fr: "ultime" muttde: "absolut" "\nCan't open backup key ring file '%s'\n" de: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n" es: "\nNo se puede abrir la copia de seguridad del anillo '%s'\n" fr: "\nImpossible d'ouvrir le fichier de clé de sauvegarde '%s'\n" muttde: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n" "\n%d \"trust parameter(s)\" need to be changed.\n" de: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n" es: "\n%d \"parámetro(s) de confianza\" debe(n) cambiarse.\n" fr: "\n%d \"paramètre(s) de confiance\" doi(ven)t être changé(s).\n" muttde: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n" "Continue with '%s' (Y/n)? " de: "Weiter mit '%s'? (J/n) " es: "żSeguir con '%s' (S/n)? " fr: "Continuer avec '%s' (O/n)? " muttde: "Weiter mit '%s'? (J/n) " "\n%d \"trust parameter(s)\" changed.\n" de: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n" es: "\nCambiados %d \"parámetro(s) de confianza.\n" fr: "\n%d \"paramètre(s) de confiance\" changé(s).\n" muttde: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n" "Update public keyring '%s' (Y/n)? " de: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) " es: "żActualizar el anillo de claves públicas '%s' (S/n)? " fr: "Modifier le fichier de clés publiques '%s' (O/n)? " muttde: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) " "\nCan't open secret key ring file '%s'\n" de: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n" es: "\nNo puede abrirse el anillo de claves secretas '%s'\n" fr: "\nOuverture du fichier de clés secrètes '%s' impossible.\n" muttde: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n" "\nPass 1: Looking for the \"ultimately-trusted\" keys...\n" de: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n" es: "\nProceso 1: Búsqueda de las claves \"fundamentalmente fiables\" ...\n" fr: "\nPasse 1: Recherche des clés \"de confiance ultime\"...\n" muttde: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n" "\nPass 2: Tracing signature chains...\n" de: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n" es: "\nProceso 2: Seguimiento de las cadenas de firmas...\n" fr: "\nPasse 2: Vérification des chaines de signatures...\n" muttde: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n" "Keyring contains duplicate key: %s\n" de: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n" es: "El anillo contiene una clave duplicada: %s\n" fr: "Le fichier de clés contient des clés dupliquées: %s\n" muttde: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n" "No ultimately-trusted keys.\n" de: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n" es: "No hay ninguna clave fundamentalmente fiable.\n" fr: "Pas de clés de confiance ultime.\n" muttde: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n" " KeyID Trust Validity User ID\n" de: "\n ID Vertrauen Gültigk. Benutzer\n" es: " Clave Confianza Validez Identificador\n" fr: " IDcle Conf. Validité Utilisateur\n" muttde: "\n ID Vertrauen Gültigk. Benutzer\n" "(KeyID: %s)\n" de: "(Schlüssel-ID: %s)\n" es: "(Identificador: %s)\n" fr: "(IDclef: %s)\n" muttde: "(Schlüssel-ID: %s)\n" "\nAn \"axiomatic\" key is one which does not need certifying by\n\ anyone else. Usually this special status is reserved only for your\n\ own keys, which should also appear on your secret keyring. The owner\n\ of an axiomatic key (who is typically yourself) is \"ultimately trusted\"\n\ by you to certify any or all other keys.\n" de: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\ anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\ nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\ Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\ enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\ 'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\ Schlüssel Dir gegenüber zu beglaubigen.\n" es: "\nUna clave \"axiomatica\" es aquella que no necesita certificación.\n\ Normalmente este estado se reserva para tus propias claves, que deben\n\ aparecer también en tu anillo de claves secretas. El propietario de una\n\ clave axiomática (normalmente tú mismo) es \"fundamentalmente fiable\"\n\ para certificar cualquier clave.\n" fr: "\n Une clef 'axiomatique' est un clef qui n'a pas besoin d'être\n\ signé par personne. Habituellement ce statut est reservé à vos propres \n\ clefs, celles qui apparaissent dans votre tousseau de clefs secrètes. \n\ Le propriétaire de ces clefs (vous-même) possède votre 'confiance ultime'\n\ pour accorder un certificat à l'une au l'autre des autres clefs.\n" muttde: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\ anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\ nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\ Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\ enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\ 'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\ Schlüssel Dir gegenüber zu beglaubigen.\n" "\nKey for user ID \"%s\"\n\ is designated as an \"ultimately-trusted\" introducer, but the key\n\ does not appear in the secret keyring.\n\ Use this key as an ultimately-trusted introducer (y/N)? " de: "\nDer Schlüssel von \"%s\"\n\ soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\ sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\ als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) " es: "\nLa clave del usuario \"%s\"\n\ está designada como referencia \"fundamentalmente fiable\", pero la clave no aparece en el anillo de claves secretas.\n\ żSe utiliza como referencia fundamentalmente fiable (s/N)? " fr: "\nLa clef de l'utilisateur '%s' \n\ a été désigné comme ayant la 'confiance ulime', mais cette clef \n\ n'apparraît pas dans le trousseau des clefs secrètes. \n\ Voulez-vous utiliser cette clef comme ayant la 'confiance ultime'? (o/N) " muttde: "\nDer Schlüssel von \"%s\"\n\ soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\ sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\ als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) " "\n\007Cannot read from secret keyring.\n" de: "\n\007FEHLER beim Lesen des privaten Schlüsselbunds.\n" es: "\n\007No puede leerse el anillo de claves secretas.\n" fr: "\n\007Lecture du fichier de clés secrètes impossible.\n" mutt: "\nCannot read from secret keyring.\n" muttde: "\nFEHLER beim Lesen des privaten Schlüsselbunds.\n" "\n\007WARNING: Public key for user ID: \"%s\"\n\ does not match the corresponding key in the secret keyring.\n" de: "\n\007WARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\ mit dem Gegenstück im privaten Schlüsselbund überein.\n" es: "\n\007AVISO: La clave pública de \"%s\"\n\ no coincide con la clave correspondiente en el anillo de claves secretas.\n" fr: "\n\007ATTENTION: la clé publique pour l'utilisateur: \"%s\"\n\ ne correspond pas avec la clé respective dans le fichier de clés\ secrètes.\n" mutt: "\nWARNING: Public key for user ID: \"%s\"\n\ does not match the corresponding key in the secret keyring.\n" muttde: "\nWARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\ mit dem Gegenstück im privaten Schlüsselbund überein.\n" "This is a serious condition, indicating possible keyring tampering.\n" de: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n" es: "Es una situación grave: posible manipulación de anillos.\n" fr: "Ceci est une condition sérieuse, indiquant une possible manipulation\n\ du fichier de clés.\n" muttde: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n" "\nKey for user ID \"%s\"\n\ also appears in the secret key ring." de: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\ ist auch im privaten Schlüsselbund vorhanden." es: "\nLa clave del identificador \"%s\"\n\ también aparece en el anillo de claves secretas." fr: "\nLa clef pour l'utilisateur avec id: \"%s\"\n\ apparait egalement dans le repertoire des clefs secretes." muttde: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\ ist auch im privaten Schlüsselbund vorhanden." "\nUse this key as an ultimately-trusted introducer (y/N)? " de: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\ behandelt werden? (j/N) " es: "\nżSe utiliza esta clave como referencia fundamentalmente fiable (s/N)? " fr: "\nUtiliser cette clé comme introducteur de confiance ultime (o/N)? " muttde: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\ behandelt werden? (j/N) " "Public key for: \"%s\"\n\ is not present in the backup keyring '%s'.\n" de: "Der öffentliche Schlüssel von \"%s\"\n\ ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n" es: "La clave pública de: \"%s\"\n\ no se encuentra en la copia de seguridad del anillo '%s'.\n" fr: "La clé publique pour: \"%s\"\n\ n'est pas présente dans le fichier de clés de sauvegarde '%s'.\n" muttde: "Der öffentliche Schlüssel von \"%s\"\n\ ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n" "\n\007WARNING: Secret key for: \"%s\"\n\ does not match the key in the backup keyring '%s'.\n" de: "\n\007WARNUNG: Der private Schlüssel von \"%s\"\n\ entspricht nicht der Kopie im Schlüsselbund '%s'.\n" es: "\n\007AVISO: La clave secreta de: \"%s\"\n\ no coincide con la clave en la copia de seguridad del anillo '%s'.\n" fr: "\n\007ATTENTION: la clé secrète pour: \"%s\"\n\ ne correspond pas avec la clé dans le fichier de clés de sauvegarde.\n" mutt: "\nWARNING: Secret key for: \"%s\"\n\ does not match the key in the backup keyring '%s'.\n" muttde: "\nWARNUNG: Der private Schlüssel von \"%s\"\n\ entspricht nicht der Kopie im Schlüsselbund '%s'.\n" "\nMake a determination in your own mind whether this key actually\n\ belongs to the person whom you think it belongs to, based on available\n\ evidence. If you think it does, then based on your estimate of\n\ that person's integrity and competence in key management, answer\n\ the following question:\n" de: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\ Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\ Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\ folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\ Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n" es: "\nDecide tú mismo si esta clave realmente pertenece, según la\n\ evidencia a tu alcance, a la persona que crees. Si es así,\n\ contesta a la siguiente pregunta, basándote en tu estimación de la\n\ integridad de esa persona y de su conocimiento sobre gestión de claves:\n" fr: "\nDeterminez vous même si cette clé appartient vraiment à la personne\ \nà qui vous croyez qu'elle appartient, selon les informations disponibles.\ \nSi vous le croyez, alors selon votre estimation de l'intégrité de cette\ \npersonne et de sa compétence dans la gestion de clés, répondez à la\ \nquestion suivante:\n" muttde: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\ Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\ Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\ folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\ Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n" "\nWould you trust \"%s\"\n\ to act as an introducer and certify other people's public keys to you?\n\ (1=I don't know. 2=No. 3=Usually. 4=Yes, always.) ? " de: "\nWürdest Du \"%s\" als 'Einführer'\n\ und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\ (1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : " es: "\nżConfiarías en \"%s\"\n\ como referencia y para certificar ante ti otras claves públicas?\n\ (1=No sé. 2=No. 3=Normalmente. 4=Sí, siempre.) ? " fr: "\nAuriez vous confiance en \"%s\"\n\ pour servir d'introducteur et certifier pour vous les clés publiques d'autres\ \npersonnes? (1=Ne sais pas. 2=Non. 3=Généralement. 4=Oui, toujours.) ? " muttde: "\nWürdest Du \"%s\" als 'Einführer'\n\ und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\ (1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : " "This user is untrusted to certify other keys.\n" de: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" es: "Este usuario no es fiable para certificar otras claves.\n" fr: "Cet utilisateur n'est pas de confiance pour certifier d'autres clés.\n" muttde: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" "This user is generally trusted to certify other keys.\n" de: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" es: "Este usuario es de relativa confianza para certificar otras claves.\n" fr: "Cet utilisateur est généralement de confiance pour certifier d'autres\ clés.\n" muttde: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" "This user is completely trusted to certify other keys.\n" de: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" es: "Este usuario es de completa confianza para certificar otras claves.\n" fr: "Cet utilisateur est de confiance totale pour certifier d'autres clés.\n" muttde: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" "This axiomatic key is ultimately trusted to certify other keys.\n" de: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" es: "Esta clave axiomática es absolutamente fiable para certificar otras.\n" fr: "Cette clé axiomatique est de confiance ultime pour certifier\n\ d'autres clés\n" muttde: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\ um andere Schlüssel zu beglaubigen.\n" "This key/userID association is not certified.\n" de: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n" es: "Esta asociación clave/usuario no está certificada.\n" fr: "Cette association clé/utilisateur n'est pas certifiée.\n" muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n" "This key/userID association is marginally certified.\n" de: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n" es: "Esta asociación clave/usuario está relativamente certificada.\n" fr: "Cette association clé/utilisateur est marginalement certifiée.\n" muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n" "This key/userID association is fully certified.\n" de: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n" es: "Esta asociación clave/usuario está completamente certificada.\n" fr: "Cette association clé/utilisateur est complètement certifiée.\n" muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n" " Questionable certification from:\n " de: " Fragwürdige Beglaubigung von:\n " es: " Certificación cuestionable de:\n " fr: " Certificat de confiance douteux de:\n " muttde: " Fragwürdige Beglaubigung von:\n " " Untrusted certification from:\n " de: " Unglaubwürdige Beglaubigung von:\n " es: " Certificación no fiable de:\n " fr: " Certificat non sûr de:\n " muttde: " Unglaubwürdige Beglaubigung von:\n " " Generally trusted certification from:\n " de: " Glaubwürdige Beglaubigung von:\n " es: " Certificación relativamente fiable de:\n " fr: " Certificat de confiance relatif de:\n " muttde: " Glaubwürdige Beglaubigung von:\n " " Completely trusted certification from:\n " de: " Voll glaubwürdige Beglaubigung von:\n " es: " Certificación completamente fiable de:\n " fr: " Certificat de confiance complet de:\n " muttde: " Voll glaubwürdige Beglaubigung von:\n " " Axiomatically trusted certification from:\n " de: " Definitionsgemäß glaubwürdige Beglaubigung von:\n " es: " Certificación axiomáticamente fiable de:\n " fr: " Certificat de confiance par axiome de:\n " muttde: " Definitionsgemäß glaubwürdige Beglaubigung von:\n " "\nKey for user ID: %s\n" de: "\nSchlüssel für Benutzer-ID \"%s\",\n" es: "\nClave del usuario: %s\n" fr: "\nClé pour le nom d'utilisateur: %s\n" muttde: "\nSchlüssel für Benutzer-ID \"%s\",\n" "%d-bit key, key ID %s, created %s\n" de: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n" es: "Clave de %d bits, con identificador %s, creada el %\n" fr: "Clef de %d bits. Id clef %s créé %s\n" muttde: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n" "Bad key format.\n" de: "Falsches Schlüssel-Format.\n" es: "Formato incorrecto de clave.\n" fr: "Mauvais format de clé\n" muttde: "Falsches Schlüssel-Format.\n" "Unrecognized version.\n" de: "Unbekannte Version.\n" es: "Versión no reconocida.\n" fr: "Version non reconnue.\n" muttde: "Unbekannte Version.\n" "Key is disabled.\n" de: "Der Schlüssel ist gesperrt.\n" es: "La clave está desactivada.\n" fr: "La clé est inactivée.\n" muttde: "Der Schlüssel ist gesperrt.\n" "Also known as: %s\n" de: "Alternative Benutzer-ID: %s\n" es: "También conocido como: %s\n" fr: "Egalement connu(e) en tant que: %s\n" muttde: "Alternative Benutzer-ID: %s\n" " Certified by: " de: " Beglaubigt von: " es: " Certificado por: " fr: " Certifiée par: " muttde: " Beglaubigt von: " "\nWarning: keyid %4d/%s %s has no user id!\n" de: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n" es: "\nAdvertencia: la clave %4d/%s %s no tiene identificador\n" fr: "\nAttention: IDclef %4d/%s %s n'est pas associé à un utilisateur!\n" muttde: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n" "Updated keyID: 0x%s\n" de: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n" es: "Identificador actualizado: 0x%s\n" fr: "Mise à jour de la clef ID: 0x%s\n" muttde: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n" "\n\007Unable to create key file '%s'.\n" de: "\n\007FEHLER beim Erzeugen der Schlüsseldatei '%s'.\n" es: "\n\007No puede crearse el fichero de claves '%s'.\n" fr: "\n\007Impossible de créer le fichier de clés '%s'.\n" mutt: "\nUnable to create key file '%s'.\n" muttde: "\nFEHLER beim Erzeugen der Schlüsseldatei '%s'.\n" "\n\007Keyring file '%s' does not exist. " de: "\n\007Der Schlüsselbund '%s' existiert nicht.\n" es: "\n\007El anillo '%s' no existe. " fr: "\n\007Le fichier de clés '%s' n'existe pas. " mutt: "\nKeyring file '%s' does not exist. " muttde: "\nDer Schlüsselbund '%s' existiert nicht.\n" "\n\007Sorry, this key has been revoked by its owner.\n" de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" es: "\n\007Esa clave ha sido revocada por su propietario.\n" fr: "\n\007Désolé, cette clé a été révoquée par son propriétaire.\n" mutt: "\nSorry, this key has been revoked by its owner.\n" muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" "\nKey for user ID \"%s\"\n\ has been revoked. You cannot use this key.\n" de: "\nDer Schlüssel von \"%s\"\n\ wurde zurückgezogen und kann nicht verwendet werden.\n" es: "\nLa clave del usuario \"%s\"\n\ ha sido revocada. No puede utilizarse.\n" fr: "\nLa clé pour l'utilisateur \"%s\"\n\ a été révoquée. Vous ne pouvez utiliser cette clé.\n" muttde: "\nDer Schlüssel von \"%s\"\n\ wurde zurückgezogen und kann nicht verwendet werden.\n" "\n\007Key matching expected Key ID %s not found in file '%s'.\n" de: "\n\007Der zur erwarteten Schlüssel-ID %s passende Schlüssel\n\ ist nicht in der Datei '%s' enthalten.\n" es: "\n\007Se esperaba una clave %s que no se encuentra en '%s'.\n" fr: "\n\007Clé correspondant à l'identificateur %s non trouvée\ \ndans le fichier '%s'.\n" mutt: "\nKey matching expected Key ID %s not found in file \n\ '%s'.\n" muttde: "\nDer zur erwarteten Schlüssel-ID %s passende Schlüssel\n\ ist nicht in der Datei '%s' enthalten.\n" "\n\007Key matching userid '%s' not found in file '%s'.\n" de: "\n\007Der zur Benutzer-ID \"%s\" passende Schlüssel\n\ ist nicht in der Datei '%s' enthalten.\n" es: "\n\007La clave del usuario '%s' no se encuentra en el fichero '%s'.\n" fr: "\n\007Clé correspondant à l'utilisateur '%s' introuvable\n\ dans le fichier '%s'.\n" mutt: "\nKey matching userid '%s' not found in file '%s'.\n" muttde: "\nDer zur Benutzer-ID \"%s\" passende Schlüssel\n\ ist nicht in der Datei '%s' enthalten.\n" "Enter secret key filename: " de: "Dateiname des privaten Schlüssels: " es: "Introduzca el nombre del anillo de claves secretas: " fr: "Entrez le nom du fichier de clés secrètes: " muttde: "Dateiname des privaten Schlüssels: " "Enter public key filename: " de: "Dateiname des öffentlichen Schlüssels: " es: "Introduzca el nombre del anillo de claves públicas: " fr: "Entrez le nom du fichier de clés publiques: " muttde: "Dateiname des öffentlichen Schlüssels: " "\nYou need a pass phrase to unlock your RSA secret key. " de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen." es: "\nSe necesita la contraseña para abrir la clave secreta RSA. " fr: "\nVous devez avoir un mot de passe pour utiliser votre clé secrète RSA." muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen." "No passphrase; secret key unavailable.\n" de: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n" es: "\nSin contraseña; la clave secreta no está disponible.\n" fr: "\nSans la phrase secrete, pas de clef secrete disponible.\n" muttde: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n" "\nAdvisory warning: This RSA secret key is not protected by a \ passphrase.\n" de: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n" es: "\nAdvertencia: Esta clave secreta RSA no tiene contraseña.\n" fr: "\nAttention: cette clé secrète RSA n'est pas protégée par un mot \ de passe" muttde: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n" "Pass phrase is good. " de: "\nDas Mantra ist richtig.\n" es: "La contraseña es correcta. " fr: "Le mot de passe est correct. " muttde: "\nDas Mantra ist richtig.\n" "\n\007Key file '%s' is not a secret key file.\n" de: "\n\007Die Datei '%s' ist keine private Schlüsseldatei.\n" es: "\n\007El fichero '%s' no tiene claves secretas.\n" fr: "\n\007Le fichier de clé '%s' n'est pas un fichier de clés secrètes.\n" mutt: "\nKey file '%s' is not a secret key file.\n" muttde: "\nDie Datei '%s' ist keine private Schlüsseldatei.\n" "Key fingerprint =" de: "Fingerabdruck des Schlüssels:" es: "Huella dactilar =" fr: "Empreinte de la clé =" muttde: "Fingerabdruck des Schlüssels:" "\nKey ring: '%s'" de: "\nSchlüsselbund '%s':\n" es: "\nAnillo de claves: '%s',\n" fr: "\nFichier de clé: '%s'" muttde: "\nSchlüsselbund '%s':\n" ", looking for user ID \"%s\"." de: "Suche nach Benutzer-ID \"%s\":\n" es: "buscando el usuario \"%s\"\n" fr: ", recherche du nom d'utilisateur \"%s\"." muttde: "Suche nach Benutzer-ID \"%s\":\n" "1 matching key found.\n" de: "Es wurde ein passender Schlüssel gefunden.\n" es: "Se ha encontrado una clave.\n" fr: "1 clef trouvée.\n" muttde: "Es wurde ein passender Schlüssel gefunden.\n" "%d matching keys found.\n" de: "Es wurden %d passende Schlüssel gefunden.\n" es: "Se han encontrado %d claves.\n" fr: "%d clefs trouvées. \n" muttde: "Es wurden %d passende Schlüssel gefunden.\n" "\nChecking signatures...\n" de: "\nÜberprüfung der Unterschriften...\n" es: "\nComprobando las firmas...\n" fr: "\nVérification des signatures...\n" muttde: "\nÜberprüfung der Unterschriften...\n" "*** KEY REVOKED ***\n" de: "*** ZURÜCKGEZOGEN ***\n" es: "*** CLAVE REVOCADA ***\n" fr: "*** CLEF REVOQUÉE ***\n" muttde: "*** ZURÜCKGEZOGEN ***\n" "(Unknown signator, can't be checked)" de: "(Unterschreibender unbekannt, keine Prüfung)" es: "(Firmante desconocido, no puede comprobarse)" fr: "(Signataire inconnu, ne peut être vérifié)" muttde: "(Unterschreibender unbekannt, keine Prüfung)" "(Key too long, can't be checked)" de: "(Schlüssel zu lang, keine Prüfung)" es: "(Clave demasiado larga, no puede comprobarse)" fr: "(Clef trop longue, ne peut etre verifiée)" muttde: "(Schlüssel zu lang, keine Prüfung)" "(Malformed or obsolete signature format)" de: "(Unterschriftsformat fehlerhaft oder veraltet)" es: "(Formato de firma obsoleto o incorrecto)" fr: "(Signature malformee ou obsolete)" muttde: "(Unterschriftsformat fehlerhaft oder veraltet)" "(Unknown public-key algorithm)" de: "(unbek. Algorithmus des öffentl. Schlüssels)" es: "(Algoritmo desconocido de clave pública)" fr: "(Algorithme de clef publique inconnu)" muttde: "(unbek. Algorithmus des öffentl. Schlüssels)" "(Unknown hash algorithm)" de: "(unbekannter Prüfsummen-Algorithmus)" es: "(Algoritmo desconocido de distribución [hash])" fr: "(Algorithme de hash inconnu)" muttde: "(unbekannter Prüfsummen-Algorithmus)" "(Unknown signature packet version)" de: "(unbekannte Version des Unterschriftsblocks)" es: "(Versión desconocida de firma)" fr: "Version de paquet de signature inconnue" muttde: "(unbekannte Version des Unterschriftsblocks)" "(Malformed signature)" de: "(fehlerhafte Unterschrift)" es: "(Firma mal formada)" fr: "(Signature deformée)" muttde: "(fehlerhafte Unterschrift)" "(Corrupted signature packet)" de: "(beschädigter Unterschriftsblock)" es: "(Firma dañada)" fr: "(Signature corrompue)" muttde: "(beschädigter Unterschriftsblock)" "\007**** BAD SIGNATURE! ****" de: "\007**** FALSCHE UNTERSCHRIFT! ****" es: "\007**** FIRMA INCORRECTA ****" fr: "\007**** MAUVAISE SIGNATURE! ****" mutt: "**** BAD SIGNATURE! ****" muttde: "**** FALSCHE UNTERSCHRIFT! ****" "Remove bad signatures (Y/n)? " de: "Falsche Unterschriften löschen? (J/n) " es: "żSuprimir las firmas incorrectas (S/n)? " fr: "Supprimer les mauvaises signatures (O/n)? " muttde: "Falsche Unterschriften löschen? (J/n) " "\nRemoving signatures from userid '%s' in key ring '%s'\n" de: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n" es: "\nSuprimiendo las firmas del usuario '%s' del\n\ anillo de claves '%s'\n" fr: "\nSuppression des signatures de l'utilisateur '%s'\n\ dans le fichier de clés '%s'\n" muttde: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n" "\n\007Key not found in key ring '%s'.\n" de: "\n\007Der Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n" es: "\n\007No se ha encontrado la clave en el anillo '%s'.\n" fr: "\n\007Clé introuvable dans le fichier de clés '%s'.\n" mutt: "\nKey not found in key ring '%s'.\n" muttde: "\nDer Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n" "\nKey has no signatures to remove.\n" de: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n" es: "\nLa clave no tiene ninguna firma por borrar.\n" fr: "\nLa clé n'a pas de signatures à supprimer.\n" muttde: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n" "\nKey has %d signature(s):\n" de: "\nDer Schlüssel trägt %d Unterschrift(en):\n" es: "\nLa clave tiene %d firma(s):\n" fr: "\nLa clé a %d signature(s):\n" muttde: "\nDer Schlüssel trägt %d Unterschrift(en):\n" "(Unknown signator, can't be checked)\n" de: "(Unterschreibender unbekannt, keine Prüfung)\n" es: "(Firmante desconocido, no puede comprobarse)\n" fr: "(Signataire inconnu, ne peut être vérifié)\n" muttde: "(Unterschreibender unbekannt, keine Prüfung)\n" "Remove this signature (y/N)? " de: "Diese Unterschrift löschen? (j/N) " es: "\277Suprimir esta firma (s/N)? " fr: "Suppression de cette signature (o/N)? " muttde: "Diese Unterschrift löschen? (j/N) " "\nNo key signatures removed.\n" de: "\nKeine Unterschriften gelöscht.\n" es: "\nNo se ha suprimido ninguna firma.\n" fr: "\nPas de supression de signature de clé.\n" muttde: "\nKeine Unterschriften gelöscht.\n" "\n%d key signature(s) removed.\n" de: "\n%d Unterschrift(en) gelöscht.\n" es: "\nSuprimidas %d firma(s) de clave.\n" fr: "\n%d signature(s) de clé supprimée(s).\n" muttde: "\n%d Unterschrift(en) gelöscht.\n" "\nRemoving from key ring: '%s'" de: "\nLöschen aus Schlüsselbund '%s'\n" es: "\nSuprimiendo del anillo: '%s'" fr: "\nSuppression du ficher de clés: '%s'" muttde: "\nLöschen aus Schlüsselbund '%s'\n" ", userid \"%s\".\n" de: "Benutzer-ID \"%s\".\n" es: ", identificador \"%s\".\n" fr: ", utilisateur \"%s\".\n" muttde: "Benutzer-ID \"%s\".\n" "\nKey has more than one user ID.\n\ Do you want to remove the whole key (y/N)? " de: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\ Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) " es: "\nLa clave tiene más de un identificador de usuario.\n\ żQuieres suprimirla por completo (s/N)? " fr: "\nLa clé a plus d'un nom d'utilisateur.\n\ Voulez vous supprimier toute la clé (o/N)? " muttde: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\ Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) " "\nNo more user ID's\n" de: "\nKeine weiteren Benutzer-IDs.\n" es: "\nNo hay más identificadores de usuario\n" fr: "\nPlus de noms d'utilisateur\n" muttde: "\nKeine weiteren Benutzer-IDs.\n" "Remove \"%s\" (y/N)? " de: "\"%s\" löschen? (j/N) " es: "żSuprimir \"%s\" (s/N)? " fr: "Supprimer \"%s\" (o/N)? " muttde: "\"%s\" löschen? (j/N) " "\nAre you sure you want this key removed (y/N)? " de: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) " es: "\nżEstás seguro de querer suprimir esta clave (s/N)? " fr: "\nEtes vous sûr(e) de vouloir supprimer cette clé (o/N)? " muttde: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) " "\nUser ID removed from key ring.\n" de: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n" es: "\nIdentificador suprimido del anillo.\n" fr: "\nNom d'utilisateur supprimé du fichier de clés.\n" muttde: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n" "\nKey removed from key ring.\n" de: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n" es: "\nClave suprimida del anillo.\n" fr: "\nClé supprimée du fichier de clés.\n" muttde: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n" "\nKey or user ID is also present in secret keyring.\n\ Do you also want to remove it from the secret keyring (y/N)? " de: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\ enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) " es: "\nEl identificador se encuentra además en el anillo de\n\ claves secretas. żQuieres borrarlo también de ahí (s/N)? " fr: "\nLa clé ou le nom d'utilisateur est aussi dans le fichier de clés\n\ secrètes. Voulez vous l'enlever du ficher de clés secrètes (o/N)? " muttde: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\ enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) " "\nExtracting from key ring: '%s'" de: "\nExtrahieren aus dem Schlüsselbund: '%s'\n" es: "\nExtrayendo del anillo de claves: '%s'" fr: "\nExtraction du fichier de clés: '%s'" muttde: "\nExtrahieren aus dem Schlüsselbund: '%s'\n" "Extract the above key into which file?" de: "Dateiname dieses extrahierten Schlüssels?" es: "żEn qué fichero se extrae la clave anterior?" fr: "Extraire la clef suivant de quel fichier?" muttde: "Dateiname dieses extrahierten Schlüssels?" "Key ID %s is already included in key ring '%s'.\n" de: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n" es: "La clave %s ya está en el anillo '%s'.\n" fr: "L'identificateur de clé %s est déjà présent\ \ndans le fichier de clés '%s'.\n" muttde: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n" "\nKey extracted to file '%s'.\n" de: "\nSchlüssel extrahiert in Datei '%s'.\n" es: "\nClave extraída en el fichero '%s'.\n" fr: "\nClé mise dans le fichier '%s'.\n" muttde: "\nSchlüssel extrahiert in Datei '%s'.\n" "\nThis operation may not be performed on a secret keyring.\n\ Defaulting to public keyring." de: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\ werden. Der öffentliche Schlüsselbund wird versucht." es: "\nEsta operacion no puede realizarse sobre el anillo de \ claves secretas.\nSe pasa al anillo de claves públicas." fr: "\nCette operation ne peut pas être effectuée sur un fichier de clés\n\ secrètes. Le fichier de clés publiques sera utilisé à la place." muttde: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\ werden. Der öffentliche Schlüsselbund wird versucht." "\nEditing userid \"%s\" in key ring: '%s'.\n" de: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n" es: "\nModificación del identificador \"%s\"\n\ en el anillo: '%s'.\n" fr: "\nModification du nom d'utilsateur \"%s\"\n\ dans le fichier de clé: '%s'.\n" muttde: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n" "\nCan't open public key ring file '%s'\n" de: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n" es: "\nNo puede abrirse el anillo de claves públicas '%s'\n" fr: "\nOuverture du fichier de clés publiques '%s' impossible.\n" muttde: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n" "\n\007File '%s' is not a public keyring.\n" de: "\n\007Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" es: "\n\007El fichero '%s' no es un anillo de claves públicas.\n" fr: "\n\007Le fichier '%s' n'est pas un fichier de clés publiques.\n" mutt: "\nFile '%s' is not a public keyring.\n" muttde: "\nDie Datei '%s' ist kein öffentlicher Schlüsselbund.\n" "\n\007This key has been revoked by its owner.\n" de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" es: "\n\007Esta clave ha sido revocada por su propietario.\n" fr: "\n\007Cette clé a été révoquée par son propriétaire.\n" mutt: "\nThis key has been revoked by its owner.\n" muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" "\nNo secret key available. Editing public key trust parameter.\n" de: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\ öffentlichen Schlüssels werden bearbeitet.\n" es: "\nNo hay clave secreta disponible. Modificando el parámetro \ de confianza\n\ de la clave pública.\n" fr: "\nPas de clé secrète disponible. Modification du paramètre de\n\ confiance de la clé publique.\n" muttde: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\ öffentlichen Schlüssels werden bearbeitet.\n" "Current trust for this key's owner is: %s\n" de: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n" es: "La confianza actual en el propietario de esta clave es: %s\n" fr: "Le niveau de confiance courant pour le propriétaire de\n\ cette clé est: %s\n" muttde: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n" "Public key ring updated.\n" de: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n" es: "Actualizado el anillo de claves públicas.\n" fr: "Fichier de clés publiques modifié...\n" muttde: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n" "\nCurrent user ID: %s" de: "\nAktuelle Benutzer-ID: %s" es: "\nIdentificador actual de usuario: %s" fr: "\nNom d'utilisateur courant: %s" muttde: "\nAktuelle Benutzer-ID: %s" "\nDo you want to add a new user ID (y/N)? " de: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) " es: "\nżQuieres añadir un nuevo identificador de usuario (s/N)? " fr: "\nVoulez-vous ajouter ce nouvel ID (o/N)?" muttde: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) " "\nEnter the new user ID: " de: "\nGib die neue Benutzer-ID ein: " es: "\nIntroduzca el nuevo identificador: " fr: "\nEntrez le nouveau nom d'utilisateur: " muttde: "\nGib die neue Benutzer-ID ein: " "\nMake this user ID the primary user ID for this key (y/N)? " de: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) " es: "\nżSe establece este identificador como primario para esta clave (s/N)? " fr: "\nEtablir ce nom d'utilisateur comme nom principal pour cette clé \ (o/N)? " muttde: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) " "\nDo you want to change your pass phrase (y/N)? " de: "\nWillst Du Dein Mantra ändern? (j/N) " es: "\nżQuieres cambiar la contraseña (s/N)? " fr: "\nVoulez vous changer votre mot de passe (o/N)? " muttde: "\nWillst Du Dein Mantra ändern? (j/N) " "(No changes will be made.)\n" de: "\n(Es werden keine Änderungen vorgenommen.)\n" es: "(No se efectuará ningún cambio.)\n" fr: "(Aucun changement ne sera effectué.)\n" muttde: "\n(Es werden keine Änderungen vorgenommen.)\n" "\n\007Unable to update secret key ring.\n" de: "\n\007FEHLER beim Aktualisieren des privaten Schlüsselbunds.\n" es: "\n\007No puede actualizarse el anillo de claves secretas.\n" fr: "\n\007Impossible de modifier le fichier de clés secrètes.\n" mutt: "\nUnable to update secret key ring.\n" muttde: "\nFEHLER beim Aktualisieren des privaten Schlüsselbunds.\n" "\nSecret key ring updated...\n" de: "\n\nDer private Schlüsselbund wurde aktualisiert.\n" es: "\nActualizado el anillo de claves secretas ...\n" fr: "\nFichier de clés secrètes modifié...\n" muttde: "\n\nDer private Schlüsselbund wurde aktualisiert.\n" "\n\007Unable to update public key ring.\n" de: "\n\007FEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n" es: "\n\007No puede actualizarse el anillo de claves públicas.\n" fr: "\n\007Impossible de modifier le fichier de clés publiques.\n" mutt: "\nUnable to update public key ring.\n" muttde: "\nFEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n" "(No need to update public key ring)\n" de: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n" es: "(No es necesario actualizar el anillo de claves públicas)\n" fr: "(Pas besoin de modifier le fichier de clés publiques)\n" muttde: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n" "\nDo you want to permanently revoke your public key\n\ by issuing a secret key compromise certificate\n\ for \"%s\" (y/N)? " de: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\ einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) " es: "\nżQuieres revocar permanentemente tu clave pública\n\ emitiendo un certificado de compromiso de clave secreta\n\ para \"%s\" (s/N)? " fr: "\nVoulez vous révoquer de façon permanente votre clé publique\n\ en émettant un certificat de compromission de clé secrète\n\ pour \"%s\" (o/N)? " muttde: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\ einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) " "You can only disable keys on your public keyring.\n" de: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n" es: "Sólo puedes desactivar claves en el anillo de claves públicas.\n" fr: "Vous ne pouvez inactiver des clés que sur votre fichier de clés\ \npubliques.\n" muttde: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n" "\nKey is already disabled.\n\ Do you want to enable this key again (y/N)? " de: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) " es: "\nLa clave ya está desactivada.\n\ żQuieres activarla otra vez (s/N)? " fr: "\nLa clé est déjà inactivée.\n\ Voulez vous réactiver cette clé (o/N)? " muttde: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) " "\nDisable this key (y/N)? " de: "\nSoll dieser Schlüssel gesperrt werden? (j/N) " es: "\nżDesactivar esta clave (s/N)? " fr: "Désactiver cette clé (o/N)? " muttde: "\nSoll dieser Schlüssel gesperrt werden? (j/N) " "Pick your RSA key size:\n\ 1) 1024 bits- User grade, fast but less secure\n\ 2) 1535 bits- Regional CA grade, medium speed, good security\n\ 3) 2048 bits- Root CA grade, slow, high security\n\ Choose 1, 2, or 3, or enter desired number of bits (384...8192): " de: "Wähle die Länge Deines RSA-Schlüssels aus:\ \n 1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\ \n 2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\ \n 3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\ \nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): " es: "Elija un tamaño de clave RSA:\n\ 1) 1024 bits- Nivel comercial bajo, r\0341pido pero menos seguro\n\ 2) 1535 bits- Nivel comercial alto, velocidad media con buena seguridad\n\ 3) 2048 bits- Nivel \"militar\", lento con alta seguridad\n\ Escoge 1, 2, 3, o el número requerido de bits (384...8192): " fr: "Choisissez la taille de votre clef RSA:\n\ 1) 1024 bits- Niveau de base, rapide mais moins securitaire\n\ 2) 1535 bits- Niveau de securité eleve - vitesse moyenne \n\ 3) 2048 bits- Pour les militaires, les diplomates... les paranoiaques \n\ Choisissez 1, 2, ou 3, ou entrez le nombre de bits desires (384...8192): " muttde: "Wähle die Länge Deines RSA-Schlüssels aus:\ \n 1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\ \n 2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\ \n 3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\ \nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): " "Generating an RSA key with a %d-bit modulus.\n" de: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n" es: "Generando una clave RSA con módulo de %d bits.\n" fr: "Generation d'une clé RSA avec un module de %d bits.\n" muttde: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n" "\nYou need a user ID for your public key. The desired form for this\n\ user ID is your name, followed by your E-mail address enclosed in\n\ , if you have an E-mail address.\n\ Form: Real Name (comment) (options)\n\ Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ Enter a user ID for your public key: \n" de: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\ Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\ in , falls Du per E-Mail erreichbar bist.\n\ Format: Bürgerlicher Name (Kommentar) (Optionen)\n\ Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n" es: "\nNecesitas un identificador para tu clave pública. El formato preferido\n\ consiste en tu nombre, seguido de tu dirección de correo electrónico,\n\ si tienes, entre <ángulos>.\n\ Form: Real Name (comment) (options)\n\ Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ Introduce un identificador de usuario para tu clave pública: \n" fr: "\nIl vous faut un nom d'utilisateur pour votre clé publique. La forme\n\ désirée pour ce nom d'utilisateur est votre nom, suivi de votre addresse\n\ de courrier électronique entre , si vous en avez une.\n\ Form: Real Name (comment) (options)\n\ Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ Entrez un nom d'utilisateur pour votre clé publique\n\ (votre nom): " muttde: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\ Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\ in , falls Du per E-Mail erreichbar bist.\n\ Format: Bürgerlicher Name (Kommentar) (Optionen)\n\ Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n" "Generating RSA key-pair with UserID \"%s\".\n" de: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n" es: "Generando el par de claves RSA con identificador \"%s\".\n" fr: "Génération d'une paire de clefs RSA de l'utilisateur '%s'.\n" muttde: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n" "\nYou need a pass phrase to protect your RSA secret key.\n\ Your pass phrase can be any sentence or phrase and may have many\n\ words, spaces, punctuation, or any other printable characters.\n" de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\ Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\ vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n" es: "\nNecesitas una contraseña para proteger tu clave secreta RSA.\n\ Puede ser cualquier expresión formada por varias palabras, espacios,\n\ signos de puntuación o cualquier otro carácter imprimible.\n" fr: "\nVous devez avoir un mot de passe pour protéger votre clé RSA \n\ secrète. Votre mot de passe peut être n'importe quelle phrase ou portion\n\ de phrase et peut avoir plusieurs mots, espaces, caractères de ponctuation\n\ ou tout autre caractère imprimable.\n" muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\ Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\ vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n" "\nNote that key generation is a lengthy process.\n" de: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n" es: "\nTen en cuenta que la generación de claves es un proceso lento.\n" fr: "\nNotez que la génération de clé est une procédure lente.\n" muttde: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n" "Key generation stopped at user request.\n" de: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n" es: "Generación de claves interrumpida a petición del usuario.\n" fr: "Le génération de la clef a été stoppée à la demande de l'utilisateur.\n" muttde: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n" "\n\007Keygen failed!\n" de: "\n\007FEHLER bei der Schlüssel-Erzeugung!\n" es: "\n\007Error en la generación de claves\n" fr: "\n\007Generation de clé non réussie!\n" mutt: "\nKeygen failed!\n" muttde: "\nFEHLER bei der Schlüssel-Erzeugung!\n" "Key ID %s\n" de: "Schlüssel-ID: %s\n" es: "Identificador de clave %s\n" fr: "Identificateur de clé %s\n" muttde: "Schlüssel-ID: %s\n" "Display secret components (y/N)?" de: "Geheime Bestandteile anzeigen? (j/N) " es: "żMostrar los componentes secretos (s/N)?" fr: "Affichier les composantes secretes (o/N)?" muttde: "Geheime Bestandteile anzeigen? (j/N) " "\007Key generation completed.\n" de: "\n\007Die Erzeugung des Schlüssels ist beendet.\n" es: "\007Finalizada la generación de claves.\n" fr: "\007Génération de clé terminée.\n" mutt: "Key generation completed.\n" muttde: "\nDie Erzeugung des Schlüssels ist beendet.\n" "Type Bits/KeyID Date User ID\n" de: "Typ Bits/KeyID Datum NutzerID\n" es: "Tipo Bits/Clave Fecha Identificador\n" fr: "Type Bits/Clef Date ID utilisateur\n" muttde: "Typ Bits/KeyID Datum NutzerID\n" "\n\007File '%s' is not a text file; cannot display.\n" de: "\n\007Die Datei '%s' ist keine Textdatei\n\ und kann deshalb nicht angezeigt werden!\n" es: "\n\007El fichero '%s' no es de texto; no puede mostrarse.\n" fr: "\n\007Le fichier '%s' n'est pas un fichier de texte et ne peut être \ visualisé\n" mutt: "\nFile '%s' is not a text file; cannot display.\n" muttde: "\nDie Datei '%s' ist keine Textdatei\n\ und kann deshalb nicht angezeigt werden!\n" "\nDone...hit any key\r" de: "\nFertig... Bitte drücke eine Taste.\r" es: "\nFinalizado...pulse cualquier tecla\r" fr: "\nTerminé... appuyez sur n'importe quelle touche \r" muttde: "\nFertig... Bitte drücke eine Taste.\r" "-- More -- Space: next screen, Enter: next line\ , 'B': back, 'Q': quit --\r" de: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" es: "-- más -- espacio: otra pantalla, enter: otra línea,\ B: atrás, Q: salir\r" fr: "- Plus - Espace: procahin écran , Chariot: prochaine ligne\ , 'B': retour, 'Q': quitter - \r" muttde: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" "More -- %d%% -- Space: next screen, Enter: next line\ , 'B': back, 'Q': quit --\r" de: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" es: "Más -- %d%% -- espacio: otra pantalla, enter: otra línea,\ B: atrás, Q: salir\r" fr: "- Plus - %D%% - Espace: procahin écran , Chariot: prochaine ligne\ , 'B': retour, 'Q': quitter - \r" muttde: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" "\nEnter pass phrase: " de: "\nGib das Mantra ein: " es: "\nIntroduce la contraseña: " fr: "\nEntrez votre mot de passe: " muttde: "\nGib das Mantra ein: " "\nEnter same pass phrase again: " de: "\nWiederhole das Mantra: " es: "\nEscríbela otra vez: " fr: "\nEntrez le même mot de passe de nouveau: " muttde: "\nWiederhole das Mantra: " "\n\007Error: Pass phrases were different. Try again." de: "\n\007FEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal." es: "\n\007Error: Las contraseñas son diferentes. Prueba otra vez." fr: "\n\007Erreur: Les mots de passe étaient différents. Essayez encore." mutt: "\nError: Pass phrases were different. Try again." muttde: "\nFEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal." "\nStopped at user request\n" de: "\nAbbruch durch Benutzer\n" es: "\nInterrupción por petición del usuario\n" fr: "\nArrêt par demande de l'utilisateur\n" muttde: "\nAbbruch durch Benutzer\n" "Pretty Good Privacy(tm) %s - Public-key encryption for the masses.\n" de: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n" es: "Pretty Good Privacy(tm) %s - Criptografía de clave pública para todos.\n" fr: "Pretty Good Privacy(tm) %s - Cryptographie à clé publique pour tous.\n" muttde: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n" "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." de: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." es: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." fr: "( c ) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. " muttde: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." "Export of this software may be restricted by the U.S. government.\n" de: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n" es: "La exportación de este programa puede estar restringida por\n\ el gobierno de los EE.UU." fr: "L'exportation de ce logiciel peut être restreint par le \ gouvernement des États-Unis" muttde: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n" "International version - not for use in the USA. Does not use RSAREF.\n" de: "Internationale Version - nicht in den USA verwenden! Benutzt nicht RSAREF.\n" es: "Versión internacional - no apta para los EE.UU. No utiliza RSAREF.\n" fr: "Version internationale - ne pas utiliser aux Etats-Unis. N'utilise pas le RSAREF.\n" muttde: "Internationale Version - nicht in den USA verwenden! Benutzt nicht RSAREF.\n" "Current time: %s\n" de: "Aktuelles Datum und Uhrzeit: %s\n" es: "Hora actual: %s\n" fr: "Heure actuelle: %s\n" muttde: "Aktuelles Datum und Uhrzeit: %s\n" "\007No configuration file found.\n" de: "\007Keine Konfigurationsdatei gefunden!\n" es: "\007No se encuentra el fichero de configuración.\n" fr: "\007Fichier de configuration introuvable.\n" mutt: "No configuration file found.\n" muttde: "Keine Konfigurationsdatei gefunden!\n" "\007WARNING: Environmental variable TZ is not \ defined, so GMT timestamps\n\ may be wrong. See the PGP User's Guide to properly define TZ\n\ in AUTOEXEC.BAT file.\n" de: "\007WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\ die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\ über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n" es: "\007ADVERTENCIA: La variable TZ no está definida, por lo que\n\ los sellos de fecha GMT pueden estar equivocados. Consulta la Guía del\n\ usuario de PGP para definir adecuadamente TZ en AUTOEXEC.BAT.\n" fr: "\007ATTENTION: La variable d'environnement TZ n'est pas définie, les\n\ temps GMT peuvent donc êtres faussés. Voir le guide de l'utilisateur PGP pour\n\ définir correctement TZ dans le fichier AUTOEXEC.BAT.\n" mutt: "WARNING: Environmental variable TZ is not \ defined, so GMT timestamps\n\ may be wrong. See the PGP User's Guide to properly define TZ\n\ in AUTOEXEC.BAT file.\n" muttde: "WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\ die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\ über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n" "\nFile %s wiped and deleted. " de: "\nDie Datei '%s' wurde überschrieben und gelöscht." es: "\nEl fichero %s ha sido borrado y destruido. " fr: "\nFichier %s effacé et détruit. " muttde: "\nDie Datei '%s' wurde überschrieben und gelöscht." "\n\007Error: Can't wipe out file '%s' - read only, maybe?\n" de: "\n\007FEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\ Ist sie vielleicht schreibgeschützt?\n" es: "\n\007Error: No puede eliminarse el fichero '%s' - \ quizá sea sólo de lectura\n" fr: "\n\007Erreur: Incapable de détruire le fichier '%s' - lectu4re seulement peut être?\n" mutt: "\nError: Can't wipe out file '%s' - read only, maybe?\n" muttde: "\nFEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\ Ist sie vielleicht schreibgeschützt?\n" "\n\007File '%s' does not exist.\n" de: "\n\007Die Datei '%s' existiert nicht!\n" es: "\n\007El fichero '%s' no existe.\n" fr: "Le fichier '%s' n'existe pas. \n" mutt: "\nFile '%s' does not exist.\n" muttde: "\nDie Datei '%s' existiert nicht!\n" "\nFor details on licensing and distribution, see the PGP User's Guide.\ \nFor other cryptography products and custom development services, contact:\ \nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, \ phone +1 303 541-0140\n" de: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\ \nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\ \nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n" es: "\nInformación sobre licencia y distribución en la Guía del usuario de PGP.\ \nMás información sobre otros productos y servicios criptográficos a medida:\ \nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, tel +1 303 541-0140\n" fr: "\nConsulter le guide de l'utilisateur de PGP pour les détails de\n\ license et de distribution. Pour d'autres produits de cryptographie\n\ et services de développement personalisés, contacter: Philip Zimmermann,\n\ 3021 11th St, Boulder CO 80304 USA, téléphone +1 303 541-0140\n" muttde: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\ \nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\ \nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n" "@translator@" de: "\nÜbersetzer:\ \n Frank Pruefer ; Stand: 07.10.1997\ \n (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\ \n Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n" es: "\nTraducido al castellano por Armando Ramos .\n" fr: "\nTraduction française de Jean-loup Gailly et Yanik \ Crépeau \n" muttde: "\nÜbersetzer:\ \n Frank Pruefer ; Stand: 07.10.1997\ \n (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\ \n Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n" "\nFor a usage summary, type: pgp -h\n" de: "\nEine Übersicht der PGP-Befehle erhältst Du mit: pgp -h\n" es: "\nPara ver un resumen de las instrucciones, escribe: pgp -h\n" fr: "\nPour un sommaire d'utilisation, tapez: pgp -h\n" mutt: " " muttde: " " "File %s created containing %d random bytes.\n" de: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\ wurde erzeugt.\n" es: "Generado el fichero %s con %d bytes aleatorios.\n" fr: "Le fichier %s est créé et contient %d octets aléatoires" muttde: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\ wurde erzeugt.\n" "\007Invalid filename: '%s' too long\n" de: "\007Ungültiger Dateiname: '%s' ist zu lang.\n" es: "\007Nombre incorrecto: '%s' es demasiado largo\n" fr: "\007Nom incalide: '%s' trop long\n" mutt: "Invalid filename: '%s' too long\n" muttde: "Ungültiger Dateiname: '%s' ist zu lang.\n" "\n\007Input file '%s' looks like it may have been created by PGP. " de: "\n\007Die Eingabedatei '%s' könnte von PGP erzeugt worden sein." es: "\n\007El fichero de entrada '%s' parece haber sido creado por PGP. " fr: "\n\007Le fichier d'entrée '%s' semble avoir été créé par PGP. " mutt: "\nInput file '%s' looks like it may have been created by PGP. " muttde: "\nDie Eingabedatei '%s' könnte von PGP erzeugt worden sein." "\nIs it safe to assume that it was created by PGP (y/N)? " de: "\nWurde diese von PGP erzeugt? (j/N) " es: "\nżPuede asumirse con seguridad que ha sido así (s/N)? " fr: "\nEtes vous sûr qu'il a été créé par PGP (o/N)? " muttde: "\nWurde diese von PGP erzeugt? (j/N) " "\nNote: '%s' is not a pure text file.\n\ File will be treated as binary data.\n" de: "\nHinweis: '%s' ist keine reine Textdatei.\n\ Die Datei wird als Binärdatei behandelt.\n" es: "\nNota: '%s' no es un fichero de texto puro.\n\ Se tratará como datos binarios.\n" fr: "Note: '%s' n'est pas un fichier texte. \n\ Il sera traité comme données binaires" muttde: "\nHinweis: '%s' ist keine reine Textdatei.\n\ Die Datei wird als Binärdatei behandelt.\n" "\n\007Error: Only text files may be sent as display-only.\n" de: "\n\007FEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n" es: "\n\007Error: Sólo los ficheros de texto pueden enviarse para mostrar.\n" fr: "\n\007Erreur: seuls les fichiers de texte peuvent être envoyés\n\ pour affichage exclusivement.\n" mutt: "\nError: Only text files may be sent as display-only.\n" muttde: "\nFEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n" "\n\007Error: MacBinary failed!\n" de: "\n\007FEHLER: MacBinary fehlgeschlagen!\n" es: "\n\007Error: ha fallado MacBinary\n" fr:"\n\007Erreur:MacBinary a échoué\n" mutt: "\nError: MacBinary failed!\n" muttde: "\nFEHLER: MacBinary fehlgeschlagen!\n" "\nA secret key is required to make a signature. " de: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt." es: "\nSe necesita una clave secreta para generar la firma. " fr: "\nUne clé secrète est nécessaire pour faire une signature. " muttde: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt." "\nYou specified no user ID to select your secret key,\n\ so the default user ID and key will be the most recently\n\ added key on your secret keyring.\n" de: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\ wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n" es: "\nNo has indicado ningún identificador para escoger la clave secreta,\n\ por lo que el identificador y la clave por omisión serán los últimos\n\ añadidos al anillo.\n" fr: "\nVous n'avez pas spécifié de nom d'utilisateur pour sélectionner\n\ votre clé secrète, donc le nom et la clé par défaut seront ceux les\n\ plus récemment ajoutés à votre fichier de clés secrètes.\n" muttde: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\ wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n" "\007Signature error\n" de: "\n\007FEHLER beim Unterschreiben!\n" es: "\007Error de firma\n" fr: "\007Erreur de signature\n" mutt: "Signature error\n" muttde: "\nFEHLER beim Unterschreiben!\n" "\n\nRecipients' public key(s) will be used to encrypt. " de: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n" es: "\n\nSe utilizan las claves públicas de los destinatarios para encriptar. " fr: "\n\nLa ou les clé(s) publique(s) du destinataire seront utilisées\ pour chiffrer. " muttde: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n" "\nA user ID is required to select the recipient's public key. " de: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt." es: "\nSe necesita un identificador para encontrar la clave pública\n\ del destinatario. " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\ publique du destinataire. " muttde: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt." "\nEnter the recipient's user ID: " de: "\nBenutzer-ID des Empfängers: " es: "\nIntroduzca el identificador del destinatario: " fr: "\nEntrez le nom d'utilisateur du destinataire: " muttde: "\nBenutzer-ID des Empfängers: " "\007Encryption error\n" de: "\n\007FEHLER beim Verschlüsseln!\n" es: "\007Error en la encriptación\n" fr: "\007Erreur de chiffrage\n" mutt: "Encryption error\n" muttde: "\nFEHLER beim Verschlüsseln!\n" "\nCiphertext file: %s\n" de: "\nVerschlüsselte Datei: %s\n" es: "\nFichero cifrado: %s\n" fr: "\nFichier chiffré: %s\n" muttde: "\nVerschlüsselte Datei: %s\n" "\nSignature file: %s\n" de: "\nUnterschriftsdatei: %s\n" es: "\nFichero de firma: %s\n" fr: "\nFichier de signature: %s\n" muttde: "\nUnterschriftsdatei: %s\n" "\n\007Error: Transport armor stripping failed for file %s\n" de: "\n\007FEHLER beim Entfernen der Versandhülle von Datei '%s'.\n" es: "\n\007Error: No se ha podido quitar la armadura de %s\n" fr: "\n\007Erreur dans la suppression de la protection de transport pour\n\ le fichier %s\n" mutt: "\nError: Transport armor stripping failed for file %s\n" muttde: "\nFEHLER beim Entfernen der Versandhülle von Datei '%s'.\n" "Stripped transport armor from '%s', producing '%s'.\n" de: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n" es: "Quitada la armadura de '%s', produciendo '%s'.\n" fr: "Protection de transport supprimée pour '%s', produisant '%s'.\n" muttde: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n" "\nLooking for next packet in '%s'...\n" de: "\nSuche nach dem nächsten Paket in '%s'...\n" es: "\nBuscando el siguiente paquete en '%s'...\n" fr: "\nRecherche du prochain paquet dans '%s'...\n" muttde: "\nSuche nach dem nächsten Paket in '%s'...\n" "\nFile is encrypted. Secret key is required to read it. " de: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n" es: "\nEl fichero está encriptado. Para leerlo se necesita la clave secreta. " fr: "\nLe fichier est chiffré. La clé secrète est nécessaire pour le lire." muttde: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n" "\nThis file has a signature, which will be left in place.\n" de: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n" es: "\nEste fichero tiene firma, que se deja en su sitio.\n" fr: "\nCe fichier a une signature, qui sera gardée.\n" muttde: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n" "\nFile has signature. Public key is required to check signature.\n" de: "\nDiese Datei trägt eine Unterschrift.\n\ Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n" es: "\nEl fichero tiene firma. Se necesita la clave pública para comprobarla.\n" fr: "Ce fichier est signé. Une clef publique est nécessaire pour sa vérification.\n" muttde: "\nDiese Datei trägt eine Unterschrift.\n\ Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n" "\nFile is conventionally encrypted. " de: "\nDiese Datei ist konventionell verschlüsselt.\n" es: "\nEl fichero ha sido encriptado convencionalmente. " fr: "\nLe fichier est chiffré de manière conventionnelle. " muttde: "\nDiese Datei ist konventionell verschlüsselt.\n" "\nFile contains key(s). Contents follow..." de: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n" es: "\nEl fichero contiene claves. Se muestran a continuación ..." fr: "\nLe fichier contient une ou plusieurs clés. Le contenu suit..." muttde: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n" "\nDo you want to add this keyfile to keyring '%s' (y/N)? " de: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) " es: "\nżQuieres añadir este fichero de claves al anillo '%s' (s/N)? " fr: "\nVoulez vous ajouter ce fichier de clé au fichier '%s' (o/N)? " muttde: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) " "\007Keyring add error. " de: "\n\007FEHLER beim Hinzufügen zum Schlüsselbund.\n" es: "\007Error al añadir en el anillo. " fr: "\007Erreur dans l'addition au fichier de clés. " mutt: "Keyring add error. " muttde: "\nFEHLER beim Hinzufügen zum Schlüsselbund.\n" "\007\nError: '%s' is not a ciphertext, signature, or key file.\n" de: "\007\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\ und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n" es: "\007\nError: '%s' no es un texto cifrado, una firma ni una clave.\n" fr: "\007\nErreur: '%s' n'est pas un fichier chiffré, de signatures\ \nou de clés.\n" mutt: "\nError: '%s' is not a ciphertext, signature, or key file.\n" muttde: "\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\ und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n" "\n\nThis message is marked \"For your eyes only\". Display now \ (Y/n)? " de: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) " es: "\n\nEste mensaje está marcado como \"Sólo para tus ojos\".\ żMostrar ahora (S/n)? " fr: "\n\nCe message est marqué \"Pour vos yeux seulement\".\n\ Afficher maintenant (O/n)? " muttde: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) " "\n\nPlaintext message follows...\n" de: "\n\nHier kommt die Nachricht im Klartext:\n" es: "\n\nMensaje en claro a continuación...\n" fr: "\n\nLe message en clair suit...\n" muttde: "\n\nHier kommt die Nachricht im Klartext:\n" "Save this file permanently (y/N)? " de: "Klartext sichern? (j/N) " es: "żGrabar este fichero de forma permanente (s/N)? " fr: "Sauvegarde de ce fichier de manière permanente (o/N)? " muttde: "Klartext sichern? (j/N) " "Enter filename to save file as: " de: "Klartext sichern als: " es: "Introduzca el nombre para el fichero: " fr: "Entrez le nom du fichier de sauvegarde: " muttde: "Klartext sichern als: " "Enter filename to save file as:" de: "Gib den Namen ein, unter dem die Datei zu sichern ist:" es: "Introduzca el nombre para el fichero:" fr: "Donner le nom de fichier pour sauvegarder sous:" muttde: "Gib den Namen ein, unter dem die Datei zu sichern ist:" "\nPlaintext filename: %s" de: "\nDateiname des Klartextes: %s" es: "\nNombre del fichero normal: %s" fr: "\nNom du fichier en clair: %s" muttde: "\nDateiname des Klartextes: %s" "\nPlaintext file '%s' looks like it contains a public key." de: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten." es: "\nEl fichero normal '%s' parece contener una clave pública." fr: "\nLe ficher en clair '%s' semble contenir une clé publique." muttde: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten." "\nPlaintext file '%s' looks like a %s file." de: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein." es: "\nEl fichero normal '%s' parece un fichero %s." fr: "\nLe fichier en clair '%s' semble être un fichier %s." muttde: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein." "\n\007Output file '%s' may contain more ciphertext or signature." de: "\n\007Die Ausgabedatei '%s' könnte weiteren\n\ verschlüsselten Text oder eine Unterschrift enthalten." es: "\n\007El fichero de salida '%s' puede contener más texto \ cifrado o una firma." fr: "\n\007Le fichier de sortie '%s' peut contenir d'autre texte chiffré\n\ ou signature." mutt: "\nOutput file '%s' may contain more ciphertext or signature." muttde: "\nDie Ausgabedatei '%s' könnte weiteren\n\ verschlüsselten Text oder eine Unterschrift enthalten." "\a\nError: PGP User's Guide not found.\n\ PGP looked for it in the following directories:\n" de: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\ PGP hat danach in den folgenden Verzeichnissen gesucht:\n" es: "\a\nError: No se encuentra la Guía del usuario.\n\ Se ha buscado en estos directorios:\n" fr: "\n\aErreur: Le manuel d'utilisation de PGP est introuvable.\n\ PGP a examiné les repertoires suivants:\n" muttde: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\ PGP hat danach in den folgenden Verzeichnissen gesucht:\n" "and the doc subdirectory of each of the above. Please put a copy of\n\ both volumes of the User's Guide in one of these directories.\n\ \n\ Under NO CIRCUMSTANCES should PGP ever be distributed without the PGP\n\ User's Guide, which is included in the standard distribution package.\n\ If you got a copy of PGP without the manual, please inform whomever you\n\ got it from that this is an incomplete package that should not be\n\ distributed further.\n\ \n\ PGP will not generate a key without finding the User's Guide.\n\ There is a simple way to override this restriction. See the\n\ PGP User's Guide for details on how to do it.\n\ \n" de: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\ Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\ und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\ Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\ ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\ Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\ denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\ Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\ PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\ Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n" es: "y el subdirectorio doc de cada uno de ellos. Pon una copia de\n\ ambos volúmenes en uno de esos directorios.\n\ \n\ Bajo *ninguna circunstancia* debe distribuirse PGP sin la Guía del usuario,\n\ incluida con la distribución habitual.\n\ Si tienes una copia de PGP sin manual, informa a quien te la suministró de\n\ que es un paquete incompleto que no debe seguir distribuyéndose.\n\ \n\ PGP no genera ninguna clave si no encuentra la Guía del usuario.\n\ Hay una forma sencilla de saltarse esta restricción. Consulta la\n\ Guía para ver cómo hacerlo.\n\ \n" fr: "et leur(s) sous-repertoire(s). Veuillez placer une copie des\n\ deux (2) documents constituant le manuel d'utilisation dans l'un de\n\ ces repertoires.\n\ En aucune cinconstances PGP ne devrait etre distribué sans que les\n\ documents constituant le manuel ne soit inclus avec le reste.\n\ Si vous avez obtenu PGP sans les documents constituant le manuel\n\ veuillez SVP en aviser votre fournisseur que PGP est incomplet et\n\ que cette maniere de distribuer PGP doit cesser.\n\ \n\ PGP ne fonctionnera pas sans la presence des deux documents constituant le manuel \n\ La facon de circonvenir a cette restriction est de consulter le manuel\n\ \n" muttde: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\ Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\ und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\ Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\ ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\ Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\ denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\ Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\ PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\ Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n" "\007Keygen error. " de: "\n\007FEHLER bei der Erzeugung des Schlüssels.\n" es: "\007Error en la generación de claves. " fr: "\007Erreur dans la génération de clé. " mutt: "Keygen error. " muttde: "\nFEHLER bei der Erzeugung des Schlüssels.\n" "\007Keyring check error.\n" de: "\n\007FEHLER bei der Überprüfung des Schlüsselbunds.\n" es: "\007Error en la comprobación del anillo.\n" fr: "Erreur dans la vérification du trousseau de clef." mutt: "Keyring check error.\n" muttde: "\nFEHLER bei der Überprüfung des Schlüsselbunds.\n" "\007Maintenance pass error. " de: "\n\007FEHLER beim Verwaltungsdurchgang.\n" es: "\007Error en el proceso de mantenimiento. " fr: "\007Erreur dans la passe de maintenance. " mutt: "Maintenance pass error. " muttde: "\nFEHLER beim Verwaltungsdurchgang.\n" "File '%s' is not a public keyring\n" de: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" es: "El fichero '%s' no es un anillo de claves públicas\n" fr: "Le fichier '%s' n'est pas un fichier de clés publiques\n" muttde: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" "\nA user ID is required to select the public key you want to sign. " de: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\ eine Benutzer-ID benötigt." es: "\nSe necesita un identificador para elegir\n\ la clave pública por firmar. " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\ publique que vous voulez signer. " muttde: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\ eine Benutzer-ID benötigt." "\nEnter the public key's user ID: " de: "\nBenutzer-ID des öffentlichen Schlüssels: " es: "\nIntroduzca el identificador de la clave pública: " fr: "\nEntrez le nom d'utilisateur pour la clé publique: " muttde: "\nBenutzer-ID des öffentlichen Schlüssels: " "\007Key signature error. " de: "\n\007FEHLER beim Unterschreiben des Schlüssels.\n" es: "\007Error en firma de clave. " fr: "\007Erreur dans la signature de clé. " mutt: "Key signature error. " muttde: "\nFEHLER beim Unterschreiben des Schlüssels.\n" "\nA user ID is required to select the key you want to revoke or \ disable. " de: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\ eine Benutzer-ID benötigt." es: "\nSe necesita un identificador de usuario para elegir la clave \ que quieras\n\revocar o desactivar. " fr: "\nUn nom d'utilisateur est requis pour sélectionner la clé que vous\ voulez révoquer ou inactiver. " muttde: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\ eine Benutzer-ID benötigt." "\nEnter user ID: " de: "\nBenutzer-ID: " es: "\nIntroduce el identificador: " fr: "\nEntrez le nom d'utilisateur: " muttde: "\nBenutzer-ID: " "\nA user ID is required to select the key you want to edit. " de: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt." es: "\nSe necesita el identificador de usuario para elegir la clave que \ quieras\nmodificar. " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ vous voulez modifier. " muttde: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt." "\nEnter the key's user ID: " de: "\nBenutzer-ID des Schlüssels: " es: "\nIntroduce el identificador: " fr: "\nEntrez le nom d'utilisateur pour la clé: " muttde: "\nBenutzer-ID des Schlüssels: " "\007Keyring edit error. " de: "\n\007FEHLER beim Bearbeiten des Schlüsselbunds.\n" es: "\007Error en la modificación del anillo. " fr: "\007Erreur dans la modification du fichier de clés. " mutt: "Keyring edit error. " muttde: "\nFEHLER beim Bearbeiten des Schlüsselbunds.\n" "\n\007Key file '%s' does not exist.\n" de: "\n\007Die Datei '%s' existiert nicht.\n" es: "\n\007No existe el anillo de claves '%s.\n" fr: "\n\007Le fichier de clés '%s' n'existe pas.\n" mutt: "\nKey file '%s' does not exist.\n" muttde: "\nDie Datei '%s' existiert nicht.\n" "\nA user ID is required to select the key you want to extract. " de: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt." es: "\nSe necesita el identificador de usuario para elegir la clave que \ quieras\n\extraer. " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ vous voulez extraire. " muttde: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt." "\007Keyring extract error. " de: "\n\007FEHLER beim Extrahieren aus dem Schlüsselbund.\n" es: "\007Error al extraer del anillo. " fr: "\007Erreur dans l'extraction du fichier de clés. " mutt: "Keyring extract error. " muttde: "\nFEHLER beim Extrahieren aus dem Schlüsselbund.\n" "\nA user ID is required to select the public key you want to\n\ remove certifying signatures from. " de: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\ wird eine Benutzer-ID benötigt." es: "\nSe necesita el identificador de usuario para elegir la clave pública\n\ de la que suprimir firmas. " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\ publique\n\ pour laquelle vous voulez supprimer des signatures de certification. " muttde: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\ wird eine Benutzer-ID benötigt." "\nA user ID is required to select the key you want to remove. " de: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt." es: "\nSe necesita el identificador de usuario para elegir la clave que \ quieras\nsuprimir . " fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ vous voulez supprimer. " muttde: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt." "\007Key signature remove error. " de: "\n\007FEHLER beim Entfernen der Beglaubigung.\n" es: "\007Error en la supresión de la firma de una clave. " fr: "\007Erreur dans la suppression de signature d'une clé. " mutt: "Key signature remove error. " muttde: "\nFEHLER beim Entfernen der Beglaubigung.\n" "\007Keyring remove error. " de: "\n\007FEHLER beim Löschen aus dem Schlüsselbund.\n" es: "\007Error al suprimir del anillo. " fr: "\007Erreur dans la suppression du fichier de clés. " mutt: "Keyring remove error. " muttde: "\nFEHLER beim Löschen aus dem Schlüsselbund.\n" "\007Keyring view error. " de: "\n\007FEHLER beim Anzeigen des Schlüsselbunds.\n" es: "\007Error al visualizar el anillo. " fr: "\007Erreur dans la visualisation du fichier de clés. " mutt: "Keyring view error. " muttde: "\nFEHLER beim Anzeigen des Schlüsselbunds.\n" "For more detailed help, consult the PGP User's Guide.\n" de: "Ausführlichere Hilfe findet sich in der PGP-Anleitung.\n" es: "Para obtener más ayuda, consulta la Guía del usuario de PGP.\n" fr: "Pour une aide plus détaillée, consultez le guide de l'utilisateur de PGP.\n" mutt: "\n" muttde: "\n" "\nInvalid arguments.\n" de: "\nUngültige Argumente!\n" es: "\nArgumentos incorrectos.\n" fr: "\nArguments invalides.\n" muttde: "\nUngültige Argumente!\n" "\nUsage summary:\ \nTo encrypt a plaintext file with recipent's public key, type:\ \n pgp -e textfile her_userid [other userids] (produces textfile.pgp)\ \nTo sign a plaintext file with your secret key:\ \n pgp -s textfile [-u your_userid] (produces textfile.pgp)\ \nTo sign a plaintext file with your secret key, and then encrypt it\ \n with recipent's public key, producing a .pgp file:\ \n pgp -es textfile her_userid [other userids] [-u your_userid]\ \nTo encrypt with conventional encryption only:\ \n pgp -c textfile\ \nTo decrypt or check a signature for a ciphertext (.pgp) file:\ \n pgp ciphertextfile [-o plaintextfile]\ \nTo produce output in ASCII for email, add the -a option to other options.\ \nTo generate your own unique public/secret key pair: pgp -kg\ \nFor help on other key management functions, type: pgp -k\n" de: "\nÜbersicht der PGP-Befehle:\ \nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\ \n pgp -e {Text} {Benutzer-ID des Empfängers} (Ergebnis: {Text}.pgp)\ \nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\ \n pgp -s {Text} [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ \nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\ \nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\ \n pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\ \n [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ \nVerschlüsseln mit konventioneller Verschlüsselung:\ \n pgp -c {Text}\ \nEntschlüsseln oder Überprüfen der Unterschrift:\ \n pgp {verschlüsselter Text} [-o {Klartext}]\ \nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\ \nErzeugen eines eigenen Schlüssel-Paares: pgp -kg\ \nHilfe zur Schlüsselverwaltung: pgp -k\n" es: "\nResumen de las instrucciones:\ \nEncriptar fichero normal con la clave pública del destinatario:\ \n pgp -e ftexto su_identificador (produce ftexto.pgp)\ \nFirmar un fichero de texto normal con tu clave secreta:\ \n pgp -s ftexto [-u tu_identificador] (produce ftexto.pgp)\ \nFirmar un fichero normal con tu clave secreta y después encriptarlo\ \n con la clave pública del destinatario, produciendo un fichero .pgp:\ \n pgp -es ftexto su_identificador [otros] [-u tu_identificador]\ \nEncriptar sólo con cifrado convencional:\ \n pgp -c ftexto\ \nDesencriptar o comprobar la firma en un fichero cifrado (.pgp):\ \n pgp fcifrado [-o fnormal]\ \nProducir resultado en ASCII para correo electrónico: añadir la opción -a.\ \nGenerar tu propio par único de claves pública/secreta: pgp -kg\ \nAyuda sobre otras funciones de gestión de claves: pgp -k\n" fr: "\nSommaire:\ \nPour chiffrer un fichier en clair avec la clé publique du destinataire, \ tapez:\ \n pgp -e fichier son_nom [autres noms] (produit fichier.pgp)\ \nPour signer un texte en clair avec votre clé secrète:\ \n pgp -s fichier [-u votre_nom] (produit fichier.pgp)\ \nPour signer un texte en clair avec votre clé secrète, puis le chiffrer\ \n avec la clé publique du destinataire, produisant un fichier .pgp:\ \n pgp -es fichier son_nom [autres noms] [-u votre_nom]\ \nPour chiffrer de manière conventionelle seulement:\ \n pgp -c fichier\ \nPour déchiffrer ou vérifier une signature pour un fichier chiffré (.pgp):\ \n pgp fichier_chiffré [-o fichier_en_clair]\ \nPour produire une sortie en ASCII pour courrier électronique, ajouter\ \nl'option -a aux autres options.\ \nPour générer votre propre paire de clés publique/secrète:\ \n pgp -kg\ \nPour de l'aide sur les autres fonctions de gestion de clé, tapez: pgp -k\n" muttde: "\nÜbersicht der PGP-Befehle:\ \nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\ \n pgp -e {Text} {Benutzer-ID des Empfängers} (Ergebnis: {Text}.pgp)\ \nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\ \n pgp -s {Text} [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ \nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\ \nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\ \n pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\ \n [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ \nVerschlüsseln mit konventioneller Verschlüsselung:\ \n pgp -c {Text}\ \nEntschlüsseln oder Überprüfen der Unterschrift:\ \n pgp {verschlüsselter Text} [-o {Klartext}]\ \nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\ \nErzeugen eines eigenen Schlüssel-Paares: pgp -kg\ \nHilfe zur Schlüsselverwaltung: pgp -k\n" "\nKey management functions:\ \nTo generate your own unique public/secret key pair:\ \n pgp -kg\ \nTo add a key file's contents to your public or secret key ring:\ \n pgp -ka keyfile [keyring]\ \nTo remove a key or a user ID from your public or secret key ring:\ \n pgp -kr userid [keyring]\ \nTo edit your user ID or pass phrase:\ \n pgp -ke your_userid [keyring]\ \nTo extract (copy) a key from your public or secret key ring:\ \n pgp -kx userid keyfile [keyring]\ \nTo view the contents of your public key ring:\ \n pgp -kv[v] [userid] [keyring]\ \nTo check signatures on your public key ring:\ \n pgp -kc [userid] [keyring]\ \nTo sign someone else's public key on your public key ring:\ \n pgp -ks her_userid [-u your_userid] [keyring]\ \nTo remove selected signatures from a userid on a keyring:\ \n pgp -krs userid [keyring]\ \n" de: "\nSchlüssel-Verwaltung:\ \nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\ \n pgp -kg\ \nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\ \n pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\ \nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\ \n pgp -kr {Benutzer-ID} [{Schlüsselbund}]\ \nÄndern Deiner Benutzer-ID oder Deines Mantras:\ \n pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\ \nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\ \n pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\ \nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\ \n pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\ \nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\ \n pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\ \nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\ \n pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\ \nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\ \n pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n" es: "\nFunciones para la gestión de claves:\ \nGenerar tu propio par único de claves pública/secreta:\ \n pgp -kg\ \nAñadir contenido de fichero de clave al anillo de claves públicas o secretas:\ \n pgp -ka fdclaves [anillo]\ \nSuprimir una clave o identificador de usuario de un anillo de claves:\ \n pgp -kr identificador [anillo]\ \nModificar tu identificador de usuario o tu contraseña:\ \n pgp -ke tu_identificador [anillo]\ \nExtraer (copiar) una clave del anillo de claves públicas o secretas:\ \n pgp -kx identificador fdclaves [anillo]\ \nVisualizar el contenido del anillo de claves públicas:\ \n pgp -kv[v] [identificador] [anillo]\ \nComprobar las firmas del anillo de claves públicas:\ \n pgp -kc [identificador] [anillo]\ \nFirmar la clave pública de alguien en el anillo de claves correspondiente:\ \n pgp -ks otro_identificador [-u tu_identificador] [anillo]\ \nSuprimir ciertas firmas de un idusuario en un anillo:\ \n pgp -krs identificador [anillo]\ \n" fr: "Fonctions de gestion des clés:\ \nPour générer votre propre paire de clés publique/secrète:\ \n pgp -kg\ \nPour ajouter le contenu d'un fichier de clés à votre fichier de clés\ \n public ou secret:\ \n pgp -ka fichier_de_clés [votre_fichier_de_clés]\ \nPour retirer une clé de votre fichier de clés public ou secret:\ \n pgp -kr nom_d_utilisateur [fichier_de_clés]\ \nPour extraire (copier) une clé de votre fichier de clés public ou secret:\ \n pgp -kx nom_d_utilisateur fichier_de_la_clé [fichier_de_clés]\ \nPour visualiser le contenu de votre fichier de clés:\ \n pgp -kv[v] [nom_d_utilisateur] [ficher_de_clés]\ \nPour vérifier les signatures sur votre fichier de clés publiques:\ \n pgp -kc [nom_d_utilisateur] [ficher_de_clés]\ \nPour signer la clé publique de quelqu'un d'autre sur votre fichier de\ \n clés publiques:\ \n pgp -ks son_nom votre_nom [fichier_de_clés]\ \nPour enlever certaines signatures d'une personne sur un fichier de clés:\ \n pgp -krs son_nom [fichier_de_clés]\n" muttde: "\nSchlüssel-Verwaltung:\ \nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\ \n pgp -kg\ \nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\ \n pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\ \nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\ \n pgp -kr {Benutzer-ID} [{Schlüsselbund}]\ \nÄndern Deiner Benutzer-ID oder Deines Mantras:\ \n pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\ \nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\ \n pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\ \nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\ \n pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\ \nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\ \n pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\ \nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\ \n pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\ \nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\ \n pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n" "\nIncluding \"%s\"...\n" de: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n" es: "\nIncluyendo \"%s\"...\n" fr: "\nIncluant '%s'...\n" muttde: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n" "\nWe need to generate %u random bits. This is done by measuring the\ \ntime intervals between your keystrokes. Please enter some random text\ \non your keyboard until you hear the beep:\n" de: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\ \nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\ \nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n" es: "\nNecesitamos generar %d bits aleatorios. Se hace midiendo los\ \nintervalos de tiempo entre pulsaciones de tecla. Escribe\ \ntexto al azar en el teclado hasta que oigas un pitido:\n" fr: "\nNous devons générer %d bits aléatoires. Ceci est fait en mesurant\ \nl'intervalle de temps entre les frappes de touches. Veuillez tapper du\ \ntexte aléatoire sur votre clavier jusqu'à ce que vous entendiez le\ \nsignal sonore:\n" muttde: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\ \nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\ \nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n" "\007 -Enough, thank you.\n" de: "\007 -Danke, das genügt!\n" es: "\007 -Es suficiente.\n" fr: "\007 -Assez, merci.\n" mutt: " -Enough, thank you.\n" muttde: " -Danke, das genügt!\n" "\ Uses the RSAREF(tm) Toolkit, which is copyright RSA Data Security, Inc.\n\ Distributed by the Massachusetts Institute of Technology.\n" de: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\ Ausgeliefert vom Massachusetts Institute of Technology.\n" es: "\ Utiliza RSAREF(tm), copyright de RSA Data Security, Inc.\n\ Distribuido por el Massachusetts Institute of Technology.\n" fr: "Ce logiciel utilise RSAREF(tm) Toolkit, Copyright RSA Data Security, Inc\n\ Distribué par le Massachusetts Institute of Technology.\n" muttde: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\ Ausgeliefert vom Massachusetts Institute of Technology.\n" "Out of memory" de: "Zu wenig Speicher!" es: "No queda memoria" fr: "Mémoire insufisante" muttde: "Zu wenig Speicher!" "\nOut of memory\n" de: "\nZu wenig Speicher!\n" es: "\nNo queda memoria\n" fr: "\nMémoire insuffisante\n" muttde: "\nZu wenig Speicher!\n" "\n\007Out of memory.\n" de: "\n\007Zu wenig Speicher!\n" es: "\n\007No queda memoria.\n" fr: "\n\007Mémoire insuffisante.\n" mutt: "\nOut of memory.\n" muttde: "\nZu wenig Speicher!\n" "\nCompression/decompression error\n" de: "\nFEHLER beim Packen/Entpacken!\n" es: "\nError en compresión/descompresión\n" fr: "\nErreur de compression/decompression\n" muttde: "\nFEHLER beim Packen/Entpacken!\n" "\nERROR: unexpected end of compressed data input.\n" de: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n" es: "\nERROR: los datos comprimidos terminan antes de tiempo.\n" fr: "\nERREUR: fin innopinée des données d'entrée compressées.\n" muttde: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n" # The following 4 translations MUST be exactly 3 characters long! "pub" de: "öff" muttde: "öff" "sec" de: "prv" muttde: "prv" "sig" de: "Unt" es: "fir" muttde: "Unt" "com" de: "Wid" muttde: "Wid" # IN-CH extentions. # translation must not change the string length "rev" de: "zur" muttde: "zur" # translation must not change the string length " Expire: %s%s" de: " Verfall: %s%s" muttde: " Verfall: %s%s" # translation must not change the string length " no expire " de: " kein Verfall " muttde: " kein Verfall " "ENCRyption only\n" de: "*** nur Verschlüsselung! ***\n" muttde: "*** nur Verschlüsselung! ***\n" "Key ID %s is SIGN only. Decryption avoided.\n" de: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n" muttde: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n" "Key ID %s is not valid.\n" de: "Schlüssel ID %s ist ungültig.\n" muttde: "Schlüssel ID %s ist ungültig.\n" "Key is an ENCRyption only key.\n" de: "Der Schlüssel ist nur zur Verschlüsselung.\n" muttde: "Der Schlüssel ist nur zur Verschlüsselung.\n" "Key is a SIGNature only key.\n" de: "Der Schlüssel ist nur für Unterschriften.\n" muttde: "Der Schlüssel ist nur für Unterschriften.\n" "Key is out of use.\n" de: "Der Schlüssel ist nicht mehr in Benutzung.\n" muttde: "Der Schlüssel ist nicht mehr in Benutzung.\n" "SIGNature only\n" de: "*** nur Unterschriften! ***\n" muttde: "*** nur Unterschriften! ***\n" " Revoked by: " de: " Zurückgezogen von: " muttde: " Zurückgezogen von: " " Low Cert by: " de: "Niedrige Beglaubigung von: " muttde: "Niedrige Beglaubigung von: " "Medium Cert by: " de: "Mittlere Beglaubigung von: " muttde: "Mittlere Beglaubigung von: " " High Cert by: " de: " Hohe Beglaubigung von: " muttde: " Hohe Beglaubigung von: " " Unknown type: " de: " Unbekannter Typ: " muttde: " Unbekannter Typ: " "Try to obtain the corresponding SIGN key.\n" de: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n" muttde: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n" "\n\007Key cert is already revoked by user '%s'.\n" de: "\n\007Die Unterschrift unter dem Schlüssel wurde bereits\n\ von '%s' zurückgezogen.\n" mutt: "\nKey cert is already revoked by user '%s'.\n" muttde: "\nDie Unterschrift unter dem Schlüssel wurde bereits\n\ von '%s' zurückgezogen.\n" "\n\007Key is not signed by user '%s'.\n" de: "\n\007Der Schlüssel ist nicht von '%s' unterschrieben.\n" mutt: "\nKey is not signed by user '%s'.\n" muttde: "\nDer Schlüssel ist nicht von '%s' unterschrieben.\n" "\nKey signature certificate revoked.\n" de: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n" muttde: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n" "This key is already out of use.\n" de: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n" muttde: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n" "\007 Key ID %s is SIGN only. (protest against decryption)\n" de: "\007Die Schlüssel-ID %s ist nur für Unterschriften.\n\ Keine Entschlüsselung möglich!\n" mutt: " Key ID %s is SIGN only. (protest against decryption)\n" muttde: "Die Schlüssel-ID %s ist nur für Unterschriften.\n\ Keine Entschlüsselung möglich!\n" "Signature was made after the key ID %s was expired.\n" de: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n" muttde: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n" "Signature was made before the key ID %s was valid.\n" de: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n" muttde: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n" "Signature was made using the ENCR key ID %s.\n" de: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n" muttde: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n" "Something goes wrong, may be an unlucky User ID?\n" de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n" muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n" "Something goes wrong, may be this userid '%s' is unlucky?\n" de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n" muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n" "The compromise certificate might not be accepted on newer versions.\n\ Revoke anyway? (y/N)" de: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\ werden.\nTrotzdem widerrufen? (j/N)" muttde: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\ werden.\nTrotzdem widerrufen? (j/N)" "The key for the userid '%s' is SIGN only.\nI'll try the corresponding ENCR key.\n" de: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\ Der zugehörige Verschlüsselungsschlüssel wird versucht.\n" muttde: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\ Der zugehörige Verschlüsselungsschlüssel wird versucht.\n" "The key for the userid '%s' is not valid, skipped.\n" de: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n" muttde: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n" "The user ID typed in has garbled options!\n" de: "Die NutzerID enthält fehlerhafte Optionseinträge!\n" muttde: "Die NutzerID enthält fehlerhafte Optionseinträge!\n" "This key is an ENCRyption only key.\n" de: "Das ist ein Verschlüsselungsschlüssel.\n" muttde: "Das ist ein Verschlüsselungsschlüssel.\n" "This key is too old to be revoked.\n" de: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n" muttde: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n" "This key is too old to be signed.\n" de: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n" muttde: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n" "This key will be generated in future. *oops*\n" de: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n" muttde: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n" "Your key is too old to sign with.\n" de: "Der Schlüssel ist zu alt zum unterschreiben.\n" muttde: "Der Schlüssel ist zu alt zum unterschreiben.\n" "Your key will be generated in future. *oops*\n" de: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n" muttde: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n" "\007**** Signed with an ENCRyption only key ****" de: "\007**** Unterschr. mit einem Verschl.-Schlüssel ****" mutt: "**** Signed with an ENCRyption only key ****" muttde: "**** Unterschr. mit einem Verschl.-Schlüssel ****" "\007**** Signed with an invalid key ****" de: "\007**** Unterschr. mit einem ungültigen Schlüssel ****" mutt: "**** Signed with an invalid key ****" muttde: "**** Unterschr. mit einem ungültigen Schlüssel ****" "\007**** Signed with a revoked key ****" de: "\007**** Unterschr. mit einem zurückgez. Schlüssel ****" mutt: "**** Signed with a revoked key ****" muttde: "**** Unterschr. mit einem zurückgez. Schlüssel ****" "\n\nREAD CAREFULLY: How did you prove the users real identity ?\n\ 0) What? I do not understand this question.\n\ 1) No attempt made at all to identify the user with a real name.\n\ 2) Some casual attempt made to identify user with his name.\n\ 3) Heavy-duty identification efforts, photo ID, direct contact...\n" de: "\n\nSORGFÄLTIG LESEN: Wie hast Du die Identität des Nutzers geprüft ?\n\ 0) Bitte? Ich verstehe die Frage nicht.\n\ 1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\ 2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\ 3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n" muttde: "\n\nSORGFÄLTIG LESEN: Wie hast Du die Identität des Nutzers geprüft ?\n\ 0) Bitte? Ich verstehe die Frage nicht.\n\ 1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\ 2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\ 3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n" $Id$ mutt-1.5.21/contrib/language50.txt0000644000175000017500000007127110770271152013655 00000000000000#This file contains the strings used by PGP. # $Id$ [DIFFERENT_EXES] us=\ PGP is now invoked from different executables for different operations:\n\n\ pgpe Encrypt (including Encrypt/Sign)\n\ pgps Sign\n\ pgpv Verify/Decrypt\n\ pgpk Key management\n\ pgpo PGP 2.6.2 command-line simulator (not yet implemented)\n\n\ See each application's respective man page or the general PGP documentation\n\ for more information.\n [CREATING_OUTPUT_FILE] us=Creating output file %s\n #Untested [COPYING_KEYFILE_AND_RUNNING_PGPK] us=Copying key file to \"%s\", running pgpk to process it...\n\n mutt= #Untested [NEED_PASSPHRASE] us=You need a passphrase to encrypt the file\n [MUST_SPECIFY_A_RECIPIENT] us=You must specify at least one recipient for encryption!\n #Untested [NEED_PASSPHRASE_AGAIN] us=Enter same passphrase again\n #Untested [PASSPHRASES_DIFFERENT] us=Error: Passphrases were different. Try again.\n #Untested [ZERO_LEN_PASSPHRASE] us=Encryption error\n #Untested [TREAT_AS_PGP] us=This is a PGP File. Treat it as such? [y/N]\n #Untested [PRIVATE_KEY_MISSING] us=Cannot find a private key for signing: %s\n #Untested [CANNOT_CONVERT_TO_PRIVATE_KEY] us=Cannot convert to private key\n #Untested [PRIVATE_KEY_CANNOT_SIGN] us=Private Key cannot sign\n #Untested [CANNOT_UNLOCK_PRIVATE_KEY] us=Cannot unlock private key\n #Untested [NO_KEYRINGS] us=No keyrings to use #Untested [NO_ENCRYPTION_KEYS_FOUND_FOR] us=No encryption keys found for: %s\n #Untested [CANNOT_FIND_KEY] us=Cannot find key: %s\n #Untested [CANNOT_ADD_MY_KEY] us=Cannot add my key to set\n #Untested [NO_VALID_RECIPIENTS] us=No valid keys found for any recipients, exiting...\n #Untested [USING_STDIN] us=No files specified. Using stdin.\n\n mutt= #Untested [CANNOT_OPEN_INPUT_FILE] us=Cannot open input file %s\n #Untested [CANNOT_SETUP_PROCESSING_PIPELINE] us=Cannot Setup Processing Pipeline\n #Untested [UNRECOGNIZED_OPTION_STRING] us=Unrecognized option %s\n #Untested [UNRECOGNIZED_OPTION_STRING_DASH] us=Unrecognized option -%s\n #Untested [UNRECOGNIZED_OPTION_CHAR] us=Unrecognized option -%c\n #Untested [ARGS_INCOMPATABLE] us="Cannot use -%c and -%c together\n" #Untested [ONLY_ONE_OUTPUT_FILE] us="Only one -o option allowed\n" #Untested [ONLY_ONE_USERNAME] us="Only one -u option allowed\n" #Untested [NO_OUTPUT_FILENAME] us=-o option requires an output file name argument\n [NO_RECIPIENT_SPECIFIED] us=-r option requires a recipient name argument\n #Untested [NO_USERID_SPECIFIED] us=-u option requires a userid argument\n #Untested, and probably going away [NO_PASSPHRASE_SPECIFIED_IN_BATCHMODE] us=-z option requires a passphrase argument\n #Untested [CANNOT_COMBINE_CONVENTIONAL_AND_PK] us=Cannot combine -c and -r arguments\n #Untested [PGPK_IS_SEPERATE] us=pgpk is a seperate program, not a symlink to pgp!\n #Untested [UNKNOWN_SYMLINK] us=Invoked with unknown symlink\n #Untested [PRIVATE_KEY_NEEDED_FOR_SIGNATURE] us=A private key is required to make a signature.\n [ENTER_Y_OR_N] us="Invalid response. Please enter Y or N [default %c]: \n" #Untested [GENERIC_KEYRING_ERROR] us="Error on keyring \"%s\": " #Untested [UNABLE_TO_OPEN_DEFAULT_KEYRINGS] us="Unable to open default keyrings: " #Untested [UNABLE_TO_OPEN_KEYRING] us="Unable to open keyring: " #Untested [KEY_CORRUPTED] us="Key Corrupted (%s): " #Untested [NEED_SIG_FILE] us="File to check signature against [%s]: " #untested [GOOD_SIGNATURE] us="Good signature made %s by key:\n" #untested [BAD_SIGNATURE] us="BAD signature made %s by key:\n" #untested [ERROR_SIGNATURE] us="Error %s checking signature: %s\n" #Untested [UNKNOWN_SIGNATURE] us="Signature by unknown keyid: " #untested [ENTER_PASSPHRASE] us="Enter pass phrase: " #Untested [RANDOM_BITS_FROM_DEVICE] us="\n\ We need to generate %u random bits. This is done by reading\n\ %s. Depending on your system, you may be able\n\ to speed this process by typing on your keyboard and/or moving your mouse.\n" #Untested [RANDOM_BITS_FROM_DEVICE_OLD_KERNEL] us="\n\ /dev/random detected; however, on Linux kernel versions < 1.3.33, it is not\n\ cryptographically usable. If you wish to use /dev/random as an entropy\n\ source, it is recommended that you upgrade your kernel version. If you feel\n\ that you received this message in error, add ForceRandomDevice=1 to your\n\ pgp.cfg file, but be warned that by doing so without know what you are\n\ doing, you could compromise the security of your key.\n" #Untested [RANDOM_BITS_FROM_KEYBOARD] us="\n\ We need to generate %u random bits. This is done by measuring the\n\ time intervals between your keystrokes. Please enter some random text\n\ on your keyboard until you hear the beep:\n" #Untested [NO_INPUT_FILE_IN_BATCHMODE] us="Cannot request input file in batchmode\n" #Untested [UNABLE_TO_OPEN_FILE] us="Unable to open file \"%s\"\n" #Untested [UNABLE_TO_CREATE_READ_MODULE] us="Unable to create file read module.\n" #Untested [UNKNOWN_FILE_TYPE] us="Unknown file type (clearsigned?). Assuming text\n" #Untested [OPENING_FILE_WITH_TYPE] us="Opening file \"%s\" type %s.\n" mutt= #Untested [ERROR_CLOSING_OLD_FILE] us="Error closing old file: %d\n" #Untested [NEED_PASSPHRASE_TO_DECRYPT_KEY] us="Need a pass phrase to decrypt private key:\n" #Untested [GOOD_PASSPHRASE] us="Pass phrase is good.\n" #Untested [BAD_PASSPHRASE] us="Error: Bad pass phrase.\n\n" #Untested [PASSPHRASE_INCORRECT] us="Password Incorrect." #Untested [TRY_AGAIN] us=" Try Again." #Untested [UNKNOWN_ESK] us="Unknown ESK type: %d\n" #Untested [CANNOT_DECRYPT] us="Cannot decrypt message. It can only be decrypted by:\n" #Untested [A_PASSPHRASE] us=" A Pass Phrase\n" #Untested [KEY_ID] us=" Key ID " #Untested [FORCE_OVERWRITE] us="File \"%s\" already exists. Overwrite? [y/N] " #Untested [UNABLE_TO_OVERWRITE_FILE] us="Unable to overwrite file \"%s\"\n" #Untested [RANDOM_DEVICE_NOT_DEFAULT] us="Warning! Random device is something other than %s!\n\ This MAY be a security hole.\n" #Untested [RANDOM_DEVICE_WRITABLE] us="Warning! %s is writable by users other than root!\n\ This is probably OK, but you should have your sysadmin fix it.\n\ Proceeding.\n" #Untested [RANDOM_DEVICE_UNREADABLE] us="\ Warning! Random device %s found, but you can't read it!\n" #Untested [BITS_AND_KEYID] us="%6u bits, Key ID " #Untested [KEY_NOT_FOUND] us=Key not found: \"%s\"\n #Untested [PGPERR_TROUBLE_BADTRUST_LONG] us="Trust packet too long: %lu bytes long" #Untested [PGPERR_TROUBLE_UNKPKTBYTE_LONG] us="Unknown packet byte: %02X" #Untested [PGPERR_TROUBLE_KEY2BIG_LONG] us="Key grossly oversized: %lu bytes long" #Untested [PGPERR_TROUBLE_NAME2BIG_LONG] us="User ID too long: %lu bytes long" #Untested [PGPERR_TROUBLE_SIG2BIG_LONG] us="Signature grossly oversized: %lu bytes long" #Untested [PGPERR_TROUBLE_DUPKEYID_LONG] us="Duplicate keyID found. Two keys have the same keyID,\n\ but they are different. This is highly suspicious. The first key is:" #Untested [PGPERR_TROUBLE_DUPKEY_LONG]: us="A key was found twice in one keyring file. It is a duplicate of:\n" #Untested [PGPERR_TROUBLE_DUPNAME_LONG] us="A name was found twice in one keyring file. It is a duplicate of:\n" #Untested [PGPERR_TROUBLE_BAREKEY_LONG] us="A key was found twice in one keyring file. It is a duplicate of: " #Untested [PGPERR_TROUBLE_VERSION_BUG_CUR_LONG] us="This private key's version number appears to be incorrect.\n\ PGP version 2.6 had a bug wherein it would improperly change the\n\ version number of a private key generated by older versions of PGP\n\ when it was edited. The private key in this key file has a version\n\ byte that is different from a copy in another key file, and appears\n\ to be improper. PGP will fix this by changing the version byte in\n\ the private key to the previous value. The key with the problem is:\n" #Untested [PGPERR_TROUBLE_VERSION_BUG_PREV_LONG] us="A previously seen private key's version number appears to be\n\ incorrect. PGP version 2.6 had a bug wherein it would improperly\n\ change the version byte of a private key generated by older versions\n\ of PGP when it was edited. The public key in this key file has\n\ a version byte that is different from a private key elsewhere,\n\ which appears to be improper. PGP will fix this by changing the\n\ version byte in the private key to the previous value. The key\n\ with the problem is:\n" #Untested [PGPERR_KEYIO_READING_LONG] us="I/O error reading file: %s" #Untested [PGPERR_KEYIO_FTELL_LONG] us="I/O error during call to ftell(): %s" #Untested [PGPERR_PRECEDING_ASSOCIATED_WITH] us="The preceeding error was associated with: " #Untested [NOT_PGP_KEYFILE] us="File is not a PGP key file. Aborting.\n" #Untested [FOLLOWING_KEYRING_PROBLEMS] us="The following problems were encountered while reading the keyring:\n" #Untested [OFFSET_DESCRIPTION] us="Offset Description\n" #Untested [UNKNOWN_SIGNATOR] us=" (Unknown signator, can't be checked)\n" #Untested [OPEN_PAREN_KEYID] us=" (KeyID:" #Untested [REVOKED] us="*REVOKED*" #Untested [ABOVE_KEY_REVOKED] us="\ WARNING: The above key has been revoked by its owner,\n\ possibly because the private key was compromised.\n\ You cannot use a revoked key for encryption.\n" #Untested [ABOVE_KEY_DISABLED] us="\ WARNING: The above key has been disabled on your keyring. If you\n\ wish to use it, use \"pgpk -d\" to reenable it.\n" [ABOVE_KEY_EXPIRED] us="\ WARNING: The above key is not valid for use after %s.\n" #Untested [STILL_USE_EXPIRED_KEY] us="\ WARNING: This key is not valid for use after %s.\n\ Do you still want to use it? [y/N] " #Untested [PGP_NAMETRUST_UNKNOWN] us="\ WARNING: Because the following name has not been certified\n\ by a trusted signature, it is not known with a high\n\ degree of confidence that the above key belongs to:\n" #Untested [PGP_NAMETRUST_UNTRUSTED] us="WARNING: The above key is not trusted to belong to:\n" #Untested [PGP_NAMETRUST_MARGINAL] us="\ WARNING: Because the following name is not certified with sufficient\n\ trusted signatures, it is not known with high confidence that the\n\ above key actually belongs to:\n" #Untested [PGP_NEWTRUST_NOT_TRUSTED] us="\n\ WARNING: The above key is not trusted to belong to:\n" #Untested [PGP_NEWTRUST_PARTIAL_TRUST] us="\n\ WARNING: Because the following name is not certified with sufficient\n\ trusted signatures, there is an estimated 1/%-ld probability that\n\ the above key may not belong to:\n" #Untested [PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KET] us="\n\ WARNING: The signing key is not trusted to belong to:\n" #Untested [PREVIOUSLY_APPROVED_KEY] us="\nBut you previously approved using the key with this name.\n" #Untested [DO_YOU_WISH_TO_USE_UNTRUSTED_KEY] us="\nDo you want to use the key with this name? [y/N] " #Untested [DONT_TRUST_SIGS_FROM_REVOKED_KEYS] us="\ WARNING: The signing key has been revoked by its owner,\n\ possibly because the private key was compromised.\n\ A signature made by this key should not be trusted.\n" #Untested [YOU_HAVE_DISABLED_SIGNING_KEY] us="WARNING: You have disabled the signing key\n" #Untested [KEY_HAS_EXPIRED] us="WARNING: This key is not valid for use after %s.\n" #Untested [PGP_NAMETRUST_UNTRUSTED_SIGNING_KEY] us="\nWARNING: The signing key is not trusted to belong to:\n" [MESSAGE_IS_ENCRYPTED] us="Message is encrypted.\n" [GETTING_KEY_FOR] us="Getting key for %s.\n" [LOOKING_UP_HOST] us="Looking up host %s\n" [ESTABLISHING_CONNECTION] us="Establishing connection\n" [SENDING_REQUEST] us="Sending request\n" [RECEIVING_DATA] us="Receiving data\n" [CLEANING_UP] us="Cleaning up\n" [COMPLETE] us="Complete.\n" [ONE_KEY_RECEIVED] us="One key received. Adding it to your keyring...\n" [MANY_KEYS_RECEIVED] us="%li keys received. Adding them to your keyring...\n" [UNKNOWN_PROTOCOL] us="Unknown protocol %s.\n" [SENDING_KEY] us="Sending key \r" [RECEIVING_RESPONSE] us="Receiving response \r" #Untested [NO_KEYFILE_SPECIFIED] us="-a argument requires a key file or URL to add to your keyring." #Untested [UNABLE_TO_IMPORT_KEYFILE] us="Unable to import keyfile \"%s\".\n" #Untested [ADDING_KEYS] us="Adding keys:\n\n" #Untested [UNABLE_TO_CREATE_KEYLIST] us="Unable to create keylist\n" #Untested [NO_KEYS_TO_ADD] us="No keys to add \n" #Untested [KEYS_ADDED_SUCCESSFULLY] us="Keys added successfully.\n" #Untested [INVALID_SELECTION] us="Invalid Selection. Please try again.\n" [TOO_MANY_MATCHES] us="Too many matches; aborting!\n" [CHOOSE_ONE_ABOVE] us="Choose one of the above: " [PLEASE_SELECT_A_USER_ID] us="Please select a user ID %s:\n" [PLEASE_SELECT_A_USER_ID_WITH_SIG] us="Please select a user ID with a signature %s:\n" [PLEASE_SELECT_A_KEY_WITH_USERID] us="Please select a key with a userid %s:" [PLEASE_SELECT_A_KEY_WITH_SIG] us="Please select a key with a signature %s:" [NO_USER_IDS_SELECTED] us="No user IDs selected %s.\n" [PLEASE_SELECT_A_SIGNATURE] us="Please select a signature %s:" [NO_SIGNATURES_SELECTED] us="No signatures selected %s.\n" [NO_KEYS_SELECTED] us="No keys selected %s.\n" [A_USERID_IS_REQUIRED] us="A user ID is required to select the key you want %s.\n\ Enter the key's user ID: " [UNABLE_TO_ORDER_KEYSET] us="Unable to order keyset\n" [PLEASE_SELECT_A_KEY] us="Please select a key %s:" [UNABLE_TO_CREATE_ITER] us="Unable to create key iterator\n" [NO_HTTP_SEND] us="HTTP cannot be used as a sending protocol at this time.\n" [UNKNOWN_PROTOCOL] us="Unknown protocol %s.\n" [NO_KEYS_SELECTED_FOR_EXTRACTION] us="No keys were selected for extraction.\n" [ENABLE_THIS_KEY] us="\nEnable this key? [y/N] " [DISABLE_THIS_KEY] us="\nDisable this key? [y/N] " [KEY_ENABLED] us="\nKey enabled.\n" [KEY_DISABLED] us="\nKey disabled.\n" [CANNOT_TRUST_INVALID_KEYS] us="This key is not valid, and cannot be assigned trust\n" [DO_YOU_WISH_TO_CHANGE_INTRODUCER_RELIABITY] us="Do you want to change your estimate of this key owner's reliability\n\ as an introducer of other keys [y/N]? " [NO_CHANGES_MADE] us="No changes made.\n" [DETERMINE_IN_YOUR_MIND] us="\n"\ "Make a determination in your own mind whether this key actually\n"\ "belongs to the person whom you think it belongs to, based on available\n"\ "evidence. If you think it does, then based on your estimate of\n"\ "that person's integrity and competence in key management, answer\n"\ "the following question:\n" [WOULD_YOU_TRUST_THIS_KEY_AND_OWNER] us="\nWould you trust this key owner to act as an introducer and\n\ certify other people's public keys to you?\n\ (1=I don't know. 2=No. 3=Usually. 4=Yes, always? " [UNRECOGNIZED_RESPONSE] us="Unrecognized response.\n" [UNABLE_TO_SET_TRUST] us="Unable to set trust\n" [DESCRIBE_CONFIDENCE_AS_INTRODUCER] us="\nDescribe the confidence you have in this person as an introducer.\n\ What are the odds that this key owner is going to be wrong about\n\ a key which she has signed as an introducer?\n" [CURRENTLY_INFINITE_TRUST] us="(Currently she is listed as having essentially zero chance\ of being wrong.)\n" [CURRENTLY_ZERO_TRUST] us="(Currently he is listed as not having any confidence as an\ introducer.)\n" [CURRENTLY_HAS_PERCENT_TRUST_START] us="(Currently she is listed as having a one in " [CURRENTLY_HAS_PERCENT_TRUST_END] us=" chance of being wrong.)\n" [ENTER_A_TRUST_RANGE] us="Enter a number from 1 to 2 million" [OR_HIT_RETURN_TO_LEAVE_UNCHANGED] us=", or hit return to leave unchanged." [WILL_BE_WRONG_TIME_TIME_IN] us="\nShe will be wrong one time in: " [DO_YOU_WANT_THIS_KEY_AXIOMATIC] us="\nDo you want to set this key as axiomatic [y/N]? " [PUBLIC_KEYRING_UPDATED] us="Public keyring updated.\n" [NEED_OLD_PASSPHRASE] us="Need old passphrase. " [NEED_NEW_PASSPHRASE] us="Need new passphrase. " [ENTER_IT_A_SECOND_TIME] us="Enter it a second time. " [PASSPHRASES_ARE_DIFFERENT] us="Passphrases are different\n" [CHANGING_MASTER_KEY_PASSPHRASE] us="Changing master key passphrase...\n" [PASSPHRASE_CHANGE_FAILED_MASTER] us="Passphrase change failed for master key.\n" [CHANGING_SUBKEY_PASSPHRASE] us="Changing subkey passphrase...\n" [PASSPHRASE_CHANGE_FAILED_SUBKEY] us="Passphrase change failed for subkey.\n" [CONFIRM_NON_AXIOMATIC] us="\nDo you want to unset this key as axiomatic [y/N]? " [CONFIRM_ADD_NEW_USERID] us="\nDo you want to add a new user ID [y/N]? " [ENTER_NEW_USERID] us="Enter the new user ID: " [NO_NAME_ENTERED] us="No name entered.\n" [UNABLE_TO_ADD_NEW_USERID] us="Unable to add new User ID (%d)\n" [CONFIRM_CHANGE_PASSPHRASE] us="\nDo you want to change your pass phrase (y/N)? " [CHANGE_PASSPHRASE_FAILED] us="Change passphrase failed (%d)\n" [CONFIRM_SET_DEFAULT_KEY] us="\nDo want to set this as your default key [y/N]? " [KEYRINGS_UPDATED] us="Keyrings updated.\n" [TO_BE_REMOVED_FRAGMENT] us="to be removed" [SIGNATURE_FRAGMENT] us="signature" [USERID_FRAGMENT] us="user ID" [KEY_FRAGMENT] us="key" [SELECTED_KEY_HAS_ONLY_ONE_USERID"] us="Selected key has only one user ID; can't be selected %s\n" [FOLLOWING_OBJECT_HAS_BEEN_SELECTED] us="\nThe following %s has been selected %s:\n" [UNABLE_TO_REMOVE_OBJECT] us="Unable to remove object\n" [TO_BE_SIGNED_FRAGMENT] us="to be signed" [VALIDITY_CERTIFICATION_WARNING] us="\n\n\ READ CAREFULLY: Based on your own direct first-hand knowledge, are\n\ you absolutely certain that you are prepared to solemnly certify that\n\ the above public key actually belongs to the user specified by the\n\ above user ID [y/N]? " [KEY_SIGNING_CANCELED] us="Key sign operation cancelled.\n" [KEY_SELECTED_FOR_SIGNING_IS] us="Key selected for signing is:\n" [KEY_SIGN_OPERATION_FAILED] us="Key sign operation failed\n" [KEY_SIG_CERT_ADDED] us="Key signature certificate added.\n" [TO_BE_REVOKED_FRAGMENT] us="to be revoked" [YOU_DONT_HAVE_THE_PRIVATE_KEY] us="You don't have the private key corresponding to that key\n" [SIG_ALREADY_REVOKED] us="That signature has already been revoked.\n\ Are you sure you want to add another revocation certificate [y/N]? " [SIG_REVOCATION_CANCELLED] us="Signature revocation cancelled.\n" [CONFIRM_REVOKE_KEY] us="Do you want to permanently revoke your public key\n\ by issuing a secret key compromise certificate on this key [y/N]? " [CONFIRM_REVOKE_SIG] us="Do you want to revoke this signature [y/N]? " [REVOKE_CANCELLED] us="Revoke cancelled.\n" [UNABLE_TO_GENERATE_REVOCATION_SIGNATURE] us="Unable to generate revocation signature\n" [KEY_REVOCATION_CERT_ADDED] us="Key revocation certificate added.\n" [SELECT_SIGNING_KEY] us="Please select a key to sign with:" [UNABLE_TO_OPEN_KEYRING] us="Unable to open keyring\n" [PGPINITAPP_FAILED] us="pgpInitApp failed\n" [KEY_IS_ALREADY_REVOKED] us="That key has already been revoked\n" [USE_FORCE_TO_ALLOW_OVERWRITING] us="In batchmode, use +force to allow overwriting of output files\n" [INCONSISTENT_RECIPIENT_SET] us="No algorithm available that all keys support.\n" [UNKNOWN_ERROR] us="Unknown error code %i!\n" [VERIFY_REMOVE_KEY_PUBLIC_PRIVATE] us="\nDo you wish to remove this key from your public and private \ keyrings?\n[y/N]? " [UNABLE_TO_ITERATE_KEY] us="Unable to iterate key!\n"; [CANCELED] us="Canceled.\n" [REMOVED] us="Removed.\n" [NEED_FILE_TO_SAVE] us="Save file as [%s] " [PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KEY] us="WARNING: The signing key is not trusted to belong to:\n" [TO_DISABLE_OR_ENABLE] us="to disable or enable" [TO_EDIT] us="to edit" [SELECTED_KEY_HAS_ONLY_ONE_USERID] us="Selected key has only one user ID, can't be selected %s\n" [NO_DEFAULT_PRIVATE_KEY] us="No default private key\n" [MULTIPLE_RECIPIENTS_MATCHED] us="WARNING: %i matches were found for recipient %s.\n\ This may not be what you intended.\n" [ENOUGH_THANK_YOU] us="\a -Enough, thank you.\n" [SEEDING_RANDPOOL_FROM_DEVICE] us="Seeding entropy pool with up to %u bits from %s...\n" [COMPLETE_READ_NUM_BITS] us="Complete. Read %u bits.\n" [RSA_AND_DH_RECIPS] us="WARNING: You are encrypting to both RSA and Diffie-Hellman keys.\n\ If the RSA user is still using PGP version 2.6.3 or earlier; 4.0; or 4.5,\n\ she will not be able to decrypt this message.\n" [ONLY_ONE_USER_ALLOWED] us=Specified operation may only be performed on one argument per execution.\n [CANNOT_DISABLE_AXIOMATIC_KEYS] us=You cannot disable an axiomatic key. Use pgpk -e to change your\n\ trust of this key, first.\n [RETRIEVING_URL] us="Retreiving %s:/%s:%i%s\n" [ADD_THESE_KEYS] us="\nAdd these keys to your keyring? [Y/n] " [ABORTED] us="\nAborted.\n" [WARNING_NO_MRK] us="A requested Message Recovery Key (MRK) for this key was not\ found.\n" [MRK_FOUND] us="Message Recovery Key (MRK) found. Will also encrypt this message\n\ to Key ID %s.\n" #Everything from here down is automatically generated. [PGPERR_OK] us="No errors\n" [PGPERR_GENERIC] us="Generic error (should be changed)\n" [PGPERR_NOMEM] us="Out of Memory\n" [PGPERR_BADPARAM] us="Invalid Parameter\n" [PGPERR_NO_FILE] us="Cannot open file\n" [PGPERR_NO_KEYBITS] us="Internal keyring bits exhausted\n" [PGPERR_BAD_HASHNUM] us="Unknown hash number\n" [PGPERR_BAD_CIPHERNUM] us="Unknown cipher number\n" [PGPERR_BAD_KEYLEN] us="Illegal key length for cipher\n" [PGPERR_SIZEADVISE] us="SizeAdvise promise not kept\n" [PGPERR_CONFIG] us="Error parsing configuration\n" [PGPERR_CONFIG_BADFUNC] us="Invalid configuration function\n" [PGPERR_CONFIG_BADOPT] us="Unknown configuration option\n" [PGPERR_STRING_NOT_FOUND] us="Requested string not found\n" [PGPERR_STRING_NOT_IN_LANGUAGE] us="Requested string not in language\n" [PGPERR_KEY_ISLOCKED] us="Key requires passphrase to unlock\n" [PGPERR_KEY_UNUNLOCKABLE] us="Key requires passphrase each time\n" [PGPERR_SIG_ERROR] us="Error while processing signature\n" [PGPERR_ADDSIG_ERROR] us="Cannot add signature\n" [PGPERR_CANNOT_DECRYPT] us="Cannot decrypt message\n" [PGPERR_ADDESK_ERROR] us="Cannot add encrypted session key\n" [PGPERR_UNK_STRING2KEY] us="Don't know how to convert pass\n" [PGPERR_BAD_STRING2KEY] us="Invalid conversion from pass\n" [PGPERR_ESK_BADTYPE] us="Unknown encrypted session key type\n" [PGPERR_ESK_TOOSHORT] us="Encrypted session key too short\n" [PGPERR_ESK_TOOLONG] us="Encrypted session key too long\n" [PGPERR_ESK_BADVERSION] us="Encrypted session key version\n" [PGPERR_ESK_BADALGORITHM] us="Encrypted session key algorithm\n" [PGPERR_ESK_BITSWRONG] us="Wrong number of bits in ESK\n" [PGPERR_ESK_NOKEY] us="Can't find key to decrypt session key\n" [PGPERR_ESK_NODECRYPT] us="Can't decrypt this session key\n" [PGPERR_ESK_BADPASS] us="Passphrase incorrect\n" [PGPERR_SIG_BADTYPE] us="Unknown signature type\n" [PGPERR_SIG_TOOSHORT] us="Signature too short\n" [PGPERR_SIG_TOOLONG] us="Signature too long\n" [PGPERR_SIG_BADVERSION] us="Signature version unknown\n" [PGPERR_SIG_BADALGORITHM] us="Signature algorithm unknown\n" [PGPERR_SIG_BITSWRONG] us="Wrong number of bits in signature\n" [PGPERR_SIG_NOKEY] us="Can't find necessary key to check sig\n" [PGPERR_SIG_BADEXTRA] us="Invalid Extra Data for Signature\n" [PGPERR_NO_PUBKEY] us="No public key found\n" [PGPERR_NO_SECKEY] us="No secret key found\n" [PGPERR_UNKNOWN_KEYID] us="No matching keyid found\n" [PGPERR_NO_RECOVERYKEY] us="Requested message recovery key\n" [PGPERR_COMMIT_INVALID] us="Invalid commit response\n" [PGPERR_CANNOT_HASH] us="Cannot hash message\n" [PGPERR_UNBALANCED_SCOPE] us="Unbalanced scope\n" [PGPERR_WRONG_SCOPE] us="Data sent in wrong scope\n" [PGPERR_UI_INVALID] us="Invalid UI Callback Object\n" [PGPERR_CB_INVALID] us="Invalid Parser Callback\n" [PGPERR_INTERRUPTED] us="Interrupted encrypt/decrypt\n" [PGPERR_PUBKEY_TOOSMALL] us="Public Key too small for data\n" [PGPERR_PUBKEY_TOOBIG] us="Public key is too big for this version\n" [PGPERR_PUBKEY_UNIMP] us="Unimplemented public key operation\n" [PGPERR_RSA_CORRUPT] us="Corrupt data decrypting RSA block\n" [PGPERR_PK_CORRUPT] us="Corrupt data decrypting public\n" [PGPERR_CMD_TOOBIG] us="Command to Buffer too big\n" [PGPERR_FIFO_READ] us="Incomplete read from Fifo\n" [PGPERR_VRFYSIG_WRITE] us="Data illegally written into\n" [PGPERR_VRFYSIG_BADANN] us="Invalid annotation to signature\n" [PGPERR_ADDHDR_FLUSH] us="Cannot flush buffer until size\n" [PGPERR_JOIN_BADANN] us="Invalid annotation to join module\n" [PGPERR_RANDSEED_TOOSMALL] us="Not enough data in randseed file\n" [PGPERR_ENV_LOWPRI] us="Env Var not set: priority too low\n" [PGPERR_ENV_BADVAR] us="Invalid environment variable\n" [PGPERR_CHARMAP_UNKNOWN] us="Unknown Charset\n" [PGPERR_FILE_PERMISSIONS] us="Unsufficient file permissions\n" [PGPERR_FILE_WRITELOCKED] us="File already open for writing\n" [PGPERR_FILE_BADOP] us="Invalid PgpFile Operation\n" [PGPERR_FILE_OPFAIL] us="PgpFile Operation Failed\n" [PGPERR_IMMUTABLE] us="Attempt to change an\n" [PGPERR_PARSEASC_INCOMPLETE] us="Ascii Armor Input Incomplete\n" [PGPERR_PARSEASC_BADINPUT] us="PGP text input is corrupted\n" [PGPERR_FILEFIFO_SEEK] us="Temp-File Seek Error\n" [PGPERR_FILEFIFO_WRITE] us="Temp-File Write Error\n" [PGPERR_FILEFIFO_READ] us="Temp-File Read Error\n" [PGPERR_FILEIO_BADPKT] us="Corrupted or bad packet in\n" [PGPERR_SYSTEM_PGPK] us="Error Executing PGPK Program\n" [PGPERR_KEYIO_READING] us="I/O error reading keyring\n" [PGPERR_KEYIO_WRITING] us="I/O error writing keyring\n" [PGPERR_KEYIO_FTELL] us="I/O error finding keyring position\n" [PGPERR_KEYIO_SEEKING] us="I/O error seeking keyring\n" [PGPERR_KEYIO_OPENING] us="I/O error opening keyring\n" [PGPERR_KEYIO_CLOSING] us="I/O error closing keyring\n" [PGPERR_KEYIO_FLUSHING] us="I/O error flushing keyring\n" [PGPERR_KEYIO_EOF] us="Unexpected EOF fetching key packet\n" [PGPERR_KEYIO_BADPKT] us="Bad data found where key\n" [PGPERR_KEYIO_BADFILE] us="Not a keyring file\n" [PGPERR_TROUBLE_KEYSUBKEY] us="Key matches subkey\n" [PGPERR_TROUBLE_SIGSUBKEY] us="Signature by subkey\n" [PGPERR_TROUBLE_BADTRUST] us="Trust packet malformed\n" [PGPERR_TROUBLE_UNKPKTBYTE] us="Unknown packet byte in keyring\n" [PGPERR_TROUBLE_UNXSUBKEY] us="Unexpected subkey (before key)\n" [PGPERR_TROUBLE_UNXNAME] us="Unexpected name (before key)\n" [PGPERR_TROUBLE_UNXSIG] us="Unexpected sig (before key)\n" [PGPERR_TROUBLE_UNXUNK] us="Packet of unknown type in unexpected\n" [PGPERR_TROUBLE_UNXTRUST] us="Unexpected trust packet\n" [PGPERR_TROUBLE_KEY2BIG] us="Key grossly oversized\n" [PGPERR_TROUBLE_SEC2BIG] us="Secret key grossly oversized\n" [PGPERR_TROUBLE_NAME2BIG] us="Name grossly oversized\n" [PGPERR_TROUBLE_SIG2BIG] us="Sig grossly oversized\n" [PGPERR_TROUBLE_UNK2BIG] us="Packet of unknown type too large\n" [PGPERR_TROUBLE_DUPKEYID] us="Duplicate KeyID, different keys\n" [PGPERR_TROUBLE_DUPKEY] us="Duplicate key (in same keyring)\n" [PGPERR_TROUBLE_DUPSEC] us="Duplicate secret (in same keyring)\n" [PGPERR_TROUBLE_DUPNAME] us="Duplicate name (in same keyring)\n" [PGPERR_TROUBLE_DUPSIG] us="Duplicate signature (in same keyring)\n" [PGPERR_TROUBLE_DUPUNK] us="Duplicate unknown \"thing\" in keyring\n" [PGPERR_TROUBLE_BAREKEY] us="Key found with no names\n" [PGPERR_TROUBLE_VERSION_BUG_PREV] us="Bug introduced by legal_kludge\n" [PGPERR_TROUBLE_VERSION_BUG_CUR] us="Bug introduced by legal_kludge\n" [PGPERR_TROUBLE_OLDSEC] us="Passphrase is out of date\n" [PGPERR_TROUBLE_NEWSEC] us="Passphrase is newer than another\n" [PGPERR_KEY_NO_RSA_ENCRYPT] us="No RSA Encryption/Signature support\n" [PGPERR_KEY_NO_RSA_DECRYPT] us="No RSA Decryption/Verification support\n" [PGPERR_KEY_NO_RSA] us="No RSA key support\n" [PGPERR_KEY_LONG] us="Key packet has trailing junk\n" [PGPERR_KEY_SHORT] us="Key packet truncated\n" [PGPERR_KEY_VERSION] us="Key version unknown\n" [PGPERR_KEY_PKALG] us="Key algorithm unknown\n" [PGPERR_KEY_MODMPI] us="Key modulus mis-formatted\n" [PGPERR_KEY_EXPMPI] us="Key exponent mis-formatted\n" [PGPERR_KEY_MODEVEN] us="RSA public modulus is even\n" [PGPERR_KEY_EXPEVEN] us="RSA public exponent is even\n" [PGPERR_KEY_MPI] us="Key component mis-formatted\n" [PGPERR_KEY_UNSUPP] us="Key is not supported by this version of PGP\n" [PGPERR_SIG_LONG] us="Signature packet has trailing junk\n" [PGPERR_SIG_SHORT] us="Signature truncated\n" [PGPERR_SIG_MPI] us="Signature integer mis-formatted\n" [PGPERR_SIG_PKALG] us="Signature algorithm unknown\n" [PGPERR_SIG_EXTRALEN] us="Bad signature extra material (not 5)\n" [PGPERR_SIG_VERSION] us="Signature version unknown\n" [PGPERR_KEYDB_BADPASSPHRASE] us="Bad passphrase\n" [PGPERR_KEYDB_KEYDBREADONLY] us="Key database is read-only\n" [PGPERR_KEYDB_NEEDMOREBITS] us="Insufficient random bits\n" [PGPERR_KEYDB_OBJECTREADONLY] us="Object is read-only\n" [PGPERR_KEYDB_INVALIDPROPERTY] us="Invalid property name\n" [PGPERR_KEYDB_BUFFERTOOSHORT] us="Buffer too short\n" [PGPERR_KEYDB_CORRUPT] us="Key database is corrupt\n" [PGPERR_KEYDB_VERSIONTOONEW] us="Data is too new to be read\n" [PGPERR_KEYDB_IOERROR] us="Input/output error\n" [PGPERR_KEYDB_VALUETOOLONG] us="Value too long\n" [PGPERR_KEYDB_DUPLICATE_CERT] us="Duplicate certification\n" [PGPERR_KEYDB_DUPLICATE_USERID] us="Duplicate UserID\n" [PGPERR_KEYDB_CERTIFYINGKEY_DEAD] us="Certifying key no longer\n" [PGPERR_KEYDB_OBJECT_DELETED] us="Object has been deleted\n" $Id$ mutt-1.5.21/contrib/patch.slang-1.2.2.keypad.10000644000175000017500000000420410770271152015352 00000000000000diff -ur slang.old/src/slcurses.c slang/src/slcurses.c --- slang.old/src/slcurses.c Fri Apr 24 09:16:46 1998 +++ slang/src/slcurses.c Sat Jul 4 07:30:31 1998 @@ -134,7 +134,10 @@ } else if (ch == 0xFFFF) return ERR; SLang_ungetkey (ch); - return SLkp_getkey (); + if ((ch = SLkp_getkey ()) != SL_KEY_ERR) + return ch; + else + return SLang_getkey (); } return SLang_getkey (); } diff -ur slang.old/src/slkeymap.c slang/src/slkeymap.c --- slang.old/src/slkeymap.c Fri Apr 24 09:16:47 1998 +++ slang/src/slkeymap.c Sat Jul 4 07:41:42 1998 @@ -343,6 +343,8 @@ SLang_Key_Type *SLang_do_key(SLKeyMap_List_Type *kml, int (*getkey)(void)) { + unsigned char SLang_Undo_Buffer [SL_MAX_INPUT_BUFFER_LEN]; + int SLang_Undo_Len = 0; register SLang_Key_Type *key, *next, *kmax; unsigned int len; unsigned char input_ch; @@ -356,6 +358,7 @@ return NULL; input_ch = (unsigned char) SLang_Last_Key_Char; + SLang_Undo_Buffer [SLang_Undo_Len++] = input_ch; key = (SLang_Key_Type *) &((kml->keymap)[input_ch]); @@ -372,7 +375,11 @@ key = kml->keymap + input_ch; if (key->type == 0) + { + if (getkey == (int (*)(void)) SLang_getkey) + SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len); return NULL; + } } /* It appears to be a prefix character in a key sequence. */ @@ -385,6 +392,7 @@ { SLang_Key_TimeOut_Flag = 1; SLang_Last_Key_Char = (*getkey)(); + SLang_Undo_Buffer [SLang_Undo_Len++] = (unsigned char) SLang_Last_Key_Char; SLang_Key_TimeOut_Flag = 0; len++; @@ -458,6 +466,8 @@ kmax = next; } + if (getkey == (int (*)(void)) SLang_getkey) + SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len); return NULL; } diff -ur slang.old/src/slkeypad.c slang/src/slkeypad.c --- slang.old/src/slkeypad.c Fri Apr 24 09:16:47 1998 +++ slang/src/slkeypad.c Sat Jul 4 07:30:31 1998 @@ -110,7 +110,7 @@ key = SLang_do_key (Keymap_List, (int (*)(void)) SLang_getkey); if ((key == NULL) || (key->type != SLKEY_F_KEYSYM)) { - SLang_flush_input (); + /* SLang_flush_input (); */ return SL_KEY_ERR; } mutt-1.5.21/contrib/Mush.rc0000644000175000017500000000067110770271152012422 00000000000000# # Key bindings similar to those of MUSH # # $Id$ bind index . display-message bind index t display-message macro index n "" bind index + next-entry bind index j next-entry bind index J next-entry bind index - previous-entry bind index k previous-entry bind index K previous-entry bind index { top-page bind index } bottom-page bind index f change-folder bind index \cu sync-mailbox bind index * flag-message mutt-1.5.21/contrib/Pine.rc0000644000175000017500000000177610770271152012410 00000000000000# # This file contains commands to change the keybindings in Mutt to be # similar to those of PINE 3.95. # # # $Id$ # bind index v display-message bind index p previous-undeleted bind index n next-undeleted bind index ' ' next-page bind index c mail bind index g change-folder bind index w search bind index y print-message bind index x sync-mailbox bind index $ sort-mailbox bind index a tag-prefix bind index \; tag-entry # Not possible to simulate zoom-out... macro index z "~T" bind pager p previous-undeleted bind pager n next-undeleted bind pager ' ' next-page bind pager g change-folder bind pager c mail bind pager w search bind pager y print-message bind pager \n noop # PINE prints "No default action for this menu." bind pager previous-line bind pager next-line bind compose \cx send-message # PINE has different defaults for this variables set folder=~/mail set record=+sent-mail set nosave_name set postponed=~/postponed-msgs set hdr_format="%Z %3C %{%b %d} %-19.19L (%5c) %s" mutt-1.5.21/contrib/gpg.rc0000644000175000017500000000732210770271152012263 00000000000000# -*-muttrc-*- # # Command formats for gpg. # # This version uses gpg-2comp from # http://70t.de/download/gpg-2comp.tar.gz # # $Id$ # # %p The empty string when no passphrase is needed, # the string "PGPPASSFD=0" if one is needed. # # This is mostly used in conditional % sequences. # # %f Most PGP commands operate on a single file or a file # containing a message. %f expands to this file's name. # # %s When verifying signatures, there is another temporary file # containing the detached signature. %s expands to this # file's name. # # %a In "signing" contexts, this expands to the value of the # configuration variable $pgp_sign_as. You probably need to # use this within a conditional % sequence. # # %r In many contexts, mutt passes key IDs to pgp. %r expands to # a list of key IDs. # Note that we explicitly set the comment armor header since GnuPG, when used # in some localiaztion environments, generates 8bit data in that header, thereby # breaking PGP/MIME. # decode application/pgp set pgp_decode_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" # verify a pgp/mime signature set pgp_verify_command="gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f" # decrypt a pgp/mime attachment set pgp_decrypt_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" # create a pgp/mime signed attachment # set pgp_sign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f" set pgp_sign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f" # create a application/pgp signed (old-style) message # set pgp_clearsign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f" set pgp_clearsign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f" # create a pgp/mime encrypted attachment # set pgp_encrypt_only_command="pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" # create a pgp/mime encrypted and signed attachment # set pgp_encrypt_sign_command="pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" set pgp_encrypt_sign_command="pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" # import a key into the public key ring set pgp_import_command="gpg --no-verbose --import %f" # export a key from the public key ring set pgp_export_command="gpg --no-verbose --export --armor %r" # verify a key set pgp_verify_key_command="gpg --verbose --batch --fingerprint --check-sigs %r" # read in the public key ring set pgp_list_pubring_command="gpg --no-verbose --batch --quiet --with-colons --list-keys %r" # read in the secret key ring set pgp_list_secring_command="gpg --no-verbose --batch --quiet --with-colons --list-secret-keys %r" # fetch keys # set pgp_getkeys_command="pkspxycwrap %r" # pattern for good signature - may need to be adapted to locale! # set pgp_good_sign="^gpgv?: Good signature from " # OK, here's a version which uses gnupg's message catalog: # set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`" # This version uses --status-fd messages set pgp_good_sign="^\\[GNUPG:\\] GOODSIG" mutt-1.5.21/contrib/pgp2.rc0000644000175000017500000000310710770271152012353 00000000000000# -*-muttrc-*- # # PGP command formats for PGP 2. # # $Id$ # # # Note: In order to be able to read your own messages, you'll have # the +encrypttoself command line parameter to the pgp_encrypt_only_command # and pgp_encrypt_sign_command variables. # # decode application/pgp set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp +language=mutt +verbose=0 +batchmode -f" # verify a pgp/mime signature set pgp_verify_command="pgp +language=mutt +verbose=0 +batchmode -t %s %f" # decrypt a pgp/mime attachment set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -f" # create a pgp/mime signed attachment set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -abfst %?a? -u %a?" # create a pgp/mime encrypted attachment set pgp_encrypt_only_command="pgp +language=mutt +verbose=0 +batchmode -aeft %r < %f" # create a pgp/mime encrypted and signed attachment set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -aefts %?a?-u %a? %r" # import a key into the public key ring set pgp_import_command="pgp -ka %f +language=mutt" # export a key from the public key ring set pgp_export_command="pgp -kxaf +language=mutt %r" # verify a key set pgp_verify_key_command="pgp -kcc +language=mutt %r" # read in the public key ring set pgp_list_pubring_command="pgpring -2 %r" # read in the secret key ring set pgp_list_secring_command="pgpring -s -2 %r" # pattern for good signature set pgp_good_sign="Good signature" mutt-1.5.21/contrib/pgp5.rc0000644000175000017500000000323310770271152012356 00000000000000# -*-muttrc-*- # # PGP command formats for PGP 5. # # $Id$ # # decode application/pgp set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgpv +language=mutt +verbose=0 +batchmode -f --OutputInformationFD=0" # verify a pgp/mime signature set pgp_verify_command="pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=1 %f %s" # string that the verify command outputs if the signature is good set pgp_good_sign = "Good signature" # decrypt a pgp/mime attachment set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=2 -f" # create a pgp/mime signed attachment set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgps +language=mutt +verbose=0 +batchmode -abft %?a? -u %a?" # create a pgp/mime encrypted attachment set pgp_encrypt_only_command="pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -aft -- -r %r < %f" # create a pgp/mime encrypted and signed attachment set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -afts %?a? -u %a? -- -r %r" # import a key into the public key ring set pgp_import_command="pgpk -a +language=mutt --OutputInformationFD=1 %f" # export a key from the public key ring set pgp_export_command="pgpk -xa +language=mutt --OutputInformationFD=1 %r" # verify a key set pgp_verify_key_command="pgpk -c +batchmode +language=mutt --OutputInformationFD=1 %r" # read in the public key ring set pgp_list_pubring_command="pgpring -5 %r" # read in the secret key ring set pgp_list_secring_command="pgpring -5 -s %r" mutt-1.5.21/contrib/pgp6.rc0000644000175000017500000000312710770271152012361 00000000000000# -*-muttrc-*- # # PGP command formats for PGP 6. # # $Id$ # # decode application/pgp set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp6 +compatible +verbose=0 +batchmode -f" # verify a pgp/mime signature set pgp_verify_command="pgp6 +compatible +verbose=0 +batchmode -t %s %f" # decrypt a pgp/mime attachment set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode -f" # create a pgp/mime signed attachment set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode -abfst %?a? -u %a?" # create a pgp/mime encrypted attachment set pgp_encrypt_only_command="pgp6 +compatible +verbose=0 +encrypttoself +batchmode -aeft %r < %f" # create a pgp/mime encrypted and signed attachment set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +encrypttoself +batchmode +clearsig=off -aefts %?a? -u %a? %r" # import a key into the public key ring set pgp_import_command="pgp6 +compatible -ka %f " # export a key from the public key ring set pgp_export_command="pgp6 +compatible -kxaf %r" # verify a key set pgp_verify_key_command="pgp6 +compatible -kcc %r" # read in the public key ring set pgp_list_pubring_command="pgpring -5 %r" # read in the secret key ring set pgp_list_secring_command="pgpring -s -5 %r" # create a clearsigned message set pgp_clearsign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode +clearsig -afst %?a? -u %a?" # fetch keys set pgp_getkeys_command="pkspxycwrap %r" mutt-1.5.21/contrib/Tin.rc0000644000175000017500000000113610770271152012235 00000000000000# From: Tom Gilbert # To: mutt-users@mutt.org # Subject: Re: Lynx-like movements # Date: Sat, 4 Sep 1999 21:09:00 +0000 # # These key bindings may be nice for notorious lynx or tin users. # bind pager previous-line bind pager next-line bind pager exit bind pager view-attachments bind attach exit bind attach view-attach bind index display-message macro index "?" bind browser select-entry macro browser "!" mutt-1.5.21/contrib/sample.muttrc0000644000175000017500000003124510770271152013702 00000000000000# $Id$ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # ME's personal .muttrc (Mutt 0.92.5) # # The format of this file is one command per line. Everything after a pound # sign (#) is a comment, unless a backward slash (\) precedes it. Note: In # folder-hook and send-hook you need to account for two levels of dequoting # (see manual). # # Note: $folder should be set _before_ any other path vars where `+' or `=' # is used because paths are expanded when parsed # #set folder=~/Mail # where i keep my mailboxes #set abort_unmodified=yes # automatically abort replies if I don't # change the message set alias_file=~/.mail_aliases # where I keep my aliases #set allow_8bit # never do Q-P encoding on legal 8-bit chars set arrow_cursor # use -> instead of hiliting the whole line #set ascii_chars # use ASCII instead of ACS chars for threads #set askbcc #set askcc #set attribution="On %d, %n wrote:" # how to attribute replies set autoedit # go to the editor right away when composing #set auto_tag # always operate on tagged messages #set charset="iso-8859-1" # character set for your terminal set noconfirmappend # don't ask me if i want to append to mailboxes #set confirmcreate # prompt when creating new files set copy=yes # always save a copy of outgoing messages set delete=yes # purge deleted messages without asking set edit_headers # let me edit the message header when composing #set editor="emacs -nw" # editor to use when composing messages #set bounce=yes # don't ask about bouncing messages, just do it #set fast_reply # skip initial prompts when replying #set fcc_attach # keep attachments in copies of sent messages? #set force_name # fcc by recipient, create if mailbox doesn't exist #set forward_decode # weed and MIME decode forwaded messages #set forward_format="[%a: %s]" # subject to use when forwarding messages #set forward_quote # quote the header and body of forward msgs #set index_format="%4C %Z %{%m/%d} [%2N] %-15.15F (%4c) %s" set index_format="%4C %Z %{%m/%d} %-15.15F (%4c) %s" # format of the index #set hdrs # include `my_hdr' lines in outgoing messages #set header # include message header when replying set help # show the help lines #set history=20 # number of lines of history to remember #set hostname="mutt.org" # my DNS domain set include # always include messages when replying #set indent_string="> " # how to quote replied text #set locale="C" # locale to use for printing time #set mailcap_path="~/.mailcap:/usr/local/share/mailcap" set nomark_old # i don't care about whether a message is old set mail_check=10 # how often to poll for new mail set mbox=+mbox # where to store read messages #set menu_scroll # no implicit next-page/prev-page #set metoo # remove my address when replying set mime_forward # use message/rfc822 type to forward messages set move=yes # don't ask about moving messages, just do it #set pager=less # some people prefer an external pager #set pager_context=3 # no. of lines of context to give when scrolling #set pager_format="-%S- %-20.20f %s" # format of the pager status bar set pager_index_lines=6 # how many index lines to show in the pager #set pager_stop # don't move to the next message on next-page #set pgp_strict_enc # use Q-P encoding when needed for PGP set postponed=+postponed # mailbox to store postponed messages in #set post_indent_string='---end quoted text---' #set print=ask-yes # ask me if I really want to print messages set print_command=/bin/false # how to print things (I like to save trees) set noprompt_after # ask me for a command after the external pager exits #set quote_regexp="^ *[a-zA-Z]*[>:#}]" # how to catch quoted text set read_inc=25 # show progress when reading a mailbox #set recall # prompt to recall postponed messages set record=+outbox # default location to save outgoing mail set reply_to # always use reply-to if present #set reply_regexp="^(re:[ \t]*)+"# how to identify replies in the subject: #set resolve # move to the next message when an action is performed #set reverse_alias # attempt to look up my names for people set reverse_name # use my address as it appears in the message # i am replying to set nosave_empty # remove files when no messages are left #set save_name # save outgoing messages by recipient, if the #set sendmail="/usr/lib/sendmail -oi -oem" # how to deliver mail #set shell="/bin/zsh" # program to use for shell escapes #set signature="~/.signature" # file which contains my signature # I subscribe to a lot of mailing lists, so this is _very_ useful. This # groups messages on the same subject to make it easier to follow a # discussion. Mutt will draw a nice tree showing how the discussion flows. set sort=threads # primary sorting method #set sort_aux=reverse-date-received # how to sort subthreads #set sort_aux=last-date # date of the last message in thread set sort_browser=reverse-date # how to sort files in the dir browser set spoolfile='~/mailbox' # where my new mail is located #set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b? %l]---(%s)-%>-(%P)---" #set status_on_top # some people prefer the status bar on top #set strict_threads # don't thread by subject set tilde # virtual lines to pad blank lines in the pager #set timeout=0 # timeout for prompt in the index menu #set tmpdir=~/tmp # where to store temp files #set to_chars=" +TCF" #set use_8bitmime # enable the -B8BITMIME sendmail flag set nouse_domain # don't qualify local addresses with $domain #set use_from # always generate the `From:' header field set implicit_autoview=yes # pager shows parts having a mailcap viewer set pgp_verify_sig=no # don't automatically verify message signatures #set visual=vim # editor invoked by ~v in the builtin editor #set nowait_key # prompt when a pipe returns normal status set write_inc=25 # show progress while writing mailboxes # only enable the following IFF you have sendmail 8.8.x or you will not # be able to send mail!!! #set dsn_notify='failure,delay' # when to return an error message #set dsn_return=hdrs # what to return in the error message # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Header fields I don't normally want to see # ignore * # this means "ignore all lines by default" # I do want to see these fields, though! unignore from: subject to cc mail-followup-to \ date x-mailer x-url # this shows how nicely wrap long lines # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Color definitions # #color normal white default color hdrdefault red default color quoted brightblue default color signature red default color indicator brightyellow red color error brightred default color status yellow blue color tree magenta default # the thread tree in the index menu color tilde magenta default color message brightcyan default color markers brightcyan default color attachment brightmagenta default color search default green # how to hilite search patterns in the pager color header brightred default ^(From|Subject): color body magenta default "(ftp|http|https)://[^ ]+" # point out URLs color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses color underline brightgreen default # attributes when using a mono terminal #mono header underline ^(From|Subject): mono quoted bold # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Key bindings # # maps: # alias alias menu # attach attachment menu # browser directory browser # compose compose menu # index message index # pgp pgp menu # postpone postponed message recall menu # generic generic keymap for all of the above # editor line editor # pager text viewer # bind generic "\e<" first-entry # emacs-like bindings for moving to top/bottom bind generic \e> last-entry bind generic { top-page bind generic } bottom-page bind generic \177 last-entry macro index \cb " urlview" # simulate the old browse-url function macro index S "+spam" macro pager S "+spam" #macro index \# "bug" # search for bugs #macro index "\"" " set realname=\"real hairy macro\" ?realname" # and a comment to boot! #macro index f1 "woohoo!" bind pager G bottom # just like vi and less #macro pager \Ck " pgp -kaf" # a comment is valid here #macro pager X " morepgp" # pipe PGP message to a script #bind editor \cy eol # make ^Y jump to the end of the line # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # User Defined Headers # #my_hdr X-Useless-Header: Look ma, it's a \# sign! # real comment #my_hdr X-Operating-System: `uname -a` # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Specify default filename when saving messages # # save-hook [!] # # is provided as default when saving messages from #save-hook mutt- =mutt-mail #save-hook aol\\.com$ +spam save-hook ^judge +diplomacy # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Multiple spool mailboxes # # mbox-hook [!] # # Read mail in is moved to when is # closed. #mbox-hook =mutt-users.in =mutt-users #mbox-hook +TEST +inbox # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Change settings based upon message recipient # # send-hook [!] # # is executed when sending mail to an address matching #send-hook mutt- 'set signature=~/.sigmutt; my_hdr From: Mutt User ' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Specify where to save composed messages # # fcc-hook [!] # # is recipient(s), is where to save a copy #fcc-hook joe +joe #fcc-hook bob +bob # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Change settings based on mailbox # # folder-hook [!] # # is executed when opening a mailbox matching #folder-hook . 'set sort=date-sent' #folder-hook mutt 'set index_format="%4C %Z %02m/%02N %-20.20F (%4l) %s"' #folder-hook =mutt my_hdr Revolution: \#9 # real comment #folder-hook . 'set reply_regexp="^re:[ \t]*"' # this mailing list prepends "[WM]" to all non reply subjects, so set # $reply_regexp to ignore it # Warning: May break threads for other people. #folder-hook +wmaker 'set reply_regexp="^(re:[ \t]*)?\[WM\][ \t]*"' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Aliases # # alias
[ ,
... ] #alias exam "\# to annoy michael" #alias me Michael Elkins # me! alias mutt-dev Mutt Development List # power users alias mutt-users Mutt User List alias mutt-announce Mutt Announcement List alias wmaker WindowMaker Mailing List # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Mailboxes to watch for new mail # # mailboxes [ ... ] # mailboxes ! +mutt-dev +mutt-users +open-pgp +wmaker +hurricane +vim +ietf \ +drums #mailboxes `echo $HOME/Mail/*` # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Specify the order of the headers to appear when displaying a message # # hdr_order [ ... ] # unhdr_order * # forget the previous settings hdr_order date from subject to cc # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Identify mailing lists I subscribe to # # lists [ ... ] lists ^mutt-dev@mutt\\.org$ ^mutt-users@mutt\\.org$ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Automatically use entries from ~/.mailcap to view these MIME types # # auto_view [ ... ] auto_view application/x-gunzip auto_view application/x-gzip # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Scoring # # score # # 9999 and -9999 are special values which cause processing of hooks to stop # at that entry. If you prefix the score with an equal sign (=), the score # is assigned to the message and processing stops. #score '~f ^me@cs\.hmc\.edu$' 1000 #score '~t mutt | ~c mutt' =500 #score '~f aol\.com$' -9999 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # I use Mutt on several different machines, so I put local config commands # in a separate file so I can have the rest of the settings the same on all # machines. # source ~/.muttrc-local # config commands local to this site # EOF mutt-1.5.21/contrib/sample.mailcap0000644000175000017500000000020610770271152013763 00000000000000# $Id$ text/html; netscape -remote openURL\(%s\) image/gif; xv %s image/jpg; xv %s application/pgp-keys; pgp -f < %s ; copiousoutput mutt-1.5.21/contrib/sample.muttrc-tlr0000644000175000017500000002511010770271152014473 00000000000000# -*-muttrc-*- # # Mutt configuration file of Thomas Roessler # # Use and distribute freely. # # Note: This file doesn't contain any personal customization, i.e., # using it won't make you send messages with my name in the header. # # Things to change: You probably want to change the "priv.rc" source # command in the end of this file. Also, it's likely you want to have # a look at the the $editor and $tmpdir variables. # # # MIME settings # # auto_view application/ms-tnef text/x-vcard # auto_view application/x-chess application/x-lotus-notes # auto_view text/html application/x-gzip application/x-gunzip # auto_view application/rtf application/x-rath # auto_view application/msword auto_view text/html mime_lookup application/octet-stream # alternative_order application/pgp text/html text/enriched text/plain alternative_order text/plain text/html # # Key bindings # # # A few of these may resemble Pine. ups. # bind alias " " tag-entry bind alias \n select-entry bind alias \r select-entry bind attach i exit bind attach n next-entry bind attach p previous-entry bind attach " " select-entry bind attach y print-entry bind browser last-entry bind browser first-entry bind editor "\e" kill-word bind editor "\e" kill-word bind editor "" complete-query bind editor "\eq" complete-query bind editor "\Ct" transpose-chars bind generic "\CV" next-page bind generic "\Ca" first-entry bind generic "\Ce" last-entry bind generic "\eV" previous-page bind generic "\ev" previous-page bind generic + tag-entry bind generic ^ first-entry bind generic a tag-prefix bind generic $ last-entry bind generic q exit bind index ";" limit bind index "\Ce" last-entry # override edit-type bind index "\eV" previous-page # override collapse-something bind index "\e<" collapse-thread bind index "\eq" query bind index $ last-entry bind index * flag-message bind index delete-message bind index last-entry bind index first-entry bind index J next-entry bind index K previous-entry bind index Q quit bind index R group-reply bind index \em recall-message bind index a tag-prefix bind index m mail bind index p previous-entry bind index t create-alias bind index x sync-mailbox bind index y print-message bind index n next-entry bind index "\ev" previous-page bind pager "\Cn" next-line bind pager "\Cp" previous-line bind pager + tag-message bind pager * flag-message bind pager delete-message bind pager next-line bind pager bottom bind pager top bind pager previous-line bind pager G group-reply bind pager R group-reply bind pager \em recall-message bind pager t display-toggle-weed # like slrn bind pager y print-message bind query i exit # make it feel like emacs macro generic "\ex" ":exec " macro pager "\ex" ":exec " macro generic "\eX" "\ex" macro pager "\eX" "\ex" macro index "~" ";~" # macro index "%" ";%" # Thread tagging bind index "\et" tag-subthread bind index "\eT" tag-thread # for majordomo list owner and moderator jobs macro index "\ea" ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n" macro pager "\ea" ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n" # emulate the old URL-browser key bindings. macro pager "\Cb" "| urlview -\n" macro index "\Cb" "| urlview -\n" # permit limiting from the pager. macro pager "~" "~" macro pager ";" "" # emulate the old POP-feature bindings macro index G "!fetchmail\n" macro pager G "!fetchmail\n" # razor-report: Report spam. # macro index S ":set nopipe_decode nowait_key\n|razor-report > /dev/null 2> /dev/null\ns+junk\n" # macro pager S ":set nopipe_decode nowait_key\n|razor-report > /dev/null 2> /dev/null\ns+junk\n" macro index S "s+junk\n" macro pager S "s+junk\n" # # Colors # # This is a tiny hack, so I can get different # color schemes on the console and under X11. source ~/.mutt/colors.`if [ "$TERM" = "linux" ] ; then echo linux ; else echo default ; fi` mono index bold ~F # mono body bold '\*[^*]+\*' # mono body underline '_[^_]+_' # # The header weed list # ignore delivered-to ignore content- errors-to in-reply-to mime-version ignore lines precedence status ignore nntp-posting-host path old-return-path received references ignore priority >received >>received ignore resent- return-path xref path ignore x400 importance sensitivity autoforward original-encoded-information ignore x- thread- ignore DomainKey-Signature mail-followup-to ignore list- comments posted-to approved-by unignore x-spam-level x-url x-mailer list-id x-no-spam x-archived-at unignore x-diagnostic hdr_order from to cc date subject reply-to mail-followup-to list-id # # Various settings # set abort_nosubject=no # Let me send messages with an empty subject set abort_unmodified=no # Let me send empty messages set alias_file=~/.mutt/aliases # Where to store aliases unset allow_8bit # Produce correct MIME unset arrow_cursor # Use the bar cursor set askcc # Ask me about CCs unset bounce_delivered # Don't include Delivered-to with bounces # set charset=iso-8859-1 # The local character set set send_charset="us-ascii:iso-8859-1:iso-8859-15:iso-8859-2:utf-8" set confirmcreate # Ask me about creating new files unset confirmappend # Don't ask me about appending to files set delete=yes # Don't ask me whether or not I meant to delete messages # set display_filter="tr '\240\204\223\226' ' \"\"-'" # fix some funny characters set edit_hdrs # I want to edit the headers. set editor="/usr/bin/jed %s -f 'mail_mode();'" # Invoke jed with mail_mode. This may # or may not work for you. set noenvelope_from # set messages' envelope-from header. set fcc_clear # Store local copies of messages in the clear. set folder=~/Mail # Where my mail folders go set followup_to # Create Mail-Followup-To headers. unset force_name # Don't create save folders which don't exist. set forward_decode # Decode messages when forwarding. set forward_decrypt # Decrypt messages when forwarding. set nohelp # No help line. set include=yes # Always include a copy when replying. set mark_old # Distinguish between seen (but unread) and new messages set mbox=+mbox # The (unused) mbox file. unset metoo # Remove me from CC headers. set mime_fwd=ask-no # Ask me whether or not to create a MIME-encapsulated forward set move=no # Don't use mbox set pager_stop # Don't fall through to the next message in the pager set pager_index_lines=0 # The pager index is ugly. set pgp_replyencrypt # Encrypt when replying to encrypted messages. set pgp_replysignencrypted # Sign when replying to encrypted messages. set pgp_show_unusable="no" # Don't display unusable keys. set pgp_sort_keys="keyid" # Sort keys by key ID set pgp_replysign # Sign when replying to signed messages. set pgp_timeout=3600 # Forget the PGP passphrase after an hour. set pipe_decode # Decode messages I pipe to commands, typically to patch(1). set postponed=~/.mutt/postponed # Where to put postponed messages set print=ask-no # Don't waste paper set print_cmd="enscript -2Gr -Email" # Two columns, landscape, fancy header. set print_split=yes # Invoke enscript once per message set quit=yes # Don't ask me whether or not I want to quit. set quote_regexp="^ *[a-zA-Z]*[>|][>:|]*" # Recognize quotes in the pager. set read_inc=50 # Progress indicator when reading folders. set recall=ask-no # When I say "compose", ask me whether I want to continue # composing a postponed message. set record="+archive/now" # Put copies of most outgoing messages to ~/Mail/archive/now set reply_to=ask-yes # Ask me whether I want to honor users' reply-to headers. set reverse_alias # Use aliases to display real names on the index. set save_name # Save copies by name. Together with $record and $save_name, # this means that when a folder exists, copies of outgoing # messages are written to ~/Mail/, otherwise they go to # ~/Mail/archive/now set signature=~/.signature # Silly signature set sig_dashes # Add dashes above my signature set smart_wrap # Try to be smart when wrapping around lines in the pager set sort=threads # sort by threads, set sort_aux=date # then by date unset strict_threads # don't be strict about threads # set suspend=no # Don't suspend - I usually run mutt like this: "xterm -e mutt" set tilde # Indicate empty lines in the pager. set tmpdir=~/.tmp # Temporary files aren't stored in public places. set to_chars=" +TCF " # Don't tag list mail in the index unset use_domain # Don't append a domain to addresses. set write_inc=50 # Progress indicator when writing folders. set query_command="lbdb2q.pl %s" # Use the Little Brother's Database with the external # query feature. set sendmail_wait=-1 # Don't put sendmail into the background. set encode_from # "From " in the beginning of a line triggers quoted-printable set nowait_key # Return immediately from external programs set forw_format="[fwd] %s (from: %a)" # A different subject for forwarded messages set nobeep # Shut up. ;-) set reply_regexp="^((re([\\[0-9\\]+])*|aw):[ \t]*)+[ \t]*" # A regular expression to detect replies set header # Include the message header when replying. set ignore_list_reply_to # Ignore Reply-To headers pointing to mailing lists. set norfc2047_parameters # Sometimes, I get mails which use a bogus encoding for # MIME parameters. Setting this shouldn't harm. # (OK, she doesn't use Notes any more, so I can unset this. ;-) # set text_flowed # Generate text/plain; format=flowed # unset use_ipv6 # Don't try to use IPv6 - it doesn't work here. set keep_flagged # don't move flagged messages to mbox set hide_missing=yes # Don't show how many messages are missing in a thread structure set status_format="-%r-+(%v) %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]----%>-(%P)---" set compose_format="--+(%v) Compose [Approx. msg size: %l Atts: %a]%>-" set pager_format="-%Z- %C/%m: %.20n %> %s" set smileys="^$" set ispell=iaspell set markers=no # Don't mark wrapped lines set wrapmargin=4 # Leave a margin in the pager # PGP command configuration # source ~/.mutt/pgp2.rc source ~/.mutt/gpg.rc set pgp_getkeys_command="" # source ~/.mutt/smime.rc # source non-public stuff, (hooks, alternates, ...) source ~/.mutt/priv.rc # source aliases # source ~/.mutt/aliases-coruscant source ~/.mutt/aliases mutt-1.5.21/contrib/colors.default0000644000175000017500000000110210770271152014015 00000000000000# -*-muttrc-*- # Colors for use with xterm and the like, white background. color hdrdefault blue white color quoted blue white color signature red white color attachment red white color message brightred white color error brightred white color indicator brightyellow red color status brightgreen blue color tree black white color normal black white color markers red white color search white black color tilde brightmagenta white color index blue white ~F color index red white "~N|~O" # color body brightblack white '\*+[^*]+\*+' # color body brightblack white '_+[^_]+_+' mutt-1.5.21/contrib/colors.linux0000644000175000017500000000107410770271152013540 00000000000000# -*-muttrc-*- # Palette for use with the Linux console. Black background. color hdrdefault blue black color quoted blue black color signature blue black color attachment red black color message brightred black color error brightred black color indicator black red color status brightgreen blue color tree white black color normal white black color markers red black color search white black color tilde brightmagenta black color index blue black ~F color index red black "~N|~O" # color body brightwhite black '\*+[^*]+\*+' # color body brightwhite black '_+[^_]+_+' mutt-1.5.21/contrib/smime.rc0000644000175000017500000000660310770271235012623 00000000000000# -*-muttrc-*- ## The following options are only available if you have ## compiled in S/MIME support # If you compiled mutt with support for both PGP and S/MIME, PGP # will be the default method unless the following option is set set smime_is_default # Uncoment this if you don't want to set labels for certificates you add. # unset smime_ask_cert_label # Passphrase expiration set smime_timeout=300 # Global crypto options -- these affect PGP operations as well. set crypt_autosign = yes set crypt_replyencrypt = yes set crypt_replysign = yes set crypt_replysignencrypted = yes set crypt_verify_sig = yes # Section A: Key Management. # The (default) keyfile for signing/decrypting. Uncomment the following # line and replace the keyid with your own. set smime_default_key="12345678.0" # Uncommen to make mutt ask what key to use when trying to decrypt a message. # It will use the default key above (if that was set) else. # unset smime_decrypt_use_default_key # Path to a file or directory with trusted certificates set smime_ca_location="~/.smime/ca-bundle.crt" # Path to where all known certificates go. (must exist!) set smime_certificates="~/.smime/certificates" # Path to where all private keys go. (must exist!) set smime_keys="~/.smime/keys" # These are used to extract a certificate from a message. # First generate a PKCS#7 structure from the message. set smime_pk7out_command="openssl smime -verify -in %f -noverify -pk7out" # Extract the included certificate(s) from a PKCS#7 structure. set smime_get_cert_command="openssl pkcs7 -print_certs -in %f" # Extract the signer's certificate only from a S/MIME signature (sender verification) set smime_get_signer_cert_command="openssl smime -verify -in %f -noverify -signer %c -out /dev/null" # This is used to get the email address the certificate was issued to. set smime_get_cert_email_command="openssl x509 -in %f -noout -email" # Add a certificate to the database using smime_keys. set smime_import_cert_command="smime_keys add_cert %f" # Sction B: Outgoing messages # Algorithm to use for encryption. # valid choices are rc2-40, rc2-64, rc2-128, des, des3 set smime_encrypt_with="des3" # Encrypt a message. Input file is a MIME entity. set smime_encrypt_command="openssl smime -encrypt -%a -outform DER -in %f %c" # Sign. set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -certfile %i -outform DER" #Section C: Incoming messages # Decrypt a message. Output is a MIME entity. set smime_decrypt_command="openssl smime -decrypt -passin stdin -inform DER -in %f -inkey %k -recip %c" # Verify a signature of type multipart/signed set smime_verify_command="openssl smime -verify -inform DER -in %s %C -content %f" # Verify a signature of type application/x-pkcs7-mime set smime_verify_opaque_command="\ openssl smime -verify -inform DER -in %s %C || \ openssl smime -verify -inform DER -in %s -noverify 2>/dev/null" # Section D: Alternatives # Sign. If you wish to NOT include the certificate your CA used in signing # your public key, use this command instead. # set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -outform DER" # # In order to verify the signature only and skip checking the certificate chain: # # set smime_verify_command="openssl smime -verify -inform DER -in %s -content %f -noverify" # set smime_verify_opaque_command="openssl smime -verify -inform DER -in %s -noverify" # mutt-1.5.21/contrib/ca-bundle.crt0000644000175000017500000075173410770271152013541 00000000000000## ## ca-bundle.crt -- Bundle of CA Root Certificates ## Last Modified: Thu Mar 2 09:32:46 CET 2000 ## ## This is a bundle of X.509 certificates of public ## Certificate Authorities (CA). These were automatically ## extracted from Netscape Communicator 4.72's certificate database ## (the file `cert7.db'). It contains the certificates in both ## plain text and PEM format and therefore can be directly used ## with an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## (SKIPME) ## ABAecom (sub., Am. Bankers Assn.) Root CA ========================================= MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr wo3CbezcE9NGxXl8 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Validity Not Before: Jul 14 16:14:18 1999 GMT Not After : Jul 11 16:14:18 2009 GMT Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: ee:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 X509v3 Subject Key Identifier: 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 Signature Algorithm: sha1WithRSAEncryption 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: 46:c5:79:7c ANX Network CA by DST ===================== MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D PEM Data: -----BEGIN CERTIFICATE----- MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913220207 (0x366ea26f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Validity Not Before: Dec 9 15:46:48 1998 GMT Not After : Dec 9 16:16:48 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44: b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71: 25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6: a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84: 34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22: 76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30: 2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d: 90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2: 8d:38:26:b0:6f:43:6e:09:7d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 15:46:48 1998 GMT, Not After: Dec 9 15:46:48 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Subject Key Identifier: 8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3: 29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51: b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26: 68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e: 10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16: e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59: ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32: a3:5d American Express CA =================== MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0 PEM Data: -----BEGIN CERTIFICATE----- MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT 0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw +48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 141 (0x8d) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Validity Not Before: Aug 14 22:01:00 1998 GMT Not After : Aug 14 23:59:00 2006 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec: fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23: c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49: 95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0: 0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b: f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0: 30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07: f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9: b7:66:e1:15:b2:48:36:2c:f9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd: 8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8: 28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3: a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25: 6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2: 31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17: 7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b: ed:d2 American Express Global CA ========================== MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB PEM Data: -----BEGIN CERTIFICATE----- MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4 cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9 Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y 8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1 D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo JaFGS0E3l3/sjvHUoZbCILZerakcHhGg -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 133 (0x85) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Validity Not Before: Aug 14 19:06:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb: 26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd: 2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90: a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5: 46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05: f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96: 59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e: 87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad: 9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5: ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20: 9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9: cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48: bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00: 01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75: ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71: 91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5: b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11: f5:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113807.10.1.5.1 X509v3 Subject Key Identifier: 57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69 Signature Algorithm: sha1WithRSAEncryption c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5: 30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3: 61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40: eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86: 72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40: c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69: fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1: d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c: 26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90: 9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9: 54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db: 4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff: 92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1: 46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9: 1c:1e:11:a0 BelSign Object Publishing CA ============================ MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0 eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA 3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8 WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa R9Zxxp6aUg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Validity Not Before: Sep 19 22:03:00 1997 GMT Not After : Sep 19 22:03:00 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5: 9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de: 4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c: 76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be: b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67: 9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90: 1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57: 02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3: 5d:88:64:d0:c8:f8:5d:54:51 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac: 4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf: c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79: 23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54: ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d: 25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63: e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e: 9a:52 BelSign Secure Server CA ======================== MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1 PEM Data: -----BEGIN CERTIFICATE----- MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/ SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1 W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT 6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Validity Not Before: Jul 16 22:00:54 1997 GMT Not After : Jul 16 22:00:54 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d6:01:12:78:92:f8:04:42:7f:c9:c7:22:83:fc: 7c:47:70:30:2b:49:0b:3e:36:40:90:28:da:21:73: 83:53:f2:c4:d1:16:40:c0:53:ff:ae:a6:c6:24:b3: 27:6d:a5:b3:3d:39:77:5d:a8:06:f6:e6:e9:bc:63: 11:4e:06:65:70:0a:9d:93:f9:a2:40:8b:7f:4a:84: 0e:8d:16:b1:d6:cc:08:64:12:0c:e0:28:4b:c8:a5: 84:90:17:fb:11:46:2e:d6:a7:85:18:cb:18:ae:63: 9a:b0:58:06:f4:00:cf:f8:c4:09:1a:35:0c:a1:f9: ee:4a:fd:6d:de:fe:26:a5:3b Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL Client, S/MIME Signature Algorithm: md5WithRSAEncryption 6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66: 13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9: 32:81:77:f6:35:5b:85:29:ce:67:b2:b9:bc:2b:19:78:cf:f3: 87:fd:46:f1:95:75:b2:09:57:03:30:c1:7a:cd:72:47:71:80: ca:7d:9d:c9:65:3c:47:11:22:7d:fa:07:0b:28:78:a1:93:e8: 05:45:48:e2:32:32:4a:3d:e8:53:1c:10:b7:c7:73:8c:07:50: e1:f9:c9:2b:53:41:f5:83:8d:e5:09:39:4a:8e:03:62:aa:40: 63:8b Deutsche Telekom AG Root CA =========================== MD5 Fingerprint: 77:DE:04:94:77:D0:0C:5F:A7:B1:F4:30:18:87:FB:55 PEM Data: -----BEGIN CERTIFICATE----- MIICjjCCAfegAwIBAgIBBjANBgkqhkiG9w0BAQQFADBtMQswCQYDVQQGEwJERTEc MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEdMBsGA1UECxMUVGVsZVNlYyBU cnVzdCBDZW50ZXIxITAfBgNVBAMTGERldXRzY2hlIFRlbGVrb20gUm9vdCBDQTAe Fw05ODEyMDkwOTExMDBaFw0wNDEyMDkyMzU5MDBaMG0xCzAJBgNVBAYTAkRFMRww GgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR0wGwYDVQQLExRUZWxlU2VjIFRy dXN0IENlbnRlcjEhMB8GA1UEAxMYRGV1dHNjaGUgVGVsZWtvbSBSb290IENBMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBSz5BbO5EtdpcffqVjAIVxRDe7sa nG0vV2HX4vVEa+42QZb2ZM7hwbK5pBQEmFDocPiONZp9ScFhHVmu2gYYlX2tzuyp vtEYD0CRdiqj5f3+iRX0V/fgVdp1rQD0LME1zLRDJlViRC4BJZyKW/DB0AA1eP41 3pRAZHiDocw5iQIDAQABoz4wPDAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQE AwIBBjAZBgNVHQ4EEgQQLIdZH4sTgLL5hp0+En5YljANBgkqhkiG9w0BAQQFAAOB gQAP/nO1B4hvoAuJ6spQH5TelCsLJ15P9RyVJtqMllStGZE3Q12ryYuzzW+YOT3t 3TXjcbftE5OD6IblKTMTE7w1e/0oL3BZ1dO0jSgTWTvI1XT5RcIHYKq4GFT5pWj/ 1wXVj7YFMS5BSvQQH2BHGguLGU2SVyDS71AZ6M3QcLy8Ng== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 6 (0x6) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Validity Not Before: Dec 9 09:11:00 1998 GMT Not After : Dec 9 23:59:00 2004 GMT Subject: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:dd:05:2c:f9:05:b3:b9:12:d7:69:71:f7:ea:56: 30:08:57:14:43:7b:bb:1a:9c:6d:2f:57:61:d7:e2: f5:44:6b:ee:36:41:96:f6:64:ce:e1:c1:b2:b9:a4: 14:04:98:50:e8:70:f8:8e:35:9a:7d:49:c1:61:1d: 59:ae:da:06:18:95:7d:ad:ce:ec:a9:be:d1:18:0f: 40:91:76:2a:a3:e5:fd:fe:89:15:f4:57:f7:e0:55: da:75:ad:00:f4:2c:c1:35:cc:b4:43:26:55:62:44: 2e:01:25:9c:8a:5b:f0:c1:d0:00:35:78:fe:35:de: 94:40:64:78:83:a1:cc:39:89 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96 Signature Algorithm: md5WithRSAEncryption 0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b: 0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d: ab:c9:8b:b3:cd:6f:98:39:3d:ed:dd:35:e3:71:b7:ed:13:93: 83:e8:86:e5:29:33:13:13:bc:35:7b:fd:28:2f:70:59:d5:d3: b4:8d:28:13:59:3b:c8:d5:74:f9:45:c2:07:60:aa:b8:18:54: f9:a5:68:ff:d7:05:d5:8f:b6:05:31:2e:41:4a:f4:10:1f:60: 47:1a:0b:8b:19:4d:92:57:20:d2:ef:50:19:e8:cd:d0:70:bc: bc:36 Digital Signature Trust Co. Global CA 1 ======================================= MD5 Fingerprint: 25:7A:BA:83:2E:B6:A2:0B:DA:FE:F5:02:0F:08:D7:AD PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i +DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913315222 (0x36701596) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Validity Not Before: Dec 10 18:10:23 1998 GMT Not After : Dec 10 18:40:23 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de: 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c: a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5: 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb: 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8: bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00: cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3: be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d: 13:74:76:36:b5:7a:b4:2d:71 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Subject Key Identifier: 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f: e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42: c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b: 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c: a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97: 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c: e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3: 8a:65 Digital Signature Trust Co. Global CA 2 ======================================= MD5 Fingerprint: 6C:C9:A7:6E:47:F1:0C:E3:53:3B:78:4C:4D:C2:6A:C5 PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F 5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:02:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Validity Not Before: Dec 1 18:18:55 1998 GMT Not After : Nov 28 18:18:55 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:c6:26:b6:e7:a5:3d:c1:c4:68:d5:50:6f:53: c5:6f:49:13:09:b8:af:2c:48:8d:14:6a:a3:17:5f: 5a:f9:d3:2e:75:2f:d8:28:62:d1:93:2f:fc:4d:d4: ab:87:e5:08:c7:99:e7:92:3f:75:bd:eb:25:b4:15: c1:9b:19:3d:d2:44:8d:d7:74:20:6d:37:02:8f:69: 93:5b:8a:c4:19:9d:f4:b2:0e:fc:16:6c:b9:b1:05: 92:83:d1:85:2c:60:94:3e:45:55:a0:d9:ab:08:21: e6:60:e8:3b:74:f2:99:50:51:68:d0:03:2d:b1:80: be:a3:d8:52:b0:44:cd:43:4a:70:8e:58:85:95:e1: 4e:2c:d6:2d:41:6f:d6:84:e7:c8:98:44:ca:47:db: 2c:24:a5:69:26:cf:6b:b8:27:62:c3:f4:c9:7a:92: 23:ed:13:67:82:ae:45:2e:45:e5:7e:72:3f:85:9d: 94:62:10:e6:3c:91:a1:ad:77:00:e0:15:ec:f3:84: 80:72:7a:8e:6e:60:97:c7:24:59:10:34:83:5b:e1: a5:a4:69:b6:57:35:1c:78:59:c6:d3:2f:3a:73:67: ee:94:ca:04:13:05:62:06:70:23:b3:f4:7c:ee:45: d9:64:0b:5b:49:aa:a4:43:ce:26:c4:44:12:6c:b8: dd:79 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption a2:37:b2:3f:69:fb:d7:86:79:54:49:31:95:33:2b:f3:d1:09: 14:49:62:60:86:a5:b0:11:e2:50:c2:1d:06:57:3e:2d:e8:33: 64:be:9b:aa:ad:5f:1b:4d:d4:99:95:a2:8b:9a:c9:62:72:b5: 69:ea:d9:58:ab:35:ed:15:a2:43:d6:b6:bc:07:79:65:64:73: 7d:d7:79:ca:7b:d5:5a:51:c6:e1:53:04:96:8d:38:cf:a3:17: ac:39:71:6b:01:c3:8b:53:3c:63:e9:ee:79:c0:e4:be:92:32: 64:7a:b3:1f:97:94:62:bd:ea:b2:20:15:95:fb:97:f2:78:2f: 63:36:40:38:e3:46:0f:1d:dd:ac:95:ca:e7:4b:90:7b:b1:4b: a9:d4:c5:eb:9a:da:aa:d5:a3:94:14:46:8d:2d:1f:f3:3a:d6: 93:3a:f6:3e:79:fc:e8:e6:b0:75:ed:ee:3d:c9:70:c7:5d:aa: 81:4b:46:25:1c:c7:6c:15:e3:95:4e:0f:aa:32:37:94:0a:17: 24:92:13:84:58:d2:63:6f:2b:f7:e6:5b:62:0b:13:17:b0:0d: 52:4c:fe:fe:6f:5c:e2:91:6e:1d:fd:a4:62:d7:68:fa:8e:7a: 4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62: 85:68:d0:f4 Digital Signature Trust Co. Global CA 3 ======================================= MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913232846 (0x366ed3ce) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Validity Not Before: Dec 9 19:17:26 1998 GMT Not After : Dec 9 19:47:26 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16: bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03: b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8: 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce: 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f: ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef: de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6: 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da: 0c:9d:e7:91:5b:80:cd:94:9d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Subject Key Identifier: 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38: 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5: d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e: a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec: b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83: 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0: 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3: a2:03 Digital Signature Trust Co. Global CA 4 ======================================= MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl 5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi 3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ 2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL 553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Validity Not Before: Nov 30 22:46:16 1998 GMT Not After : Nov 27 22:46:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4: e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5: a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a: 50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb: 26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92: dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39: fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd: 82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd: 91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd: 33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0: 26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae: 85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1: 62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32: 17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf: cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af: 6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48: da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb: 09:db Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28: a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90: d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07: eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1: cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45: e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be: e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83: 7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79: 28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40: d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a: d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f: 56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec: b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba: c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad: 7f:c2:78:b6 Entrust Worldwide by DST ======================== MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75 PEM Data: -----BEGIN CERTIFICATE----- MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe 3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU /Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn 3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J 1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr 3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913163544 (0x366dc518) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Validity Not Before: Dec 9 00:02:24 1998 GMT Not After : Dec 9 00:32:24 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32: 0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de: de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4: fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4: fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69: fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12: bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38: c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3: c6:ec:3f:be:35:9c:3d:22:ef Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 00:02:24 1998 GMT, Not After: Dec 9 00:02:24 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Subject Key Identifier: 93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87: b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c: 03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4: cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1: 2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1: 76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b: 1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1: 4e:4c Entrust.net Premium 2048 Secure Server CA ========================================= MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC PEM Data: -----BEGIN CERTIFICATE----- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy vUxFnmG6v4SBkgPR0ml8xQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 946059622 (0x3863b966) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Validity Not Before: Dec 24 17:50:51 1999 GMT Not After : Dec 24 18:20:51 2019 GMT Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64: 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7: 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76: 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf: e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1: 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29: b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64: ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c: e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89: a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90: 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2: cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a: fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55: 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86: 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26: 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e: 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0: 07:e1 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Authority Key Identifier: keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 X509v3 Subject Key Identifier: 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 1.2.840.113533.7.65.0: 0...V5.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c: 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61: 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73: ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5: da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4: 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4: 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68: c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c: 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33: db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18: b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2: de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c: e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e: c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1: d2:69:7c:c5 Entrust.net Secure Personal CA ============================== MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4 PEM Data: -----BEGIN CERTIFICATE----- MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo 6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux 5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a EkP/TOYGJqibGapEPHayXOw= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 939758062 (0x380391ee) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Validity Not Before: Oct 12 19:24:30 1999 GMT Not After : Oct 12 19:54:30 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19: ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f: 75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad: 82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6: 13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7: 30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74: 2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c: 56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df: 8c:e6:02:a4:e6:4f:5e:f7:8b Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/Client1.crl X509v3 Private Key Usage Period: Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Subject Key Identifier: C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: md5WithRSAEncryption 3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f: 78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14: 81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b: 96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92: e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38: ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5: 4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2: 5c:ec Entrust.net Secure Server CA ============================ MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE PEM Data: -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 927650371 (0x374ad243) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Validity Not Before: May 25 16:09:40 1999 GMT Not After : May 25 16:39:40 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff: af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1: 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81: 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71: d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24: da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29: 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8: ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81: b1:16:19:61:b9:54:b6:e6:43 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/net1.crl X509v3 Private Key Usage Period: Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Subject Key Identifier: F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb: 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d: f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31: c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb: a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58: 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54: 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06: f9:b2 Equifax Premium CA ================== MD5 Fingerprint: A9:E9:A8:9D:0E:73:E3:B1:2F:37:0D:E8:48:3F:86:ED PEM Data: -----BEGIN CERTIFICATE----- MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0 MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4 z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903999262 (0x35e1ef1e) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Validity Not Before: Aug 24 22:54:23 1998 GMT Not After : Aug 24 22:54:23 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:a1:06:8e:06:cc:08:0b:c1:86:a8:de:20:d5: 0d:0e:d1:0d:c4:9f:ea:6a:d9:b3:c2:32:47:40:6f: 8a:88:a4:09:bd:38:2c:1d:e6:cb:e6:a4:f3:36:eb: da:eb:bc:fc:64:b3:07:f6:2d:bc:aa:ce:9f:19:48: 68:4a:fc:f5:a2:45:7e:09:10:f5:8f:b3:49:5c:23: 06:39:ea:13:8b:b8:0b:cd:91:1d:76:5f:d9:37:a1: 44:fb:5f:90:f2:67:b3:cd:18:99:43:1f:76:12:6b: 02:f2:95:83:38:43:c2:f6:62:34:ca:c9:78:5d:5f: d2:d8:ba:9a:ff:be:10:60:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 24 22:54:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Subject Key Identifier: 15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption bd:0b:9c:27:a9:03:db:28:dc:98:a9:4b:d0:d1:8e:a7:a8:1a: 5a:91:e0:9c:f1:f7:18:7c:2e:22:9e:36:1f:c9:a8:b5:cd:46: 4a:6e:fa:35:07:1b:86:08:eb:9f:e2:a8:f9:9d:41:2d:3a:ae: 5c:5c:b6:5f:34:04:eb:fc:2a:60:b0:fb:74:e4:85:e9:65:38: 96:ee:15:c7:c6:77:63:12:bd:8a:68:1f:ab:6c:7d:da:ca:5c: 13:ce:ea:c9:eb:09:5c:c5:73:e7:12:01:d5:d9:53:07:9e:e0: 0f:96:f0:8b:b4:bb:45:48:9f:86:c5:19:55:a0:cb:96:c5:03: fc:48 Equifax Secure CA ================= MD5 Fingerprint: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4 PEM Data: -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903804111 (0x35def4cf) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Validity Not Before: Aug 22 16:41:51 1998 GMT Not After : Aug 22 16:41:51 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: 3a:88:e7:bf:14:fd:e0:c7:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 22 16:41:51 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Subject Key Identifier: 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: 77:38 GTE CyberTrust Global Root ========================== MD5 Fingerprint: CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB PEM Data: -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 421 (0x1a5) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Validity Not Before: Aug 13 00:29:00 1998 GMT Not After : Aug 13 23:59:00 2018 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17: 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06: c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28: 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af: 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c: 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac: 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87: 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15: c7:79:b4:1f:05:2f:3b:62:99 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3: a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33: 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55: 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95: 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7: a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c: 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b: 7a:7f GTE CyberTrust Japan Root CA ============================ MD5 Fingerprint: DE:AB:FF:43:2A:65:37:06:9B:28:B5:7A:E8:84:D3:8E PEM Data: -----BEGIN CERTIFICATE----- MIICETCCAXoCAU4wDQYJKoZIhvcNAQEEBQAwUTELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xITAfBgNVBAMTGEN5YmVyVHJ1c3Qg SkFQQU4gUm9vdCBDQTAeFw05ODA4MDQwNzU3MDBaFw0wMzA4MDQyMzU5MDBaMFEx CzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFuLCBJbmMuMSEw HwYDVQQDExhDeWJlclRydXN0IEpBUEFOIFJvb3QgQ0EwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBALet/MpHEHaJ/Wes5HMGfIFLHda1fA5Hr+ymVHWoxP1lr+fI sbFsNDWN97lkVygLIVredP7ceC6GRhJMfxEf3JO9X75mmIa4t+xtSdOQ2eF5AFZo uq1sHyw7H8ksjEOwBELqgXOmzjN1RQ2KRXIvqldV5AfDQ+J1Og+8PNCEzrrvAgMB AAEwDQYJKoZIhvcNAQEEBQADgYEAt6ZkowyAPBzE2O5BO+WGpJ5gXdYBMqhqZC0g cEC6ck5m+gdlTgOOC/1W4K07IKcy+rISHoDfHuN6GMxX2+bJNGDvdesQFtCkLnDY JCO4pXdzQvkHOt0BbAiTBzUmECVgKf8J5WSfabkWSfNc3SRjRpMNsFM2dbxIILsZ to/QIv0= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 78 (0x4e) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Validity Not Before: Aug 4 07:57:00 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b7:ad:fc:ca:47:10:76:89:fd:67:ac:e4:73:06: 7c:81:4b:1d:d6:b5:7c:0e:47:af:ec:a6:54:75:a8: c4:fd:65:af:e7:c8:b1:b1:6c:34:35:8d:f7:b9:64: 57:28:0b:21:5a:de:74:fe:dc:78:2e:86:46:12:4c: 7f:11:1f:dc:93:bd:5f:be:66:98:86:b8:b7:ec:6d: 49:d3:90:d9:e1:79:00:56:68:ba:ad:6c:1f:2c:3b: 1f:c9:2c:8c:43:b0:04:42:ea:81:73:a6:ce:33:75: 45:0d:8a:45:72:2f:aa:57:55:e4:07:c3:43:e2:75: 3a:0f:bc:3c:d0:84:ce:ba:ef Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption b7:a6:64:a3:0c:80:3c:1c:c4:d8:ee:41:3b:e5:86:a4:9e:60: 5d:d6:01:32:a8:6a:64:2d:20:70:40:ba:72:4e:66:fa:07:65: 4e:03:8e:0b:fd:56:e0:ad:3b:20:a7:32:fa:b2:12:1e:80:df: 1e:e3:7a:18:cc:57:db:e6:c9:34:60:ef:75:eb:10:16:d0:a4: 2e:70:d8:24:23:b8:a5:77:73:42:f9:07:3a:dd:01:6c:08:93: 07:35:26:10:25:60:29:ff:09:e5:64:9f:69:b9:16:49:f3:5c: dd:24:63:46:93:0d:b0:53:36:75:bc:48:20:bb:19:b6:8f:d0: 22:fd GTE CyberTrust Japan Secure Server CA ===================================== MD5 Fingerprint: DD:0D:0D:B4:78:4B:7D:CE:30:0A:A6:35:C6:AB:4C:88 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAYwCAU8wDQYJKoZIhvcNAQEEBQAwWjELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xKjAoBgNVBAMTIUN5YmVyVHJ1c3Qg SkFQQU4gU2VjdXJlIFNlcnZlciBDQTAeFw05ODA4MDQwODA2MzJaFw0wMzA4MDQy MzU5MDBaMFoxCzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFu LCBJbmMuMSowKAYDVQQDEyFDeWJlclRydXN0IEpBUEFOIFNlY3VyZSBTZXJ2ZXIg Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKwmo6G4b2rALBL52zEFkuf9 +tSBtLjVKtWQ+vBDZfwSFcrs27lh3jNjN0+vADx/kjcbGHPlnzyI8RoTRP558sMm lQ8L8J4UByFsV8Jdw+JRsM2LX81fhjj4eZc57Oi/Ui6xXqqprozt7tfIty4xi7Q5 kjt8gScHGgFEL0lzILbJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAaB17Eu5aeSkx ygGsi1CpJ5ksAPw4Ghz/wtXwE/4bpzn1gBTrUfrAjXuEG1musTVRbqE+1xvsoJ7f 4KWCluOxP9io8ct5gI738ESZfhT1I6MR42hLBTZuiOOrhqo4UwNCO9O5+eC/BenT X8NKp7b9t12QSfiasq1mpoIAk65g/yA= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 79 (0x4f) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Validity Not Before: Aug 4 08:06:32 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ac:26:a3:a1:b8:6f:6a:c0:2c:12:f9:db:31:05: 92:e7:fd:fa:d4:81:b4:b8:d5:2a:d5:90:fa:f0:43: 65:fc:12:15:ca:ec:db:b9:61:de:33:63:37:4f:af: 00:3c:7f:92:37:1b:18:73:e5:9f:3c:88:f1:1a:13: 44:fe:79:f2:c3:26:95:0f:0b:f0:9e:14:07:21:6c: 57:c2:5d:c3:e2:51:b0:cd:8b:5f:cd:5f:86:38:f8: 79:97:39:ec:e8:bf:52:2e:b1:5e:aa:a9:ae:8c:ed: ee:d7:c8:b7:2e:31:8b:b4:39:92:3b:7c:81:27:07: 1a:01:44:2f:49:73:20:b6:c9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:1d:7b:12:ee:5a:79:29:31:ca:01:ac:8b:50:a9:27:99:2c: 00:fc:38:1a:1c:ff:c2:d5:f0:13:fe:1b:a7:39:f5:80:14:eb: 51:fa:c0:8d:7b:84:1b:59:ae:b1:35:51:6e:a1:3e:d7:1b:ec: a0:9e:df:e0:a5:82:96:e3:b1:3f:d8:a8:f1:cb:79:80:8e:f7: f0:44:99:7e:14:f5:23:a3:11:e3:68:4b:05:36:6e:88:e3:ab: 86:aa:38:53:03:42:3b:d3:b9:f9:e0:bf:05:e9:d3:5f:c3:4a: a7:b6:fd:b7:5d:90:49:f8:9a:b2:ad:66:a6:82:00:93:ae:60: ff:20 GTE CyberTrust Root 2 ===================== MD5 Fingerprint: BA:ED:17:57:9A:4B:FF:7C:F9:C9:1F:A2:CD:1A:D6:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGbMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAyMB4X DTk4MDgxMTExMzUwN1oXDTA4MDgxMTExMjIxNlowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANksTE4vaRoj41a6886EwAnAefFE XzMfFZF/iogouCRFzI8YzR900bWPcUzWMfZzloSUQMWpg2Akfa9vNLdLTMIJgDtF BJ7EPMQndXsADKFkR7UUXYJLUTpYu0RMPdPlBjjoYVyYeLuAs5zacoJioN+cX+v5 T3fCzGAYAGs0giWzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAo2SRbxDt526iQkCU eM74FAjR+kOF60bNkhTQ7y4tNjkY2brJJ4gp6UgXb/jBqshhbS39QC11QzCXOfgU ZL1v72OoK0LfsloNJex7N9jOkSmCFvnoYqLhdsQCfd0li5jh9g1gjPZZkEBRRNHC +xkkHhc5a3QhFTPWVdeCHnAsJ6g= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 411 (0x19b) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Validity Not Before: Aug 11 11:35:07 1998 GMT Not After : Aug 11 11:22:16 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d9:2c:4c:4e:2f:69:1a:23:e3:56:ba:f3:ce:84: c0:09:c0:79:f1:44:5f:33:1f:15:91:7f:8a:88:28: b8:24:45:cc:8f:18:cd:1f:74:d1:b5:8f:71:4c:d6: 31:f6:73:96:84:94:40:c5:a9:83:60:24:7d:af:6f: 34:b7:4b:4c:c2:09:80:3b:45:04:9e:c4:3c:c4:27: 75:7b:00:0c:a1:64:47:b5:14:5d:82:4b:51:3a:58: bb:44:4c:3d:d3:e5:06:38:e8:61:5c:98:78:bb:80: b3:9c:da:72:82:62:a0:df:9c:5f:eb:f9:4f:77:c2: cc:60:18:00:6b:34:82:25:b3 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption a3:64:91:6f:10:ed:e7:6e:a2:42:40:94:78:ce:f8:14:08:d1: fa:43:85:eb:46:cd:92:14:d0:ef:2e:2d:36:39:18:d9:ba:c9: 27:88:29:e9:48:17:6f:f8:c1:aa:c8:61:6d:2d:fd:40:2d:75: 43:30:97:39:f8:14:64:bd:6f:ef:63:a8:2b:42:df:b2:5a:0d: 25:ec:7b:37:d8:ce:91:29:82:16:f9:e8:62:a2:e1:76:c4:02: 7d:dd:25:8b:98:e1:f6:0d:60:8c:f6:59:90:40:51:44:d1:c2: fb:19:24:1e:17:39:6b:74:21:15:33:d6:55:d7:82:1e:70:2c: 27:a8 GTE CyberTrust Root 3 ===================== MD5 Fingerprint: DB:81:96:57:AE:64:61:EF:77:A7:83:C4:51:24:3C:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGXMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAzMB4X DTk4MDgxMDE5NTkwOFoXDTA4MDgxMDE5MzYzOVowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDMw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHzsSsLztwU2TSXYlASVmOETFP6 wIXP+sHdD955E39T+6oOYN3iYr/G7k6ZNKpoQzWZ+KP982O9AVRqnrI6lix7eCjG WrWNGhUY/eOMLqJQCVtx1g21GB8ZjgQpk5N4q18U53NC8gMMV6IbUDsLu1ngoDoD 7icbWky5sAjKuRqJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAheutlCAG6bKiazvy ZuvjS7gSJgXl9JGo3IfcmPSUwfRhvdWcbFFzlV7QvdfmRdw8z0aE1ee57ORnY24A KHdxXUoF6bl8hszCRLveKUja6t29F58dUQGo6BResVf3/9qPzpX+Le0yEnf/fGph la4xcgYI8PnzDY7i76hTXZEDg94= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 407 (0x197) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Validity Not Before: Aug 10 19:59:08 1998 GMT Not After : Aug 10 19:36:39 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e1:f3:b1:2b:0b:ce:dc:14:d9:34:97:62:50:12: 56:63:84:4c:53:fa:c0:85:cf:fa:c1:dd:0f:de:79: 13:7f:53:fb:aa:0e:60:dd:e2:62:bf:c6:ee:4e:99: 34:aa:68:43:35:99:f8:a3:fd:f3:63:bd:01:54:6a: 9e:b2:3a:96:2c:7b:78:28:c6:5a:b5:8d:1a:15:18: fd:e3:8c:2e:a2:50:09:5b:71:d6:0d:b5:18:1f:19: 8e:04:29:93:93:78:ab:5f:14:e7:73:42:f2:03:0c: 57:a2:1b:50:3b:0b:bb:59:e0:a0:3a:03:ee:27:1b: 5a:4c:b9:b0:08:ca:b9:1a:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:eb:ad:94:20:06:e9:b2:a2:6b:3b:f2:66:eb:e3:4b:b8:12: 26:05:e5:f4:91:a8:dc:87:dc:98:f4:94:c1:f4:61:bd:d5:9c: 6c:51:73:95:5e:d0:bd:d7:e6:45:dc:3c:cf:46:84:d5:e7:b9: ec:e4:67:63:6e:00:28:77:71:5d:4a:05:e9:b9:7c:86:cc:c2: 44:bb:de:29:48:da:ea:dd:bd:17:9f:1d:51:01:a8:e8:14:5e: b1:57:f7:ff:da:8f:ce:95:fe:2d:ed:32:12:77:ff:7c:6a:61: 95:ae:31:72:06:08:f0:f9:f3:0d:8e:e2:ef:a8:53:5d:91:03: 83:de GTE CyberTrust Root 4 ===================== MD5 Fingerprint: 33:43:02:B1:B9:E0:73:B1:B1:20:CA:CB:C7:84:03:50 PEM Data: -----BEGIN CERTIFICATE----- MIIDVTCCAj0CAgGoMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCA0MB4X DTk4MDgxMzEzNTEwMFoXDTEzMDgxMzIzNTkwMFowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDQw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6nSJuf9pmPDlCsaMqb9P3 vK6sMVrXEZBHuZ0ZLvnzGyKgw+GnusT8XgqUS5haSybkH/Tc8/6OiNxsLXx3hyZQ wF5OqCih6hdpT03GAQ7amg0GViYVtqRdejWvje14Uob5OKuzAdPaBZaxtlCrwKGu F1P6QzkgcWUj223Etu2YRYPX0vbiqWv7+XXM78WrcZY16N+OkZuoEHUft84Tjmuz lneXGpEvxyxpmfAPKmgAmHZEG4wo0uuO9IO0f6QlXmw72cZo1WG41F4xB7VbkDVS V3sXIO0tuB6OiDk+Usvf8FyxZbulErSQY79xnTLB2r9QSpW+BjrEK+vNmHZETQvl AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAEOvHIfJSbpliTRJPOoHO0eiedSgO5Bs 3n+oVMPoTEAyvMjsHOXZrEC6/Iw/wnOc9GTq36ntTlvIAWDuOW1DJ/N/qgjS/k5v FDJNfeQ0gKU1xNZGULQ7oC1lH09lfjQoLcCndn0xyQ0zFvYgGSARULsDzHBtlrfv TKfaNhXPu03UltyITWyY7blz/ihXoO1k+AqBKXP29pcyhzm0ge/ZTRoHNPe6QjXe V9xc1vfF6wonDIGmwtBoTv2SW0iD9haKjzZb7TFsP0F6cfeSPzGkCkBM84biYcE8 SYEtpbjvupcPvCsdm4ny0o4eTYbywqv2LZnAGyoNobZP+SxYTT19Nwo= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 424 (0x1a8) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Validity Not Before: Aug 13 13:51:00 1998 GMT Not After : Aug 13 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ba:9d:22:6e:7f:da:66:3c:39:42:b1:a3:2a:6f: d3:f7:bc:ae:ac:31:5a:d7:11:90:47:b9:9d:19:2e: f9:f3:1b:22:a0:c3:e1:a7:ba:c4:fc:5e:0a:94:4b: 98:5a:4b:26:e4:1f:f4:dc:f3:fe:8e:88:dc:6c:2d: 7c:77:87:26:50:c0:5e:4e:a8:28:a1:ea:17:69:4f: 4d:c6:01:0e:da:9a:0d:06:56:26:15:b6:a4:5d:7a: 35:af:8d:ed:78:52:86:f9:38:ab:b3:01:d3:da:05: 96:b1:b6:50:ab:c0:a1:ae:17:53:fa:43:39:20:71: 65:23:db:6d:c4:b6:ed:98:45:83:d7:d2:f6:e2:a9: 6b:fb:f9:75:cc:ef:c5:ab:71:96:35:e8:df:8e:91: 9b:a8:10:75:1f:b7:ce:13:8e:6b:b3:96:77:97:1a: 91:2f:c7:2c:69:99:f0:0f:2a:68:00:98:76:44:1b: 8c:28:d2:eb:8e:f4:83:b4:7f:a4:25:5e:6c:3b:d9: c6:68:d5:61:b8:d4:5e:31:07:b5:5b:90:35:52:57: 7b:17:20:ed:2d:b8:1e:8e:88:39:3e:52:cb:df:f0: 5c:b1:65:bb:a5:12:b4:90:63:bf:71:9d:32:c1:da: bf:50:4a:95:be:06:3a:c4:2b:eb:cd:98:76:44:4d: 0b:e5 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 43:af:1c:87:c9:49:ba:65:89:34:49:3c:ea:07:3b:47:a2:79: d4:a0:3b:90:6c:de:7f:a8:54:c3:e8:4c:40:32:bc:c8:ec:1c: e5:d9:ac:40:ba:fc:8c:3f:c2:73:9c:f4:64:ea:df:a9:ed:4e: 5b:c8:01:60:ee:39:6d:43:27:f3:7f:aa:08:d2:fe:4e:6f:14: 32:4d:7d:e4:34:80:a5:35:c4:d6:46:50:b4:3b:a0:2d:65:1f: 4f:65:7e:34:28:2d:c0:a7:76:7d:31:c9:0d:33:16:f6:20:19: 20:11:50:bb:03:cc:70:6d:96:b7:ef:4c:a7:da:36:15:cf:bb: 4d:d4:96:dc:88:4d:6c:98:ed:b9:73:fe:28:57:a0:ed:64:f8: 0a:81:29:73:f6:f6:97:32:87:39:b4:81:ef:d9:4d:1a:07:34: f7:ba:42:35:de:57:dc:5c:d6:f7:c5:eb:0a:27:0c:81:a6:c2: d0:68:4e:fd:92:5b:48:83:f6:16:8a:8f:36:5b:ed:31:6c:3f: 41:7a:71:f7:92:3f:31:a4:0a:40:4c:f3:86:e2:61:c1:3c:49: 81:2d:a5:b8:ef:ba:97:0f:bc:2b:1d:9b:89:f2:d2:8e:1e:4d: 86:f2:c2:ab:f6:2d:99:c0:1b:2a:0d:a1:b6:4f:f9:2c:58:4d: 3d:7d:37:0a GTE CyberTrust Root 5 ===================== MD5 Fingerprint: 7D:6C:86:E4:FC:4D:D1:0B:00:BA:22:BB:4E:7C:6A:8E PEM Data: -----BEGIN CERTIFICATE----- MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH 9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk 6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 438 (0x1b6) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Validity Not Before: Aug 14 14:50:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bc:12:6e:3f:8a:7c:7a:97:01:ec:1e:bb:39:5a: 02:f4:78:44:a2:48:1b:8e:7b:49:52:7a:b8:7b:47: b3:af:94:9b:6f:bb:96:fa:2b:6a:65:5c:b8:1c:94: 73:be:bf:89:0a:22:80:ee:57:fc:8c:05:bb:70:9f: 97:39:04:da:a3:87:5c:a8:e5:ca:af:c0:33:9a:d5: 37:5c:4b:ac:e4:80:d0:a6:23:60:fb:fd:72:2e:94: 9d:c7:ce:c2:04:32:ef:78:60:5d:ed:ad:87:0f:45: 65:1e:3c:9a:0a:9a:be:5d:1d:99:ec:e7:f2:d1:c6: 7a:17:d9:ad:9b:54:96:7f:c4:7c:60:bf:85:aa:15: 35:1d:40:da:11:bc:ec:54:21:28:2d:23:a1:a8:f0: cf:2d:cd:dd:fc:7e:0f:5e:e1:65:07:56:cb:07:b4: d2:56:e8:5e:31:cc:18:63:c4:86:d2:2d:85:cf:93: 92:ab:6d:fe:68:39:fb:de:73:bd:86:f8:e4:46:7a: ea:9f:0c:cb:f4:19:fe:63:bc:d1:2c:7b:88:33:36: f6:e4:e1:9c:0c:53:81:60:1c:da:2e:ab:96:a9:16: 88:13:50:99:b2:bd:55:df:15:30:7e:e8:e5:98:fb: 70:7e:6c:b5:07:fc:fc:46:b7:d0:ed:37:96:7e:32: fe:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113763.1.2.1.3 X509v3 Subject Key Identifier: 76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D Signature Algorithm: sha1WithRSAEncryption 41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff: de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6: 32:21:aa:4a:76:c5:dc:4f:38:e5:df:d5:86:e4:d5:c8:76:7d: 98:d7:b1:cd:8f:4d:b5:91:23:6c:8b:8a:eb:ea:7c:ef:14:94: c4:c6:f0:1f:4a:2d:32:71:63:2b:63:91:26:02:09:b6:80:1d: ed:e2:cc:b8:7f:db:87:63:c8:e1:d0:6c:26:b1:35:1d:40:66: 10:1b:cd:95:54:18:33:61:ec:13:4f:da:13:f7:99:af:3e:d0: cf:8e:a6:72:a2:b3:c3:05:9a:c9:27:7d:92:cc:7e:52:8d:b3: ab:70:6d:9e:89:9f:4d:eb:1a:75:c2:98:aa:d5:02:16:d7:0c: 8a:bf:25:e4:eb:2d:bc:98:e9:58:38:19:7c:b9:37:fe:db:e2: 99:08:73:06:c7:97:83:6a:7d:10:01:2f:32:b9:17:05:4a:65: e6:2f:ce:be:5e:53:a6:82:e9:9a:53:0a:84:74:2d:83:ca:c8: 94:16:76:5f:94:61:28:f0:85:a7:39:bb:d7:8b:d9:a8:b2:13: 1d:54:09:34:24:7d:20:81:7d:66:7e:a2:90:74:5c:10:c6:bd: ec:ab:1b:c2 GTE CyberTrust Root CA ====================== MD5 Fingerprint: C4:D7:F0:B2:A3:C5:7D:61:67:F0:04:CD:43:D3:BA:58 PEM Data: -----BEGIN CERTIFICATE----- MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 419 (0x1a3) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Validity Not Before: Feb 23 23:01:00 1996 GMT Not After : Feb 23 23:59:00 2006 GMT Subject: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b8:e6:4f:ba:db:98:7c:71:7c:af:44:b7:d3:0f: 46:d9:64:e5:93:c1:42:8e:c7:ba:49:8d:35:2d:7a: e7:8b:bd:e5:05:31:59:c6:b1:2f:0a:0c:fb:9f:a7: 3f:a2:09:66:84:56:1e:37:29:1b:87:e9:7e:0c:ca: 9a:9f:a5:7f:f5:15:94:a3:d5:a2:46:82:d8:68:4c: d1:37:15:06:68:af:bd:f8:b0:b3:f0:29:f5:95:5a: 09:16:61:77:0a:22:25:d4:4f:45:aa:c7:bd:e5:96: df:f9:d4:a8:8e:42:cc:24:c0:1e:91:27:4a:b5:6d: 06:80:63:39:c4:a2:5e:38:03 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 12:b3:75:c6:5f:1d:e1:61:55:80:00:d4:81:4b:7b:31:0f:23: 63:e7:3d:f3:03:f9:f4:36:a8:bb:d9:e3:a5:97:4d:ea:2b:29: e0:d6:6a:73:81:e6:c0:89:a3:d3:f1:e0:a5:a5:22:37:9a:63: c2:48:20:b4:db:72:e3:c8:f6:d9:7c:be:b1:af:53:da:14:b4: 21:b8:d6:d5:96:e3:fe:4e:0c:59:62:b6:9a:4a:f9:42:dd:8c: 6f:81:a9:71:ff:f4:0a:72:6d:6d:44:0e:9d:f3:74:74:a8:d5: 34:49:e9:5e:9e:e9:b4:7a:e1:e5:5a:1f:84:30:9c:d3:9f:a5: 25:d8 GlobalSign Partners CA ====================== MD5 Fingerprint: 3C:75:CD:4C:BD:A9:D0:8A:79:4F:50:16:37:84:F4:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i 3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/ gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1 T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/ E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP UOQ9OK7IZtnHO11RR6ybq/Kt -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b9:d1:af Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Partners CA, CN=GlobalSign Partners CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:2c:f8:32:ac:4a:12:7a:37:c8:29:91:a5:ae: 8c:6e:1e:0e:c0:34:33:88:e5:33:71:16:1c:78:84: 68:c3:18:34:50:2e:16:3e:b1:94:82:4f:b1:9a:9f: 00:f8:c6:11:35:c6:69:7b:98:02:ad:00:06:88:6c: e7:4c:33:28:00:88:27:46:1f:87:b3:71:75:63:bc: 32:bb:88:de:66:18:0e:50:06:93:b4:f6:bc:14:37: 30:3d:22:df:3d:ff:75:7e:d9:0a:1a:c5:9f:b3:fc: d0:ac:b3:08:7a:89:d3:01:e8:00:5c:e7:4a:0b:3d: 4d:7b:26:a2:b7:62:06:8b:da:46:dd:93:17:3f:3f: 5b:02:4b:0b:b6:88:20:11:92:00:ad:bb:c7:2e:d4: e3:45:ae:f5:89:5a:7c:8d:a4:ad:85:64:32:c0:27: 8c:c6:f2:8a:80:92:86:24:56:59:8d:74:68:a2:83: 42:b3:9e:3d:50:41:86:6f:20:6e:f6:fd:ce:d3:19: e3:32:cc:8f:ed:9a:5e:6d:1f:28:f5:52:ac:6e:18: 5e:f8:3d:d1:92:e5:ba:6c:01:88:4b:0a:f2:2d:de: 65:33:05:42:a0:4c:aa:31:76:be:fd:bf:81:78:f9: 71:1c:46:5e:2d:15:95:2d:30:59:8e:4c:41:d1:62: ab:3d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f: 2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5: b8:9c:07:39:60:25:55:1a:c0:4f:19:e5:cf:17:29:49:89:18: 35:66:e5:eb:28:40:4e:57:c9:af:b3:e4:b8:20:05:a3:3b:95: 50:91:49:94:29:7d:2c:e5:88:41:a5:45:88:5e:9d:82:27:f7: d2:ef:5b:b5:4f:9f:be:fe:35:65:2c:55:64:9f:e1:51:da:22: 61:77:ba:58:4e:8f:c6:79:59:59:6e:30:80:a2:4f:90:6e:21: 0b:ad:d0:68:39:90:10:9b:ed:22:65:6f:1e:11:38:e6:7f:8c: d2:f3:39:6d:47:d5:21:e8:ea:75:3a:41:d1:ad:f6:16:9d:5d: 0b:21:bd:f3:1f:63:06:25:1d:c1:1f:35:71:2c:eb:20:19:d5: c1:b0:ec:3d:e5:6f:ed:02:07:3f:13:7b:66:92:d6:44:c1:98: f7:5f:50:8b:7a:5b:c2:6f:6d:b0:d1:f8:e5:74:a0:40:37:a3: 25:0f:e4:3d:ca:64:31:93:90:5c:30:7b:b9:39:31:9a:5e:4c: cd:b9:41:4f:50:e4:3d:38:ae:c8:66:d9:c7:3b:5d:51:47:ac: 9b:ab:f2:ad GlobalSign Primary Class 1 CA ============================= MD5 Fingerprint: 5C:AC:59:01:A4:86:53:CB:10:66:B5:D6:D6:71:FF:01 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5 wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB +a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ 7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6 E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:37:cf Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 15 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 1 CA, CN=GlobalSign Primary Class 1 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bd:20:35:47:d1:28:d6:08:a3:12:39:23:47:0d: bd:70:21:52:0e:57:31:95:a6:34:57:6b:ec:7e:43: 79:c3:06:52:48:cd:bc:b5:a1:99:bd:d8:1f:32:bc: cf:d7:6e:72:6d:2e:77:22:90:82:4e:4b:8f:9a:0c: 01:42:9a:d9:70:59:b6:9d:1f:e6:63:d1:0c:ad:1d: 4e:f8:85:81:f9:ae:ef:9f:a6:52:61:44:79:1a:75: 45:e0:61:56:45:6d:42:8c:3d:72:cb:a6:a4:12:b7: 9a:f5:d6:60:d0:60:50:b3:8e:a6:a6:ec:b4:f4:12: cd:7f:a8:ce:ef:b3:e1:85:30:fe:72:c4:e6:e7:77: b3:9e:58:41:d6:51:83:88:07:c6:b6:69:4f:36:de: d1:0b:48:3f:bd:d6:9f:21:74:64:6f:27:06:3e:4b: fd:0e:a6:9b:bf:a4:48:57:8c:90:ee:89:18:0b:02: 81:18:be:67:fe:53:60:88:27:ba:a3:73:34:4b:5a: 56:b4:de:73:05:ed:98:96:5d:ec:4a:e7:40:fc:4b: 09:62:eb:d0:e3:31:4f:85:d1:7a:ab:59:67:2b:fb: 88:0f:eb:aa:83:bd:35:fd:61:27:ec:66:0e:42:57: f7:69:c2:0c:ef:fc:6a:c2:6e:49:da:8f:41:38:ae: 48:a9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29: 98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8: 1c:c7:ab:1d:b4:1b:ef:69:68:98:5c:08:39:8f:e0:f7:fb:48: cc:21:e7:b8:33:db:05:aa:34:24:6c:4a:e5:e9:7b:60:de:83: b3:1f:0a:be:41:75:fc:cc:30:48:b7:c1:26:1d:04:33:aa:b6: 78:ed:2a:cb:ba:56:97:32:6e:f7:31:95:2e:46:f2:14:ee:27: c7:f7:62:89:b9:5c:5a:d3:38:8a:64:f5:37:b4:f1:b3:34:72: d5:d5:21:3d:4b:d7:78:93:d7:31:66:35:1e:a3:d8:47:49:6f: 1c:ad:e1:80:7f:f8:98:24:6c:73:ac:0e:c2:1a:77:02:a3:26: 07:b7:c7:6b:5d:bc:82:d5:2a:48:1d:63:cf:50:32:a6:fb:1c: 18:47:15:0a:5b:0c:5c:38:24:9a:04:98:a8:08:48:5f:7c:34: 87:63:ab:2d:8d:4c:00:77:94:1b:76:ba:f5:16:18:a3:15:af: 2f:94:f6:29:00:76:c1:15:17:d3:e9:37:4d:76:d4:cb:4b:29: 59:24:ac:da:4a:a0:ea:63:de:5f:54:b1:fa:f3:d1:45:cb:c5: 64:b4:73:21 GlobalSign Primary Class 2 CA ============================= MD5 Fingerprint: A9:A9:42:59:7E:BE:5A:94:E4:2C:C6:8B:1C:2A:44:B6 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi +05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5 uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO 9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ 7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1 7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:8d:8d Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 2 CA, CN=GlobalSign Primary Class 2 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:92:8c:fe:ef:f4:45:8e:17:41:6e:fc:d8:bf:21: 6f:ab:06:9d:52:c1:2c:00:9d:3f:8e:85:b8:7f:4a: 8f:bd:a0:63:2a:ca:49:27:ae:5a:82:f4:74:e2:55: 92:ff:c2:d1:aa:79:a2:b6:fa:d5:9d:82:04:4f:c6: b2:c6:5e:63:a7:3a:ba:d8:ee:eb:8a:6f:9f:b6:bb: 28:41:c0:22:fb:4e:48:1a:06:92:d7:bf:d7:cf:b9: d9:bd:38:4f:3b:0d:44:6e:55:41:fe:fc:09:db:d8: bf:f3:8e:21:f1:e8:12:b5:f6:13:a5:d3:c6:4c:93: 22:b0:02:ff:ee:1d:0c:c4:a8:6b:4f:75:68:56:e8: dc:28:12:50:f7:a8:24:9d:2e:24:39:fb:09:05:de: e5:a3:64:49:21:d0:68:7e:71:30:91:b1:60:e0:39: f4:50:f8:7a:4d:98:00:6b:7c:79:ba:4e:ce:4a:e2: ba:36:1d:b7:c5:36:15:95:9c:64:42:ea:5f:c4:ba: f5:40:05:be:e1:3a:59:bd:84:a7:19:b8:de:4d:53: 50:ce:07:d1:d2:51:d3:ef:0d:81:6c:e6:e7:6d:cb: 5d:7c:3f:7c:cc:ec:4f:83:27:25:ff:70:50:f6:83: 59:75:84:06:66:58:2c:de:89:8d:00:a6:49:f9:a5: 43:77 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67: 2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30: 46:5d:8f:f2:6d:45:3c:8e:35:97:7c:2f:b8:51:e2:e8:89:bd: 88:cf:27:1c:08:34:5c:88:c1:68:24:db:91:85:e4:cf:fb:fb: 43:8d:e8:25:01:1b:c4:0e:f7:00:42:48:86:1f:24:08:58:5a: 8c:8d:f2:6b:47:2c:68:91:b1:69:42:fd:0d:8d:c9:26:e6:92: 86:a6:64:6e:92:c5:ce:3e:3c:7d:71:e3:23:a4:ab:c7:d5:a8: a9:df:82:a7:3b:e8:86:d5:c3:4f:18:e3:44:d0:e0:dc:f3:c5: 68:2e:fe:a5:2f:05:84:c8:7e:47:42:53:6b:87:4a:fe:32:ff: 5e:3e:70:8c:b7:a8:15:cc:17:c2:ff:46:ec:d0:ec:2d:b4:6e: 12:28:a9:f9:40:e9:eb:d4:66:97:53:a9:69:55:c0:a9:aa:b2: 2e:cd:d1:69:f4:be:f8:bb:7c:69:ee:54:a6:db:9e:fb:5a:a6: 3e:fe:9a:ef:94:51:4b:75:ee:d8:d4:e1:9a:f1:02:56:13:89: 0e:a7:42:8b:96:8b:85:0c:1b:85:be:26:ae:ab:a6:99:bc:22: f1:73:df:42 GlobalSign Primary Class 3 CA ============================= MD5 Fingerprint: 98:12:A3:4B:95:A9:96:64:94:E7:50:8C:3E:E1:83:5A PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631 WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph +xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:d6:c3 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 3 CA, CN=GlobalSign Primary Class 3 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:91:5e:56:65:d6:c0:c0:04:9c:bf:47:c4:5c:7b: 7a:31:01:f9:58:96:99:e3:1c:84:2f:dc:56:8f:ad: f5:59:81:d5:43:66:5d:5a:93:8c:75:ca:a9:e7:11: c1:51:10:14:60:c9:2c:d4:7b:af:c6:77:86:ab:7a: 27:ae:6f:95:b9:0b:ca:b6:46:fb:7e:1a:f4:0d:14: 6d:d2:c9:4e:b2:ae:f0:54:f6:5c:40:4c:36:48:74: e8:54:8c:65:66:10:a7:bd:2b:b7:20:8d:05:49:ad: 78:7d:d2:24:23:50:e3:f0:b4:79:9b:01:39:ff:af: 3b:d3:2d:ee:e1:49:8d:8d:2f:3c:6a:41:45:2f:9b: e3:3d:e1:12:e4:91:75:9e:cf:a0:3e:3c:92:81:6f: 8a:2e:18:dc:e0:f2:8c:8c:fd:87:d9:07:f4:40:94: c9:4e:4f:43:df:67:56:6f:bd:03:50:7c:99:67:a4: b9:3c:91:6c:02:6e:84:d6:fc:46:f7:cc:6f:18:3e: 17:f0:ef:0b:64:16:57:e6:ac:86:f1:48:aa:43:c1: c9:27:78:73:44:45:e2:85:7d:ba:ff:b3:e1:fb:1b: 05:a4:4b:3b:99:12:25:01:50:14:6a:af:5d:ea:c8: 0c:ee:e4:da:ec:4b:8b:5c:68:13:95:dc:c3:b5:30: 3a:d7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d: a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59: 3e:94:1d:69:fa:89:d3:0c:bd:1a:01:f4:3f:e8:e0:77:1a:82: 28:5a:e6:62:d7:b7:e3:36:c9:0e:9f:7a:e3:c2:d3:cc:59:89: 0c:ef:16:8b:f0:36:77:22:ca:a4:b6:b7:c1:42:67:01:40:63: cc:e7:38:64:87:5b:14:96:66:7b:2d:14:ee:bd:49:6d:ff:77: d0:e2:4e:5b:d3:80:c2:4d:0f:ca:b8:9d:81:97:a7:34:6e:c7: e3:9c:48:e5:b4:aa:45:f5:f6:65:4c:48:f2:12:c2:d2:93:8c: c2:15:24:f3:2b:52:ff:e3:08:ae:b8:6e:d6:2c:12:cf:39:cb: 12:2a:e7:a9:7b:5f:98:3d:a3:e1:cc:a6:63:89:5c:7d:31:75: f9:d5:d6:5d:f2:d0:d4:3d:df:9e:71:a8:0e:dc:e4:20:97:78: e6:7f:53:a4:0d:51:4f:8e:3b:03:ae:a3:0d:5a:4d:c3:79:e7: 35:58:70:42:c9:5e:a1:5e:b4:d9:22:a3:44:53:35:a4:d0:cf: 73:80:c5:cf:9f:56:98:76:f9:14:4c:77:87:82:c9:dc:7e:5d: 34:d5:36:75 GlobalSign Root CA ================== MD5 Fingerprint: AB:BF:EA:E3:6B:29:A6:CC:A6:78:35:99:EF:AD:2B:80 PEM Data: -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b7:94:05 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 1 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2014 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b: 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0: 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89: 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c: 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50: 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0: 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2: 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7: 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c: 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2: 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9: c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b: bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91: ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51: 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa: 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a: 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93: 90:cf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f: 6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98: 7d:0a:bb:e5:b0:9d:3d:36:db:8f:05:51:ff:09:31:2a:1f:dd: 89:77:9e:0f:2e:6c:95:04:ed:86:cb:b4:00:3f:84:02:4d:80: 6a:2a:2d:78:0b:ae:6f:2b:a2:83:44:83:1f:cd:50:82:4c:24: af:bd:f7:a5:b4:c8:5a:0f:f4:e7:47:5e:49:8e:37:96:fe:9a: 88:05:3a:d9:c0:db:29:87:e6:19:96:47:a7:3a:a6:8c:8b:3c: 77:fe:46:63:a7:53:da:21:d1:ac:7e:49:a2:4b:e6:c3:67:59: 2f:b3:8a:0e:bb:2c:bd:a9:aa:42:7c:35:c1:d8:7f:d5:a7:31: 3a:4e:63:43:39:af:08:b0:61:34:8c:d3:98:a9:43:34:f6:0f: 87:29:3b:9d:c2:56:58:98:77:c3:f7:1b:ac:f6:9d:f8:3e:aa: a7:54:45:f0:f5:f9:d5:31:65:fe:6b:58:9c:71:b3:1e:d7:52: ea:32:17:fc:40:60:1d:c9:79:24:b2:f6:6c:fd:a8:66:0e:82: dd:98:cb:da:c2:44:4f:2e:a0:7b:f2:f7:6b:2c:76:11:84:46: 8a:78:a3:e3 National Retail Federation by DST ================================= MD5 Fingerprint: AD:8E:0F:9E:01:6B:A0:C5:74:D5:0C:D3:68:65:4F:1E PEM Data: -----BEGIN CERTIFICATE----- MIIEAjCCAuoCEQDQHkCKAAACfAAAAAMAAAABMA0GCSqGSIb3DQEBBQUAMIG+MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UE CxMaTmF0aW9uYWwgUmV0YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJG KSBSb290Q0ExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05 ODEyMTExNjE0MTZaFw0wODEyMDgxNjE0MTZaMIG+MQswCQYDVQQGEwJ1czENMAsG A1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UECxMaTmF0aW9uYWwgUmV0 YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJGKSBSb290Q0ExITAfBgkq hkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBANmsm3f6UNPM3LlArLlyagCHI/wPliHQJq/k4rVf+tOmfSEw LswXgo+YdPxnpKbfiJeiQin1p9sRk/teIzDCqrwi50Eb5e0l3sg/295XRXhARoOy 1Ro93w9FbdVjAnXYL8Zuq5WRdDcNy00JXNHUWzra3Q7Ia5nY1TnM34VVxJJTAqPh 94DJcKPa3DPEf6JHCBw1lh+hAxwwg/TEzP+Yw7BGRKLAv63b0oH2TJgsp14k84bK Y9W6ffCawErQG1ju7Klnz2kCbCLAYCws0cgg6sgt+92cu8tRTNznVwQ7VJsRpTJ0 7HQB85AVWy98LJNluWZntIGINeWekRh/gahByMsCAwEAATANBgkqhkiG9w0BAQUF AAOCAQEAhF4LO+ygjRyb0DwdcWnkGn9kvoFlYcWMatd8AHTgemJV7SR84GHj8t0U 5hFugw7h6qmegK2aIL/gV37V0LWEYy3ZGOS9GzUsXq5hdqpnhTs44TGBHzF/5tf4 W9K7Y3mGxIzF3gqu19H8AXT/trYNYoFnHLsm+CSA4Fxe2KSKOo99y/+So/18qTJp B1hYYUKZUgOxOD3GcW9s8uh9BqrBfFPLGi2IT8mpp6xpb/ekH9h0gfVKv7FVt9N3 OKdvwkrI4nOJ01dy4UMvcjz2H7f4BEpuwemUF+SXF/QOE4ZvjavoXy20/2zWorQf 7LmUaqoSTxrd9Xe1JYzyigrx/FJbWA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8a:00:00:02:7c:00:00:00:03:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 11 16:14:16 1998 GMT Not After : Dec 8 16:14:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d9:ac:9b:77:fa:50:d3:cc:dc:b9:40:ac:b9:72: 6a:00:87:23:fc:0f:96:21:d0:26:af:e4:e2:b5:5f: fa:d3:a6:7d:21:30:2e:cc:17:82:8f:98:74:fc:67: a4:a6:df:88:97:a2:42:29:f5:a7:db:11:93:fb:5e: 23:30:c2:aa:bc:22:e7:41:1b:e5:ed:25:de:c8:3f: db:de:57:45:78:40:46:83:b2:d5:1a:3d:df:0f:45: 6d:d5:63:02:75:d8:2f:c6:6e:ab:95:91:74:37:0d: cb:4d:09:5c:d1:d4:5b:3a:da:dd:0e:c8:6b:99:d8: d5:39:cc:df:85:55:c4:92:53:02:a3:e1:f7:80:c9: 70:a3:da:dc:33:c4:7f:a2:47:08:1c:35:96:1f:a1: 03:1c:30:83:f4:c4:cc:ff:98:c3:b0:46:44:a2:c0: bf:ad:db:d2:81:f6:4c:98:2c:a7:5e:24:f3:86:ca: 63:d5:ba:7d:f0:9a:c0:4a:d0:1b:58:ee:ec:a9:67: cf:69:02:6c:22:c0:60:2c:2c:d1:c8:20:ea:c8:2d: fb:dd:9c:bb:cb:51:4c:dc:e7:57:04:3b:54:9b:11: a5:32:74:ec:74:01:f3:90:15:5b:2f:7c:2c:93:65: b9:66:67:b4:81:88:35:e5:9e:91:18:7f:81:a8:41: c8:cb Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 84:5e:0b:3b:ec:a0:8d:1c:9b:d0:3c:1d:71:69:e4:1a:7f:64: be:81:65:61:c5:8c:6a:d7:7c:00:74:e0:7a:62:55:ed:24:7c: e0:61:e3:f2:dd:14:e6:11:6e:83:0e:e1:ea:a9:9e:80:ad:9a: 20:bf:e0:57:7e:d5:d0:b5:84:63:2d:d9:18:e4:bd:1b:35:2c: 5e:ae:61:76:aa:67:85:3b:38:e1:31:81:1f:31:7f:e6:d7:f8: 5b:d2:bb:63:79:86:c4:8c:c5:de:0a:ae:d7:d1:fc:01:74:ff: b6:b6:0d:62:81:67:1c:bb:26:f8:24:80:e0:5c:5e:d8:a4:8a: 3a:8f:7d:cb:ff:92:a3:fd:7c:a9:32:69:07:58:58:61:42:99: 52:03:b1:38:3d:c6:71:6f:6c:f2:e8:7d:06:aa:c1:7c:53:cb: 1a:2d:88:4f:c9:a9:a7:ac:69:6f:f7:a4:1f:d8:74:81:f5:4a: bf:b1:55:b7:d3:77:38:a7:6f:c2:4a:c8:e2:73:89:d3:57:72: e1:43:2f:72:3c:f6:1f:b7:f8:04:4a:6e:c1:e9:94:17:e4:97: 17:f4:0e:13:86:6f:8d:ab:e8:5f:2d:b4:ff:6c:d6:a2:b4:1f: ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1: fc:52:5b:58 TC TrustCenter, Germany, Class 0 CA =================================== MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V 8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz 9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:54:48 1998 GMT Not After : Dec 31 13:54:48 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:df:7d:e6:be:bf:d5:f0:2f:6d:4e:0e:d1:e0:8d: 0b:7f:3b:54:e8:8a:e2:b0:9f:28:c5:8a:c6:b9:b3: 33:27:f5:27:ca:1a:4c:54:12:6b:b4:b2:46:b3:1d: 4b:b3:f4:21:0b:4b:02:2e:a1:c2:34:9c:85:a0:c4: 78:11:db:db:6b:27:2b:09:2a:18:4e:40:cc:9f:71: 19:67:99:74:a2:7c:3f:c1:d8:8b:23:c8:63:3b:8a: 21:ab:5c:de:1e:f4:8d:dc:b4:18:c3:05:73:f4:6a: b4:a1:fa:01:08:2b:01:0f:6d:37:5b:aa:38:86:67: 39:d7:e5:5f:fa:e4:7e:cc:a3 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 0 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf: fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97: 90:5e:62:18:c6:c9:38:61:4c:68:35:d3:4c:14:11:eb:c4:cd: a1:a9:d8:c5:9e:68:27:32:07:35:45:04:f8:5f:21:a0:60:1e: 1c:00:48:04:58:d2:c5:cb:ae:6d:32:6e:3d:77:95:8c:85:c7: e5:ae:50:9d:75:4a:7b:ff:0b:27:79:ea:4d:a4:59:ff:ec:5a: ea:26:a5:39:83:a4:d1:78:ce:a7:a9:7e:bc:dd:2b:ca:12:93: 03:4a TC TrustCenter, Germany, Class 1 CA =================================== MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:56:33 1998 GMT Not After : Dec 31 13:56:33 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b0:29:eb:b4:76:b3:ae:d7:b6:5b:b4:5e:e7:bd: e3:b1:9c:49:04:57:5b:a1:ab:d9:7f:13:1b:fd:ba: 61:ab:d8:e7:71:df:2d:00:94:5d:51:48:7d:23:ef: 75:62:84:90:3c:0a:1f:59:11:74:2f:8e:80:a5:fd: 30:02:3d:29:52:cd:72:1a:49:21:9c:bc:cb:52:8e: 48:a1:63:96:c8:10:85:30:69:57:74:45:c0:5a:86: c6:d5:3d:e0:68:57:7d:31:6a:24:8d:45:97:3e:31: 7e:68:66:32:6e:24:6d:ec:32:36:c9:41:ca:f0:31: 44:c8:a3:61:ca:1b:a0:36:1f Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 1 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08: b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96: 75:e8:16:38:a0:cd:5d:6e:fa:79:a7:1b:7b:1d:1e:c3:00:b9: 66:be:5a:d6:62:0f:e7:f2:7b:b8:ef:4c:e0:c0:3f:59:ae:39: b7:84:09:9e:ab:f1:a9:2e:6b:69:e2:ad:cc:f2:ea:78:09:05: 20:38:42:71:18:7e:c7:b2:97:e6:d5:02:05:06:56:a3:5f:f1: aa:c2:c4:4f:fe:f7:ef:16:0f:9d:ec:aa:85:cf:3d:29:24:f1: 04:cd TC TrustCenter, Germany, Class 2 CA =================================== MD5 Fingerprint: E1:E9:96:53:77:E1:F0:38:A0:02:AB:94:C6:95:7B:FC PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ +Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:57:44 1998 GMT Not After : Dec 31 13:57:44 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:da:38:e8:ed:32:00:29:71:83:01:0d:bf:8c:01: dc:da:c6:ad:39:a4:a9:8a:2f:d5:8b:5c:68:5f:50: c6:62:f5:66:bd:ca:91:22:ec:aa:1d:51:d7:3d:b3: 51:b2:83:4e:5d:cb:49:b0:f0:4c:55:e5:6b:2d:c7: 85:0b:30:1c:92:4e:82:d4:ca:02:ed:f7:6f:be:dc: e0:e3:14:b8:05:53:f2:9a:f4:56:8b:5a:9e:85:93: d1:b4:82:56:ae:4d:bb:a8:4b:57:16:bc:fe:f8:58: 9e:f8:29:8d:b0:7b:cd:78:c9:4f:ac:8b:67:0c:f1: 9c:fb:fc:57:9b:57:5c:4f:0d Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 2 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6: 0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7: 0d:13:02:94:0b:d9:8b:56:47:f4:bb:e7:c5:5f:7b:f4:63:4c: ae:7c:34:ea:0d:a2:a9:b3:2c:85:f3:e3:fe:27:54:10:92:b0: 8f:92:c1:98:42:18:70:48:db:4e:2c:eb:0d:24:68:e4:d1:f7: be:09:a9:29:87:bb:e8:da:dc:3e:a3:88:42:31:f5:d1:e3:7f: ae:d8:8e:00:5a:74:98:b0:4f:c6:ff:23:7b:5c:73:00:78:c9: db:4e TC TrustCenter, Germany, Class 3 CA =================================== MD5 Fingerprint: 62:AB:B6:15:4A:B4:B0:16:77:FF:AE:CF:16:16:2B:8C PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO 1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn 4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt 7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:58:49 1998 GMT Not After : Dec 31 13:58:49 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:b4:c1:35:05:2e:0d:8d:ec:a0:40:6a:1c:0e: 27:a6:50:92:6b:50:1b:07:de:2e:e7:76:cc:e0:da: fc:84:a8:5e:8c:63:6a:2b:4d:d9:4e:02:76:11:c1: 0b:f2:8d:79:ca:00:b6:f1:b0:0e:d7:fb:a4:17:3d: af:ab:69:7a:96:27:bf:af:33:a1:9a:2a:59:aa:c4: b5:37:08:f2:12:a5:31:b6:43:f5:32:96:71:28:28: ab:8d:28:86:df:bb:ee:e3:0c:7d:30:d6:c3:52:ab: 8f:5d:27:9c:6b:c0:a3:e7:05:6b:57:49:44:b3:6e: ea:64:cf:d2:8e:7a:50:77:77 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 3 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d: ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26: 7f:c0:61:ca:22:f7:91:dd:3c:36:59:9a:9b:75:f7:bc:e4:c8: ed:ec:02:b6:22:a7:f3:2c:f1:c8:92:78:6d:b6:ee:c5:28:ec: 80:20:4f:b9:6b:08:e7:2f:a7:86:1e:7d:b1:08:9f:54:b9:00: 37:3c:a0:d8:1a:c8:96:1c:f4:32:14:9c:39:95:b7:ee:f0:43: 49:c2:5e:e8:cb:79:6f:53:bf:fb:49:8a:2c:d8:4b:d9:55:f2: 12:70 TC TrustCenter, Germany, Class 4 CA =================================== MD5 Fingerprint: BF:AF:EC:C4:DA:F9:30:F9:CA:35:CA:25:E4:3F:8D:89 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK 85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 5 (0x5) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 14:00:20 1998 GMT Not After : Dec 31 14:00:20 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:2f:63:d6:36:7b:b2:0d:d3:55:f5:64:6c:e6: 25:5d:c6:b4:c8:14:ba:25:38:83:eb:56:62:a5:55: a9:65:a3:f4:23:99:c2:4b:b9:d0:cd:54:67:a6:a3: a0:a3:a9:33:2b:76:e4:bd:ad:77:b2:ed:5c:12:74: c3:c5:b6:0f:52:9a:72:93:43:90:62:66:15:0f:45: a5:dd:e0:dd:b8:6f:40:6e:57:c1:79:72:a3:60:aa: ba:76:1d:12:89:53:5a:fc:02:be:e1:09:13:c5:4a: 2f:dc:3d:8b:19:ad:d7:8b:24:45:fb:4c:f4:cd:5c: 35:1d:29:4c:51:f3:f2:6c:55 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 4 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e: 55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a: e3:c7:8f:25:fc:b1:1e:55:46:0f:8f:ff:4f:37:2f:a4:76:59: a6:64:eb:d5:16:70:bd:dd:95:33:0c:a4:0d:24:eb:64:50:b4: 43:11:f2:43:be:0d:71:98:22:ec:01:af:ec:f7:c7:5c:71:c3: 75:91:58:19:e8:dd:a0:f4:b4:f1:bc:10:4a:f3:93:b4:06:49: bb:1f:66:d2:bd:74:47:e1:9a:f9:eb:d7:ab:6d:1f:ba:e1:1d: 2c:da Thawte Personal Basic CA ======================== MD5 Fingerprint: E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41 PEM Data: -----BEGIN CERTIFICATE----- MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P 9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bc:bc:93:53:6d:c0:50:4f:82:15:e6:48:94:35: a6:5a:be:6f:42:fa:0f:47:ee:77:75:72:dd:8d:49: 9b:96:57:a0:78:d4:ca:3f:51:b3:69:0b:91:76:17: 22:07:97:6a:c4:51:93:4b:e0:8d:ef:37:95:a1:0c: 4d:da:34:90:1d:17:89:97:e0:35:38:57:4a:c0:f4: 08:70:e9:3c:44:7b:50:7e:61:9a:90:e3:23:d3:88: 11:46:27:f5:0b:07:0e:bb:dd:d1:7f:20:0a:88:b9: 56:0b:2e:1c:80:da:f1:e3:9e:29:ef:14:bd:0a:44: fb:1b:5b:18:d1:bf:23:93:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b: 53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9: d9:80:0f:a5:7b:5c:fb:73:c6:bd:d7:8a:61:5c:03:e3:2d:27: a8:17:e0:84:85:42:dc:5e:9b:c6:b7:b2:6d:bb:74:af:e4:3f: cb:a7:b7:b0:e0:5d:be:78:83:25:94:d2:db:81:0f:79:07:6d: 4f:f4:39:15:5a:52:01:7b:de:32:d6:4d:38:f6:12:5c:06:50: df:05:5b:bd:14:4b:a1:df:29:ba:3b:41:8d:f7:63:56:a1:df: 22:b1 Thawte Personal Freemail CA =========================== MD5 Fingerprint: 1E:74:C3:86:3C:0C:35:C5:3E:C2:7F:EF:3C:AA:3C:D9 PEM Data: -----BEGIN CERTIFICATE----- MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa /RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei gQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d4:69:d7:d4:b0:94:64:5b:71:e9:47:d8:0c:51: b6:ea:72:91:b0:84:5e:7d:2d:0d:8f:7b:12:df:85: 25:75:28:74:3a:42:2c:63:27:9f:95:7b:4b:ef:7e: 19:87:1d:86:ea:a3:dd:b9:ce:96:64:1a:c2:14:6e: 44:ac:7c:e6:8f:e8:4d:0f:71:1f:40:38:a6:00:a3: 87:78:f6:f9:94:86:5e:ad:ea:c0:5e:76:eb:d9:14: a3:5d:6e:7a:7c:0c:a5:4b:55:7f:06:19:29:7f:9e: 9a:26:d5:6a:bb:38:24:08:6a:98:c7:b1:da:a3:98: 91:fd:79:db:e5:5a:c4:1c:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0: 6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96: 8a:1f:62:42:23:8c:17:0f:f4:ba:64:9c:17:ac:47:29:df:9d: 98:5e:d2:6c:60:71:5c:a2:ac:dc:79:e3:e7:6e:00:47:1f:b5: 0d:28:e8:02:9d:e4:9a:fd:13:f4:a6:d9:7c:b1:f8:dc:5f:23: 26:09:91:80:73:d0:14:1b:de:43:a9:83:25:f2:e6:9c:2f:15: ca:fe:a6:ab:8a:07:75:8b:0c:dd:51:84:6b:e4:f8:d1:ce:77: a2:81 Thawte Personal Premium CA ========================== MD5 Fingerprint: 3A:B2:DE:22:9A:20:93:49:F9:ED:C8:D2:8A:E7:68:0D PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:66:d9:f8:07:44:cf:b9:8c:2e:f0:a1:ef:13: 45:6c:05:df:de:27:16:51:36:41:11:6c:6c:3b:ed: fe:10:7d:12:9e:e5:9b:42:9a:fe:60:31:c3:66:b7: 73:3a:48:ae:4e:d0:32:37:94:88:b5:0d:b6:d9:f3: f2:44:d9:d5:88:12:dd:76:4d:f2:1a:fc:6f:23:1e: 7a:f1:d8:98:45:4e:07:10:ef:16:42:d0:43:75:6d: 4a:de:e2:aa:c9:31:ff:1f:00:70:7c:66:cf:10:25: 08:ba:fa:ee:00:e9:46:03:66:27:11:15:3b:aa:5b: f2:98:dd:36:42:b2:da:88:75 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5: 36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f: 85:67:8e:de:2b:b9:e2:17:b0:3a:a0:f0:0e:a2:00:9a:df:f3: 14:15:6e:bb:c8:85:5a:98:80:f9:ff:be:74:1d:3d:f3:fe:30: 25:d1:37:34:67:fa:a5:71:79:30:61:29:72:c0:e0:2c:4c:fb: 56:e4:3a:a8:6f:e5:32:59:52:db:75:28:50:59:0c:f8:0b:19: e4:ac:d9:af:96:8d:2f:50:db:07:c3:ea:1f:ab:33:e0:f5:2b: 31:89 Thawte Premium Server CA ======================== MD5 Fingerprint: 06:9F:69:79:16:66:90:02:1B:8C:8C:A2:C3:07:6F:3A PEM Data: -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f: 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18: 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af: 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2: 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93: cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44: 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73: b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07: 8d:f4:42:4d:e7:40:9d:1c:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7: c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5: 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb: c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59: 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9: a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92: 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07: 14:42 Thawte Server CA ================ MD5 Fingerprint: C5:70:C4:A2:ED:53:78:0C:C8:10:53:81:64:CB:D0:1D PEM Data: -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: 3a:c2:b5:66:22:12:d6:87:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: 70:47 Thawte Universal CA Root ======================== MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13 PEM Data: -----BEGIN CERTIFICATE----- MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0 ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2 MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/ ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7 32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft +aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7 Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3 uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6 27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3 TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE 7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8 Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5 m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4 QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt 3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr 0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc 1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE 92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5 FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD 8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5 alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8 79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur 2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4 69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C yJTuQFv5QgLC/7DYLOsof17JJgGZpw== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Validity Not Before: Dec 5 13:56:05 1999 GMT Not After : Apr 3 13:56:05 2037 GMT Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (16384 bit) Modulus (16384 bit): 00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd: 9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f: 55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a: 16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5: bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68: e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5: 90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de: 05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71: 75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1: 8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5: ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9: a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff: 24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be: e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84: 23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c: 5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83: 82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38: 0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77: ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7: 3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a: 02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2: 09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6: 16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15: 78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32: c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59: 91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e: e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48: b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19: 14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71: 31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab: 42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4: 02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f: 50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66: a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1: 82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53: fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91: 2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06: de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2: ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18: 14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a: 85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be: a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10: 7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55: 2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b: ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48: 20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b: 85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11: 2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87: 72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c: ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05: d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06: c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83: a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28: 03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f: 67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77: 6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11: 87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da: 77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b: 32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c: 60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b: eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f: 8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a: 8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1: bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17: 03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09: 97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a: 18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06: b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33: 4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee: 33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44: cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db: 08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a: 4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee: 49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c: 52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23: 70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a: 67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02: 4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72: 42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab: aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98: d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84: ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b: a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83: 02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e: ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38: ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52: 2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00: 73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c: 9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca: c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12: 53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79: ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87: b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43: cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44: ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47: e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a: d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb: 87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc: f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8: d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99: a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93: 9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43: f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e: df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16: 96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d: 07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc: 50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72: 4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab: 7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75: aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e: 4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0: 00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e: 24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72: 01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6: 28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4: 6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c: 16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8: ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d: 71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9: 44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07: ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8: 08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76: 62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54: d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1: ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39: 79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3: 29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91: 2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f: ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c: 5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b: 30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18: 58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48: 68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a: 66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d: 98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4: ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63: 72:fa:29:65:bc:70:44:cf:5d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b: 86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe: 9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22: 30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c: c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4: f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df: 95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86: 26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9: 0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03: ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66: 96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0: 51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e: 40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7: 5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72: b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee: 72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1: b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0: 60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40: d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d: f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37: 3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49: fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67: db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3: c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a: 3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b: e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a: 9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e: 8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88: 0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63: 6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05: 1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce: 56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1: 01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05: 20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25: 91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2: cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2: 9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01: d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b: 1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10: 91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c: 23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b: 1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63: ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd: 8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49: 20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46: 73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14: 2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84: 62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f: 4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6: 79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18: bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18: 05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d: 93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc: bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1: 04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab: 28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28: 36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7: 57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd: f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0: 98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37: a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4: 5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3: 4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3: 4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d: a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63: 5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c: c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42: 8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86: b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2: a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5: d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08: 29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f: 63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d: 33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19: 65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac: ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9: 17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5: 46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7: 43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a: 88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e: a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52: 56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04: da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9: b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54: e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6: 88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d: fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3: 1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2: 77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d: 7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c: 38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40: 2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6: 92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a: 41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46: 8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2: 6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45: 92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36: 31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68: 80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95: e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16: 32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18: 33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6: f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3: e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53: 8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57: 48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6: be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1: 0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26: 57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de: 4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b: 6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64: 3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9: cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02: c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7 UPS Document Exchange by DST ============================ MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuACEQDQHkCLAAACfAAAAAcAAAABMA0GCSqGSIb3DQEBBQUAMIG5MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEeMBwGA1UE CxMVVW5pdGVkIFBhcmNlbCBTZXJ2aWNlMRkwFwYDVQQDExBEU1QgKFVQUykgUm9v dENBMSEwHwYJKoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wHhcNOTgxMjEw MDAyNTQ2WhcNMDgxMjA3MDAyNTQ2WjCBuTELMAkGA1UEBhMCdXMxDTALBgNVBAgT BFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MSQwIgYDVQQKExtEaWdpdGFs IFNpZ25hdHVyZSBUcnVzdCBDby4xHjAcBgNVBAsTFVVuaXRlZCBQYXJjZWwgU2Vy dmljZTEZMBcGA1UEAxMQRFNUIChVUFMpIFJvb3RDQTEhMB8GCSqGSIb3DQEJARYS Y2FAZGlnc2lndHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA7xfsrynm2SsnwNt7JJ9m9ASjwq0KyrDNhCuqN/OAoWDvQo/lXXdfV0JU3Svb YbJxXpN7b1/rJCvnpPLr8XOzC431Wdcy36yQjk4xuiVNtgym8eWvDOHlb1IDFcHf vn5KpqYYRnA/76dNqNz1dNlhekA8oZQo6sKUiMs3FQUZPJViuhwt+yiM0ciekjxb EVQ7eNlHO5stSuY+e2vf9PYFzyj2upg2AJ48N4UKnN63pIXFY/23YhRtFx7MioCF QjIRsCHinXfJgBZBnuvlFIl/t8O8T8Gfh5uW7GP2+ZBWDpWjIwqMZNqbuxx3sExd 5sjo9X15LVckP8zjPSyYzxKfFwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQC7OI4E IiZYDiFEVsy9WXwpaMtcD8iGVD+BeKetj8xG9xxUuHktW3IFaugh0OwdHf6kNFG+ 7u3OzJwWaOJddXMIQzGRahArEMJLafjJrZio/bjv9qvwXyHvy4VrCe0vSGa1YHLA 6KDHmNsO9xtzjTQICnvFd2KqMCObsB6LgJhU3AWHs6liWfyLtxWarETszzUa9w8u XZJLAch77qA37eQdgg2ZQUMXrdTVyuP5fReiAdAwD0C53LkEgmmDtvkP+gaS96j0 1hcc8F5/xCnI5uHi/zZoIVGu/6m6hJKtinsz2JDSwXltMzM5dKwbOHGfLAeQ6h3g 04lfy+8UjSdUpb1G -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:07:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 10 00:25:46 1998 GMT Not After : Dec 7 00:25:46 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ef:17:ec:af:29:e6:d9:2b:27:c0:db:7b:24:9f: 66:f4:04:a3:c2:ad:0a:ca:b0:cd:84:2b:aa:37:f3: 80:a1:60:ef:42:8f:e5:5d:77:5f:57:42:54:dd:2b: db:61:b2:71:5e:93:7b:6f:5f:eb:24:2b:e7:a4:f2: eb:f1:73:b3:0b:8d:f5:59:d7:32:df:ac:90:8e:4e: 31:ba:25:4d:b6:0c:a6:f1:e5:af:0c:e1:e5:6f:52: 03:15:c1:df:be:7e:4a:a6:a6:18:46:70:3f:ef:a7: 4d:a8:dc:f5:74:d9:61:7a:40:3c:a1:94:28:ea:c2: 94:88:cb:37:15:05:19:3c:95:62:ba:1c:2d:fb:28: 8c:d1:c8:9e:92:3c:5b:11:54:3b:78:d9:47:3b:9b: 2d:4a:e6:3e:7b:6b:df:f4:f6:05:cf:28:f6:ba:98: 36:00:9e:3c:37:85:0a:9c:de:b7:a4:85:c5:63:fd: b7:62:14:6d:17:1e:cc:8a:80:85:42:32:11:b0:21: e2:9d:77:c9:80:16:41:9e:eb:e5:14:89:7f:b7:c3: bc:4f:c1:9f:87:9b:96:ec:63:f6:f9:90:56:0e:95: a3:23:0a:8c:64:da:9b:bb:1c:77:b0:4c:5d:e6:c8: e8:f5:7d:79:2d:57:24:3f:cc:e3:3d:2c:98:cf:12: 9f:17 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption bb:38:8e:04:22:26:58:0e:21:44:56:cc:bd:59:7c:29:68:cb: 5c:0f:c8:86:54:3f:81:78:a7:ad:8f:cc:46:f7:1c:54:b8:79: 2d:5b:72:05:6a:e8:21:d0:ec:1d:1d:fe:a4:34:51:be:ee:ed: ce:cc:9c:16:68:e2:5d:75:73:08:43:31:91:6a:10:2b:10:c2: 4b:69:f8:c9:ad:98:a8:fd:b8:ef:f6:ab:f0:5f:21:ef:cb:85: 6b:09:ed:2f:48:66:b5:60:72:c0:e8:a0:c7:98:db:0e:f7:1b: 73:8d:34:08:0a:7b:c5:77:62:aa:30:23:9b:b0:1e:8b:80:98: 54:dc:05:87:b3:a9:62:59:fc:8b:b7:15:9a:ac:44:ec:cf:35: 1a:f7:0f:2e:5d:92:4b:01:c8:7b:ee:a0:37:ed:e4:1d:82:0d: 99:41:43:17:ad:d4:d5:ca:e3:f9:7d:17:a2:01:d0:30:0f:40: b9:dc:b9:04:82:69:83:b6:f9:0f:fa:06:92:f7:a8:f4:d6:17: 1c:f0:5e:7f:c4:29:c8:e6:e1:e2:ff:36:68:21:51:ae:ff:a9: ba:84:92:ad:8a:7b:33:d8:90:d2:c1:79:6d:33:33:39:74:ac: 1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27: 54:a5:bd:46 ValiCert Class 1 VA =================== MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 25 22:23:48 1999 GMT Not After : Jun 25 22:23:48 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e: a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3: 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03: 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a: 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8: 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0: 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e: e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76: 72:a0:1d:9d:1d:c0:dd:3f:71 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f: 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2: 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23: cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9: fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee: e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5: ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d: 72:c8 ValiCert Class 2 VA =================== MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:19:54 1999 GMT Not After : Jun 26 00:19:54 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74: 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb: 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed: 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4: d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f: b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91: 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64: 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1: b3:43:bb:ef:7b:6e:2e:69:f7 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e: a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d: bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21: 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99: 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32: 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72: 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f: 43:dd ValiCert Class 3 VA =================== MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:22:33 1999 GMT Not After : Jun 26 00:22:33 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72: 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35: 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7: ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92: 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30: 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b: 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04: 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7: 43:62:61:f3:d3:e2:d0:55:3f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d: f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42: d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f: 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f: 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67: c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d: 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c: 15:ee VeriSign Class 4 Primary CA =========================== MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10 PEM Data: -----BEGIN CERTIFICATE----- MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1 9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:a6:00:00:01 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Dec 31 23:59:59 1999 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d0:b2:75:f6:78:d0:ae:5a:50:f4:e9:50:a9:9f: 8c:d7:ef:91:94:70:e8:d2:24:90:76:89:85:d6:df: ac:e6:01:17:32:80:f0:9d:93:47:bc:9a:65:9d:1f: 97:ae:bf:e9:86:75:63:20:89:bd:80:58:9d:04:0c: 9d:a8:c1:24:e9:0b:e5:31:78:bd:fc:2d:0c:37:6a: 9e:78:80:e9:46:75:f9:ed:a3:fb:13:7b:c8:c1:4c: d2:a3:ef:f5:3c:b0:62:8f:4a:5d:3b:dd:95:67:8f: 13:b9:c1:3c:d6:a7:26:9b:ec:c3:3b:7a:d9:4d:bc: 6d:9b:e8:15:01:e3:f0:47:a9 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 53:dd:d3:f0:9c:24:7e:40:aa:e2:fc:00:1a:d7:da:0c:fc:32: 61:b8:15:0d:96:f3:fa:57:1b:7f:33:7c:af:e9:98:9a:61:c8: 7a:b3:b7:ff:b1:dc:99:83:dc:ac:12:fc:70:c9:1f:38:42:ed: 44:f6:80:2e:5b:6b:33:69:ac:9c:d3:5c:e7:5f:5a:18:c7:b1: 2d:79:04:96:41:91:99:41:b1:3c:0d:ba:84:39:c6:3b:97:f0: 26:c9:8e:ee:bd:cc:42:95:ff:1e:c7:02:3f:54:0c:78:f5:bc: aa:60:7c:02:69:e8:dc:ac:e2:02:76:61:c4:3e:03:ea:d2:8a: 24:d1 Verisign Class 1 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 97:60:E8:57:5F:D3:50:47:E5:43:0C:94:36:8A:B0:62 PEM Data: -----BEGIN CERTIFICATE----- MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR 4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx lA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: cd:ba:7f:56:f0:df:e4:bc:54:fe:22:ac:b3:72:aa:55 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de: b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46: 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c: b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58: 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31: ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e: 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9: 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba: 2a:2f:31:aa:ee:a3:67:da:db Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 4c:3f:b8:8b:c6:68:df:ee:43:33:0e:5d:e9:a6:cb:07:84:4d: 7a:33:ff:92:1b:f4:36:ad:d8:95:22:36:68:11:6c:7c:42:cc: f3:9c:2e:c4:07:3f:14:b0:0f:4f:ff:90:92:76:f9:e2:bc:4a: e9:8f:cd:a0:80:0a:f7:c5:29:f1:82:22:5d:b8:b1:dd:81:23: a3:7b:25:15:46:30:79:16:f8:ea:05:4b:94:7f:1d:c2:1c:c8: e3:b7:f4:10:40:3c:13:c3:5f:1f:53:e8:48:e4:86:b4:7b:a1: 35:b0:7b:25:ba:b8:d3:8e:ab:3f:38:9d:00:34:00:98:f3:d1: 71:94 Verisign Class 1 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: F2:7D:E9:54:E4:A3:22:0D:76:9F:E7:0B:BB:B3:24:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDnKVIn+UCIy/jLZ2/sbhBkwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIv3GhDOdlwHq4OZ3BeAbzQ5XZg+a3Is4cei e0ApuXiIukzFo2penm574/ICQQxmvq37rqIUzpLzojSLtLK2JPLl1eDI5WJthHvL vrsDi3xXyvA3qZCviu4Dvh0onNkmdqDNxJ1O8K4HFtW+r1cIatCgQkJCHvQgzKV4 gpUmOIpH -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 39:ca:54:89:fe:50:22:32:fe:32:d9:db:fb:1b:84:19 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : May 18 23:59:59 2018 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76: 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52: 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e: 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35: eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5: e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d: 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b: 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea: 09:40:be:73:92:3d:6b:e7:75 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8b:f7:1a:10:ce:76:5c:07:ab:83:99:dc:17:80:6f:34:39:5d: 98:3e:6b:72:2c:e1:c7:a2:7b:40:29:b9:78:88:ba:4c:c5:a3: 6a:5e:9e:6e:7b:e3:f2:02:41:0c:66:be:ad:fb:ae:a2:14:ce: 92:f3:a2:34:8b:b4:b2:b6:24:f2:e5:d5:e0:c8:e5:62:6d:84: 7b:cb:be:bb:03:8b:7c:57:ca:f0:37:a9:90:af:8a:ee:03:be: 1d:28:9c:d9:26:76:a0:cd:c4:9d:4e:f0:ae:07:16:d5:be:af: 57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38: 8a:47 Verisign Class 1 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO 8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d: dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d: ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8: de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e: f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6: 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10: 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3: 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca: 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff: c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e: 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27: a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb: 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29: bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12: 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81: 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7: a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76: d1:3d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a: aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9: fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c: b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7: b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0: 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f: 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54: 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8: 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec: a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38: dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f: b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50: ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef: 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f: a4:ef:3f:ee Verisign Class 2 Public Primary Certification Authority ======================================================= MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 2d:1b:fc:4a:17:8d:a3:91:eb:e7:ff:f5:8b:45:be:0b Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:5a:8b:a3:0d:6a:23:83:80:6b:cf:39:87:f4: 21:13:33:06:4c:25:a2:ed:55:12:97:c5:a7:80:b9: fa:83:c1:20:a0:fa:2f:15:0d:7c:a1:60:6b:7e:79: 2c:fa:06:0f:3a:ae:f6:1b:6f:b1:d2:ff:2f:28:52: 5f:83:7d:4b:c4:7a:b7:f8:66:1f:80:54:fc:b7:c2: 8e:59:4a:14:57:46:d1:9a:93:be:41:91:03:bb:15: 80:93:5c:eb:e7:cc:08:6c:3f:3e:b3:4a:fc:ff:4b: 6c:23:d5:50:82:26:44:19:8e:23:c3:71:ea:19:24: 47:04:9e:75:bf:c8:a6:00:1f Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 8a:1b:2b:fa:39:c1:74:d7:5e:d8:19:64:a2:58:4a:2d:37:e0: 33:47:0f:ac:ed:f7:aa:db:1e:e4:8b:06:5c:60:27:ca:45:52: ce:16:ef:3f:06:64:e7:94:68:7c:60:33:15:11:69:af:9d:62: 8d:a3:03:54:6b:a6:be:e5:ee:05:18:60:04:bf:42:80:fd:d0: a8:a8:1e:01:3b:f7:a3:5c:af:a3:dc:e6:26:80:23:3c:b8:44: 74:f7:0a:ae:49:8b:61:78:cc:24:bf:88:8a:a7:0e:ea:73:19: 41:fd:4d:03:f0:88:d1:e5:78:8d:a5:2a:4f:f6:97:0d:17:77: ca:d8 Verisign Class 2 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn jBJ7xUS0rg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c: 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be: 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99: 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08: 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4: 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f: 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9: 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff: 0d:6c:f5:2d:0e:6d:ce:7f:77 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8: 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4: ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0: d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30: 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a: 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4: 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44: b4:ae Verisign Class 2 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 PEM Data: -----BEGIN CERTIFICATE----- MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u 7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd: a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd: 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1: a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10: ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02: 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7: 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56: 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3: 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32: dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7: 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2: ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8: 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5: 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb: 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2: ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11: 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8: 3e:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7: de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5: fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4: e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33: 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55: a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4: 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63: 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf: 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64: 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46: 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45: aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43: e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33: 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf: 4b:4b:df:2a Verisign Class 3 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67 PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: 71:64:4c:65:2e:81:68:45:a7 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84: 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f: 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57: 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c: 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45: 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6: 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64: 0d:64 Verisign Class 3 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99: 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20: 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9: 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b: 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8: 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43: 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97: 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69: 61:f8:9b:1d:1c:89:4f:5c:67 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67: 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b: 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27: 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01: ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69: 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59: 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69: 91:fd Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd: f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5: 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20: c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad: 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04: 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0: 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32: 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88: e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96: 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79: 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8: 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46: b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c: 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76: ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63: d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e: 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9: 57:97 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de: db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f: 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09: 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5: 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f: d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8: ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38: 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe: 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69: 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00: cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2: c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af: 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e: 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b: f1:7d:dd:11 Verisign Class 4 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP T8qAkbYp -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 32:88:8e:9a:d2:f5:eb:13:47:f8:7f:c4:20:37:25:f8 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ba:f0:e4:cf:f9:c4:ae:85:54:b9:07:57:f9:8f: c5:7f:68:11:f8:c4:17:b0:44:dc:e3:30:73:d5:2a: 62:2a:b8:d0:cc:1c:ed:28:5b:7e:bd:6a:dc:b3:91: 24:ca:41:62:3c:fc:02:01:bf:1c:16:31:94:05:97: 76:6e:a2:ad:bd:61:17:6c:4e:30:86:f0:51:37:2a: 50:c7:a8:62:81:dc:5b:4a:aa:c1:a0:b4:6e:eb:2f: e5:57:c5:b1:2b:40:70:db:5a:4d:a1:8e:1f:bd:03: 1f:d8:03:d4:8f:4c:99:71:bc:e2:82:cc:58:e8:98: 3a:86:d3:86:38:f3:00:29:1f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:8c:12:c1:a7:b9:50:15:7a:cb:3e:ac:b8:43:8a:dc:aa:dd: 14:ba:89:81:7e:01:3c:23:71:21:88:2f:82:dc:63:fa:02:45: ac:45:59:d7:2a:58:44:5b:b7:9f:81:3b:92:68:3d:e2:37:24: f5:7b:6c:8f:76:35:96:09:a8:59:9d:b9:ce:23:ab:74:d6:83: fd:32:73:27:d8:69:3e:43:74:f6:ae:c5:89:9a:e7:53:7c:e9: 7b:f6:4b:f3:c1:65:83:de:8d:8a:9c:3c:88:8d:39:59:fc:aa: 3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91: b6:29 Verisign Class 4 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56: ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59: de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4: e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09: fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2: 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86: 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e: d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46: 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1: 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88: 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d: a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea: c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0: ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2: 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7: 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34: 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97: ef:03 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5: 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be: 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3: 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02: 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1: 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b: 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52: e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14: 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc: d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83: 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0: a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0: 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01: a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3: 35:60:91:ce Verisign/RSA Commercial CA ========================== MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05 OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o 975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/ touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE 7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j 9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI 0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:41:00:00:16 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Validity Not Before: Nov 4 18:58:34 1994 GMT Not After : Nov 3 18:58:34 1999 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e: c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96: 3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d: 03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6: 8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2: 2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c: d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82: a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9: fd:bd:3b:69:d9:eb Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49: bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a: 83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48: d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79: 35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50: bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b: 53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5 Verisign/RSA Secure Server CA ============================= MD5 Fingerprint: 74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93 PEM Data: -----BEGIN CERTIFICATE----- MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII 0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc 1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Validity Not Before: Nov 9 00:00:00 1994 GMT Not After : Jan 7 23:59:59 2010 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25: 01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03: e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86: 37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9: 4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07: 65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48: b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49: 54:2c:73:3a:69:82:b1:97:39:9c:6d:70:67:48:e5: dd:2d:d6:c8:1e:7b Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 65:dd:7e:e1:b2:ec:b0:e2:3a:e0:ec:71:46:9a:19:11:b8:d3: c7:a0:b4:03:40:26:02:3e:09:9c:e1:12:b3:d1:5a:f6:37:a5: b7:61:03:b6:5b:16:69:3b:c6:44:08:0c:88:53:0c:6b:97:49: c7:3e:35:dc:6c:b9:bb:aa:df:5c:bb:3a:2f:93:60:b6:a9:4b: 4d:f2:20:f7:cd:5f:7f:64:7b:8e:dc:00:5c:d7:fa:77:ca:39: 16:59:6f:0e:ea:d3:b5:83:7f:4d:4d:42:56:76:b4:c9:5f:04: f8:38:f8:eb:d2:5f:75:5f:cd:7b:fc:e5:8e:80:7c:fc:50 CA WEB.DE TrustCenter ======================================= MD5 Fingerprint=BD:D4:F5:1A:7D:70:46:50:DB:6F:4D:68:41:83:99:93 PEM-Data: -----BEGIN CERTIFICATE----- MIIH1TCCBb2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCREUx GjAYBgNVBAcTEUQtNzYyMjcgS2FybHNydWhlMRIwEAYDVQQKEwlXRUIuREUgQUcx FDASBgNVBAsTC1RydXN0Q2VudGVyMRswGQYDVQQDExJXRUIuREUgVHJ1c3RDZW50 ZXIxGzAZBgkqhkiG9w0BCQEWDHRydXN0QHdlYi5kZTAeFw05OTA2MjMwOTE5NTRa Fw0wOTA2MjAwOTE5NTRaMIGNMQswCQYDVQQGEwJERTEaMBgGA1UEBxMRRC03NjIy NyBLYXJsc3J1aGUxEjAQBgNVBAoTCVdFQi5ERSBBRzEUMBIGA1UECxMLVHJ1c3RD ZW50ZXIxGzAZBgNVBAMTEldFQi5ERSBUcnVzdENlbnRlcjEbMBkGCSqGSIb3DQEJ ARYMdHJ1c3RAd2ViLmRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA wSWKmSp6XW+aYJsfYWhvxNgo3uViORtbNcpnkcLeAA4zobLEdqno80YInjFgWq8d f5U6jOFIAzPdRCFqsj6LQDppQq22q/sal4rOVVt3t6XlWgDBfF8K+iQEQQd2TNMS J7pd+MUY2IyBGjGqGINRKsoU/sd1nwPRm2tv3VhIlDOcxhJIx9pm2+hNmaJEz55a ma+sQl8+odtfsNNrYv1LitbqELP/hsRwWzE30m1cHvcy6yczH0GmKB8seSD69qjK HJlYa+qPrSjIwEhhUNOcoNx227B9ZJFETrTdW2q5vp4BAPoX2nvRm5ynAdaHn0LI pYrhwpEiTb121ksguyDH+AasBMZ6gVP0qTvI9awRfUPyZsxWXeBDaNpw2zkqnIaj QIlXzVYKSBaR4TSDQ9L+bYNDSCyERdSFyJeQ2UPL/jxuS94jIbGiWE07X7wuSoA2 BB0NKtUviZT/jyNzOGfu2TNcHkjc6x6NQMJanxKO5VZDfnfQUyWshQb99IelpjsS tPc//U04zMfEoJFvhosBIXKwthN7F7WE7KRhILTBwX2i+4d2doVA25OZHlcZI1L5 K391IzzqeJdrM4Nrc0MnAsRY+sZJVmUi8u9lHsxCjMht3DpJ1JALGhj7hTDPsxjX eGAUZIbq9rQ/fhN0UxXkO/wQfWVsq1ZO3XfgL4tE5OkCAwEAAaOCAjwwggI4MAwG A1UdEwQFMAMBAf8wSQYDVR0gBEIwQDA+BgtghkgBhvhFAQcBATAvMC0GCCsGAQUF BwIBFiFodHRwOi8vdHJ1c3Qud2ViLmRlL0hpbGZlL1BvbGljeS8wggEpBglghkgB hvhCAQ0EggEaFoIBFlRydXN0Q2VudGVyIHZvbiBXRUIuREUgLSBSb290LVplcnRp ZmlrYXQKCkRpZSBOdXR6dW5nIGRpZXNlcyBaZXJ0aWZpa2F0ZXMgd2lyZCB2b24g ZGVuIEFsbGdlbWVpbmVuIEdlc2No5GZ0c2JlZGluZ3VuZ2VuIChBR0IpIC8gWmVy dGlmaXppZXJ1bmdzcmljaHRsaW5pZW4gZGVzIFdFQi5ERSBUcnVzdENlbnRlcnMg Z2VyZWdlbHQuCkRpZSBBR0JzIHVuZCBaZXJ0aWZpemllcnVuZ3NyaWNodGxpbmll biBzaW5kIHVudGVyIGh0dHA6Ly90cnVzdC53ZWIuZGUvSGlsZmUvIGVpbnNlaGJh ci4KMBoGCWCGSAGG+EIBCAQNFgsvSGlsZmUvQUdCLzAWBglghkgBhvhCAQcECRYH L3JuLz9zPTAWBglghkgBhvhCAQMECRYHL3J2Lz9zPTAjBglghkgBhvhCAQIEFhYU aHR0cHM6Ly90cnVzdC53ZWIuZGUwEQYJYIZIAYb4QgEBBAQDAgAHMCwGCWCGSAGG +EIBBAQfFh1odHRwczovL3RydXN0LndlYi5kZS9ydkNBLz9zPTANBgkqhkiG9w0B AQQFAAOCAgEALT0XbRQJA+pMrUUT4tm1nCnPkm3+iz6Av2tf3BcONJrNVDgQGDN4 HL3iRMfLZvzSuvJ06BXl3ogqAkSUJxfBd7fYRi+rhgjKxuJZwUNS06a0eGlo12ol G4DOz2VrNFDmRzEIRv6DgnnIj7cjo9MPefFi/RJgRHQYP33dyP9dycKKsA0Q7xAI 6JvBduOaeAx/LrGE2JkcPk26oDkpPDFOh5FoQ6LffwFv5086IIa6uK6X9QPdwtzy apBp0YXeB/S+o2ggwA4n88Ht+U/aBbsCEoy6tbdosLqmLD2SkE4rFNJNBPLcw37o ITLKogpZnIEYWaz0Tcavvk90ytaCP5vXmSaQSjmeUQCgK/cXJwfp1QRUhkG4UU+U CvsmnhmGnwQLrnpUgQehw1M/KP2bRr9akBVIabic+yjKOUJuap1uhOosaQjsThgq 9uqYIYZGS9YjN50kRjxndbNuJVuhMgJSDCPE+74feCcySfjhVxGVJVnJUDQZoqVW /NqHaR07wAB6D1b+inaaKyz58Nw3D6yzBxpttZDTguWn+ry5eN6Um1Ez22Fs65Uo eszLk3hHFUnImzdd5QtFJ40JGxuiZoCpZhyJNpAvGUwUMsbdrY+iEqisKGVF07rQ D2H0VMBBKfqZr4BilkYTmnnciBN7OhOg2VDnyUNHxiIr3dT12oviZU8= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de Validity Not Before: Jun 23 09:19:54 1999 GMT Not After : Jun 20 09:19:54 2009 GMT Subject: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit): 00:c1:25:8a:99:2a:7a:5d:6f:9a:60:9b:1f:61:68: 6f:c4:d8:28:de:e5:62:39:1b:5b:35:ca:67:91:c2: de:00:0e:33:a1:b2:c4:76:a9:e8:f3:46:08:9e:31: 60:5a:af:1d:7f:95:3a:8c:e1:48:03:33:dd:44:21: 6a:b2:3e:8b:40:3a:69:42:ad:b6:ab:fb:1a:97:8a: ce:55:5b:77:b7:a5:e5:5a:00:c1:7c:5f:0a:fa:24: 04:41:07:76:4c:d3:12:27:ba:5d:f8:c5:18:d8:8c: 81:1a:31:aa:18:83:51:2a:ca:14:fe:c7:75:9f:03: d1:9b:6b:6f:dd:58:48:94:33:9c:c6:12:48:c7:da: 66:db:e8:4d:99:a2:44:cf:9e:5a:99:af:ac:42:5f: 3e:a1:db:5f:b0:d3:6b:62:fd:4b:8a:d6:ea:10:b3: ff:86:c4:70:5b:31:37:d2:6d:5c:1e:f7:32:eb:27: 33:1f:41:a6:28:1f:2c:79:20:fa:f6:a8:ca:1c:99: 58:6b:ea:8f:ad:28:c8:c0:48:61:50:d3:9c:a0:dc: 76:db:b0:7d:64:91:44:4e:b4:dd:5b:6a:b9:be:9e: 01:00:fa:17:da:7b:d1:9b:9c:a7:01:d6:87:9f:42: c8:a5:8a:e1:c2:91:22:4d:bd:76:d6:4b:20:bb:20: c7:f8:06:ac:04:c6:7a:81:53:f4:a9:3b:c8:f5:ac: 11:7d:43:f2:66:cc:56:5d:e0:43:68:da:70:db:39: 2a:9c:86:a3:40:89:57:cd:56:0a:48:16:91:e1:34: 83:43:d2:fe:6d:83:43:48:2c:84:45:d4:85:c8:97: 90:d9:43:cb:fe:3c:6e:4b:de:23:21:b1:a2:58:4d: 3b:5f:bc:2e:4a:80:36:04:1d:0d:2a:d5:2f:89:94: ff:8f:23:73:38:67:ee:d9:33:5c:1e:48:dc:eb:1e: 8d:40:c2:5a:9f:12:8e:e5:56:43:7e:77:d0:53:25: ac:85:06:fd:f4:87:a5:a6:3b:12:b4:f7:3f:fd:4d: 38:cc:c7:c4:a0:91:6f:86:8b:01:21:72:b0:b6:13: 7b:17:b5:84:ec:a4:61:20:b4:c1:c1:7d:a2:fb:87: 76:76:85:40:db:93:99:1e:57:19:23:52:f9:2b:7f: 75:23:3c:ea:78:97:6b:33:83:6b:73:43:27:02:c4: 58:fa:c6:49:56:65:22:f2:ef:65:1e:cc:42:8c:c8: 6d:dc:3a:49:d4:90:0b:1a:18:fb:85:30:cf:b3:18: d7:78:60:14:64:86:ea:f6:b4:3f:7e:13:74:53:15: e4:3b:fc:10:7d:65:6c:ab:56:4e:dd:77:e0:2f:8b: 44:e4:e9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE X509v3 Certificate Policies: Policy: 2.16.840.1.113733.1.7.1.1 CPS: http://trust.web.de/Hilfe/Policy/ Netscape Comment: TrustCenter von WEB.DE - Root-Zertifikat Die Nutzung dieses Zertifikates wird von den Allgemeinen Geschäftsbedingungen (AGB) / Zertifizierungsrichtlinien des WEB.DE TrustCenters geregelt. Die AGBs und Zertifizierungsrichtlinien sind unter http://trust.web.de/Hilfe/ einsehbar. Netscape CA Policy Url: /Hilfe/AGB/ Netscape Renewal Url: /rn/?s= Netscape Revocation Url: /rv/?s= Netscape Base Url: https://trust.web.de Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Netscape CA Revocation Url: https://trust.web.de/rvCA/?s= Signature Algorithm: md5WithRSAEncryption 2d:3d:17:6d:14:09:03:ea:4c:ad:45:13:e2:d9:b5:9c:29:cf: 92:6d:fe:8b:3e:80:bf:6b:5f:dc:17:0e:34:9a:cd:54:38:10: 18:33:78:1c:bd:e2:44:c7:cb:66:fc:d2:ba:f2:74:e8:15:e5: de:88:2a:02:44:94:27:17:c1:77:b7:d8:46:2f:ab:86:08:ca: c6:e2:59:c1:43:52:d3:a6:b4:78:69:68:d7:6a:25:1b:80:ce: cf:65:6b:34:50:e6:47:31:08:46:fe:83:82:79:c8:8f:b7:23: a3:d3:0f:79:f1:62:fd:12:60:44:74:18:3f:7d:dd:c8:ff:5d: c9:c2:8a:b0:0d:10:ef:10:08:e8:9b:c1:76:e3:9a:78:0c:7f: 2e:b1:84:d8:99:1c:3e:4d:ba:a0:39:29:3c:31:4e:87:91:68: 43:a2:df:7f:01:6f:e7:4f:3a:20:86:ba:b8:ae:97:f5:03:dd: c2:dc:f2:6a:90:69:d1:85:de:07:f4:be:a3:68:20:c0:0e:27: f3:c1:ed:f9:4f:da:05:bb:02:12:8c:ba:b5:b7:68:b0:ba:a6: 2c:3d:92:90:4e:2b:14:d2:4d:04:f2:dc:c3:7e:e8:21:32:ca: a2:0a:59:9c:81:18:59:ac:f4:4d:c6:af:be:4f:74:ca:d6:82: 3f:9b:d7:99:26:90:4a:39:9e:51:00:a0:2b:f7:17:27:07:e9: d5:04:54:86:41:b8:51:4f:94:0a:fb:26:9e:19:86:9f:04:0b: ae:7a:54:81:07:a1:c3:53:3f:28:fd:9b:46:bf:5a:90:15:48: 69:b8:9c:fb:28:ca:39:42:6e:6a:9d:6e:84:ea:2c:69:08:ec: 4e:18:2a:f6:ea:98:21:86:46:4b:d6:23:37:9d:24:46:3c:67: 75:b3:6e:25:5b:a1:32:02:52:0c:23:c4:fb:be:1f:78:27:32: 49:f8:e1:57:11:95:25:59:c9:50:34:19:a2:a5:56:fc:da:87: 69:1d:3b:c0:00:7a:0f:56:fe:8a:76:9a:2b:2c:f9:f0:dc:37: 0f:ac:b3:07:1a:6d:b5:90:d3:82:e5:a7:fa:bc:b9:78:de:94: 9b:51:33:db:61:6c:eb:95:28:7a:cc:cb:93:78:47:15:49:c8: 9b:37:5d:e5:0b:45:27:8d:09:1b:1b:a2:66:80:a9:66:1c:89: 36:90:2f:19:4c:14:32:c6:dd:ad:8f:a2:12:a8:ac:28:65:45: d3:ba:d0:0f:61:f4:54:c0:41:29:fa:99:af:80:62:96:46:13: 9a:79:dc:88:13:7b:3a:13:a0:d9:50:e7:c9:43:47:c6:22:2b: dd:d4:f5:da:8b:e2:65:4f mutt-1.5.21/contrib/smime_keys_test.pl0000644000175000017500000000662010770271152014721 00000000000000#! /usr/bin/perl -W # by Mike Schiraldi use strict; use Expect; sub run ($;$ ); umask 077; # probably not necc. but can't hurt my $tmpdir = "/tmp/smime_keys_test-$$-" . time; mkdir $tmpdir or die; chdir $tmpdir or die; open TMP, '>muttrc' or die; print TMP <demoCA/serial' or die; print OUT "01\n"; close OUT; open OUT, '>demoCA/index.txt' or die; close OUT; # make the CA run 'openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 7300 -nodes', "\n\nx\n\nx\nx\n\n"; # trust it run 'smime_keys add_root demoCA/cacert.pem', "root_CA\n"; # have the CA process the request run 'openssl ca -batch -startdate 000101000000Z -enddate 200101000000Z -days 7300 ' . '-policy policy_anything -out newcert.pem -infiles newreq.pem'; unlink 'newreq.pem' or die; # put it all in a .p12 bundle run 'openssl pkcs12 -export -inkey user.key -in newcert.pem -out cert.p12 -CAfile demoCA/cacert.pem -chain', "pass1\n" x 2; unlink 'newcert.pem' or die; unlink 'demoCA/cacert.pem' or die; unlink 'demoCA/index.txt' or die; unlink 'demoCA/index.txt.old' or die; unlink 'demoCA/serial' or die; unlink 'demoCA/serial.old' or die; unlink 'demoCA/newcerts/01.pem' or die; unlink 'demoCA/private/cakey.pem' or die; rmdir 'demoCA/certs' or die; rmdir 'demoCA/crl' or die; rmdir 'demoCA/private' or die; rmdir 'demoCA/newcerts' or die; rmdir 'demoCA' or die; # have smime_keys process it run 'smime_keys add_p12 cert.p12', "pass1\n" . "pass2\n" x 2 . "old_label\n"; unlink 'cert.p12' or die; # make sure it showed up run 'smime_keys list > list'; open IN, 'list' or die; eq "\n" or die; =~ /^(.*)\: Issued for\: user\@smime\.mutt \"old_label\" \(Unverified\)\n/ or die; close IN; my $keyid = $1; # see if we can rename it run "smime_keys label $keyid", "new_label\n"; # make sure it worked run 'smime_keys list > list'; open IN, 'list' or die; eq "\n" or die; =~ /^$keyid\: Issued for\: user\@smime\.mutt \"new_label\" \(Unverified\)\n/ or die; close IN; unlink 'list' or die; # try signing something run "openssl smime -sign -signer certificates/$keyid -inkey user.key -in /etc/passwd -certfile certificates/37adefc3.0 > signed"; unlink 'user.key' or die; # verify it run 'openssl smime -verify -out /dev/null -in signed -CAfile ca-bundle.crt'; unlink 'signed' or die; # clean up unlink 'ca-bundle.crt' or die; unlink 'muttrc' or die; unlink 'keys/.index' or die; unlink 'certificates/.index' or die; unlink or die; unlink or die; rmdir 'keys' or die; rmdir 'certificates' or die; chdir '/' or die; rmdir $tmpdir or die; sub run ($;$) { my $cmd = shift or die; my $input = shift; print "\n\nRunning [$cmd]\n"; my $exp = Expect->spawn ($cmd); if (defined $input) { print $exp $input; } $exp->soft_close; $? and die "$cmd returned $?"; } mutt-1.5.21/contrib/mutt_xtitle0000755000175000017500000000046710770271152013473 00000000000000#!/bin/sh # Demonstration of format string pipes. Sets the xterm title and returns the # string unchanged. # # Example usage: # set status_format="mutt_xtitle '%r %f (%L) [Msgs:%?M?%M/?%m%?n? New:%n?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?]'|" printf "\033]0;$1\007" > /dev/tty echo "$1" mutt-1.5.21/imap/0000755000175000017500000000000011444177014010523 500000000000000mutt-1.5.21/imap/README0000644000175000017500000000302310770271152011320 00000000000000IMAP in mutt should be considered beta quality. For the most part it works well, but it is still not quite as stable or as full-featured as some of the other drivers. I believe it is now acceptable for daily use (and that's how I use it now, currently against Cyrus 1.6.24 and previously against UW-IMAP 4.7 and 2000). You may still lose some work if you are suddenly disconnected from your server (but your mailboxes should be fine). Currently accessing the same IMAP folder with multiple clients is not supported - it may work, but no guarantees. There are still several non-critical known bugs, see http://bugs.guug.de/ for the current list. You may also be disappointed in mutt's handling of very large IMAP mailboxes. To build the message index mutt must fetch a subset of headers from every message in the mailbox, which costs time and network traffic linear to the number of messages in your mailbox. Nevertheless in general mutt is quite a fast and fully-featured IMAP client. It tries to be polite to IMAP servers as well, opening few connections and avoiding needless polls of the server, unlike certain other popular IMAP clients by certain large corporations :) Mutt supports almost all official authentication and security protocols for IMAP, including SSL/TLS, native CRAM-MD5 and GSSAPI routines, and a SASL plugin which can handle just about everything else. Please report bugs to mutt-dev@mutt.org and/or brendan@kublai.com. Version, options, stack-trace and .muttdebug files are a plus. Brendan Cully 20010506 mutt-1.5.21/imap/auth.h0000644000175000017500000000360210770271152011555 00000000000000/* * Copyright (C) 2000-1 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* common defs for authenticators. A good place to set up a generic callback * system */ #ifndef _IMAP_AUTH_H #define _IMAP_AUTH_H 1 typedef enum { IMAP_AUTH_SUCCESS = 0, IMAP_AUTH_FAILURE, IMAP_AUTH_UNAVAIL } imap_auth_res_t; typedef struct { /* do authentication, using named method or any available if method is NULL */ imap_auth_res_t (*authenticate) (IMAP_DATA* idata, const char* method); /* name of authentication method supported, NULL means variable. If this * is not null, authenticate may ignore the second parameter. */ const char* method; } imap_auth_t; /* external authenticator prototypes */ #ifndef USE_SASL imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method); imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method); #endif imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method); #ifdef USE_GSS imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method); #endif #ifdef USE_SASL imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method); #endif #endif /* _IMAP_AUTH_H */ mutt-1.5.21/imap/imap_private.h0000644000175000017500000002101311245033304013261 00000000000000/* * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2008 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _IMAP_PRIVATE_H #define _IMAP_PRIVATE_H 1 #include "imap.h" #include "mutt_curses.h" #include "mutt_socket.h" #include "bcache.h" #ifdef USE_HCACHE #include "hcache.h" #endif /* -- symbols -- */ #define IMAP_PORT 143 #define IMAP_SSL_PORT 993 /* logging levels */ #define IMAP_LOG_CMD 2 #define IMAP_LOG_LTRL 4 #define IMAP_LOG_PASS 5 /* IMAP command responses. Used in IMAP_COMMAND.state too */ /* OK ... */ #define IMAP_CMD_OK (0) /* BAD ... */ #define IMAP_CMD_BAD (-1) /* NO ... */ #define IMAP_CMD_NO (-2) /* * ... */ #define IMAP_CMD_CONTINUE (1) /* + */ #define IMAP_CMD_RESPOND (2) /* IMAP_COMMAND.state additions */ #define IMAP_CMD_NEW (3) /* number of entries in the hash table */ #define IMAP_CACHE_LEN 10 #define SEQLEN 5 /* maximum length of command lines before they must be split (for * lazy servers) */ #define IMAP_MAX_CMDLEN 1024 #define IMAP_REOPEN_ALLOW (1<<0) #define IMAP_EXPUNGE_EXPECTED (1<<1) #define IMAP_EXPUNGE_PENDING (1<<2) #define IMAP_NEWMAIL_PENDING (1<<3) #define IMAP_FLAGS_PENDING (1<<4) /* imap_exec flags (see imap_exec) */ #define IMAP_CMD_FAIL_OK (1<<0) #define IMAP_CMD_PASS (1<<1) #define IMAP_CMD_QUEUE (1<<2) /* length of "DD-MMM-YYYY HH:MM:SS +ZZzz" (null-terminated) */ #define IMAP_DATELEN 27 enum { IMAP_FATAL = 1, IMAP_BYE }; enum { /* States */ IMAP_DISCONNECTED = 0, IMAP_CONNECTED, IMAP_AUTHENTICATED, IMAP_SELECTED, /* and pseudo-states */ IMAP_IDLE }; enum { /* Namespace types */ IMAP_NS_PERSONAL = 0, IMAP_NS_OTHER, IMAP_NS_SHARED }; /* Capabilities we are interested in */ enum { IMAP4 = 0, IMAP4REV1, STATUS, ACL, /* RFC 2086: IMAP4 ACL extension */ NAMESPACE, /* RFC 2342: IMAP4 Namespace */ ACRAM_MD5, /* RFC 2195: CRAM-MD5 authentication */ AGSSAPI, /* RFC 1731: GSSAPI authentication */ AUTH_ANON, /* AUTH=ANONYMOUS */ STARTTLS, /* RFC 2595: STARTTLS */ LOGINDISABLED, /* LOGINDISABLED */ IDLE, /* RFC 2177: IDLE */ SASL_IR, /* SASL initial response draft */ CAPMAX }; /* imap_conn_find flags */ #define M_IMAP_CONN_NONEW (1<<0) #define M_IMAP_CONN_NOSELECT (1<<1) /* -- data structures -- */ typedef struct { unsigned int uid; char* path; } IMAP_CACHE; typedef struct { char* name; unsigned int messages; unsigned int recent; unsigned int uidnext; unsigned int uidvalidity; unsigned int unseen; } IMAP_STATUS; typedef struct { char* name; char delim; /* if we end up storing a lot of these we could turn this into a bitfield */ unsigned char noselect; unsigned char noinferiors; } IMAP_LIST; /* IMAP command structure */ typedef struct { char seq[SEQLEN+1]; int state; } IMAP_COMMAND; typedef enum { IMAP_CT_NONE = 0, IMAP_CT_LIST, IMAP_CT_STATUS } IMAP_COMMAND_TYPE; typedef struct { /* This data is specific to a CONNECTION to an IMAP server */ CONNECTION *conn; unsigned char state; unsigned char status; /* let me explain capstr: SASL needs the capability string (not bits). * we have 3 options: * 1. rerun CAPABILITY inside SASL function. * 2. build appropriate CAPABILITY string by reverse-engineering from bits. * 3. keep a copy until after authentication. * I've chosen (3) for now. (2) might not be too bad, but it involves * tracking all possible capabilities. bah. (1) I don't like because * it's just no fun to get the same information twice */ char* capstr; unsigned char capabilities[(CAPMAX + 7)/8]; unsigned int seqno; time_t lastread; /* last time we read a command for the server */ char* buf; unsigned int blen; /* if set, the response parser will store results for complicated commands * here. */ IMAP_COMMAND_TYPE cmdtype; void* cmddata; /* command queue */ IMAP_COMMAND* cmds; int cmdslots; int nextcmd; int lastcmd; BUFFER* cmdbuf; /* cache IMAP_STATUS of visited mailboxes */ LIST* mboxcache; /* The following data is all specific to the currently SELECTED mbox */ char delim; CONTEXT *ctx; char *mailbox; unsigned short check_status; unsigned char reopen; unsigned int newMailCount; IMAP_CACHE cache[IMAP_CACHE_LEN]; unsigned int uid_validity; unsigned int uidnext; body_cache_t *bcache; /* all folder flags - system flags AND keywords */ LIST *flags; #ifdef USE_HCACHE header_cache_t *hcache; #endif } IMAP_DATA; /* I wish that were called IMAP_CONTEXT :( */ /* -- macros -- */ #define CTX_DATA ((IMAP_DATA *) ctx->data) /* -- private IMAP functions -- */ /* imap.c */ int imap_create_mailbox (IMAP_DATA* idata, char* mailbox); int imap_rename_mailbox (IMAP_DATA* idata, IMAP_MBOX* mx, const char* newname); IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox, int create); void imap_mboxcache_free (IMAP_DATA* idata); int imap_exec_msgset (IMAP_DATA* idata, const char* pre, const char* post, int flag, int changed, int invert); int imap_open_connection (IMAP_DATA* idata); void imap_close_connection (IMAP_DATA* idata); IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags); int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes, progress_t*); void imap_expunge_mailbox (IMAP_DATA* idata); void imap_logout (IMAP_DATA** idata); int imap_sync_message (IMAP_DATA *idata, HEADER *hdr, BUFFER *cmd, int *err_continue); int imap_has_flag (LIST* flag_list, const char* flag); /* auth.c */ int imap_authenticate (IMAP_DATA* idata); /* command.c */ int imap_cmd_start (IMAP_DATA* idata, const char* cmd); int imap_cmd_step (IMAP_DATA* idata); void imap_cmd_finish (IMAP_DATA* idata); int imap_code (const char* s); const char* imap_cmd_trailer (IMAP_DATA* idata); int imap_exec (IMAP_DATA* idata, const char* cmd, int flags); int imap_cmd_idle (IMAP_DATA* idata); /* message.c */ void imap_add_keywords (char* s, HEADER* keywords, LIST* mailbox_flags, size_t slen); void imap_free_header_data (void** data); int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend); char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s); int imap_cache_del (IMAP_DATA* idata, HEADER* h); int imap_cache_clean (IMAP_DATA* idata); /* util.c */ #ifdef USE_HCACHE header_cache_t* imap_hcache_open (IMAP_DATA* idata, const char* path); void imap_hcache_close (IMAP_DATA* idata); HEADER* imap_hcache_get (IMAP_DATA* idata, unsigned int uid); int imap_hcache_put (IMAP_DATA* idata, HEADER* h); int imap_hcache_del (IMAP_DATA* idata, unsigned int uid); #endif int imap_continue (const char* msg, const char* resp); void imap_error (const char* where, const char* msg); IMAP_DATA* imap_new_idata (void); void imap_free_idata (IMAP_DATA** idata); char* imap_fix_path (IMAP_DATA* idata, const char* mailbox, char* path, size_t plen); void imap_cachepath(IMAP_DATA* idata, const char* mailbox, char* dest, size_t dlen); int imap_get_literal_count (const char* buf, long* bytes); char* imap_get_qualifier (char* buf); int imap_mxcmp (const char* mx1, const char* mx2); char* imap_next_word (char* s); time_t imap_parse_date (char* s); void imap_make_date (char* buf, time_t timestamp); void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path); void imap_quote_string (char* dest, size_t slen, const char* src); void imap_unquote_string (char* s); void imap_munge_mbox_name (char *dest, size_t dlen, const char *src); void imap_unmunge_mbox_name (char *s); int imap_wordcasecmp(const char *a, const char *b); /* utf7.c */ void imap_utf7_encode (char **s); void imap_utf7_decode (char **s); #if USE_HCACHE /* typedef size_t (*hcache_keylen_t)(const char* fn); */ #define imap_hcache_keylen mutt_strlen #endif /* USE_HCACHE */ #endif mutt-1.5.21/imap/message.h0000644000175000017500000000312111130456625012235 00000000000000/* * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2000,2005 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* message.c data structures */ #ifndef MESSAGE_H #define MESSAGE_H 1 /* -- data structures -- */ /* IMAP-specific header data, stored as HEADER->data */ typedef struct imap_header_data { /* server-side flags */ unsigned int read : 1; unsigned int old : 1; unsigned int deleted : 1; unsigned int flagged : 1; unsigned int replied : 1; unsigned int changed : 1; unsigned int parsed : 1; unsigned int uid; /* 32-bit Message UID */ LIST *keywords; } IMAP_HEADER_DATA; typedef struct { unsigned int sid; IMAP_HEADER_DATA* data; time_t received; long content_length; } IMAP_HEADER; /* -- macros -- */ #define HEADER_DATA(ph) ((IMAP_HEADER_DATA*) ((ph)->data)) #endif /* MESSAGE_H */ mutt-1.5.21/imap/Makefile.am0000644000175000017500000000106111121773556012502 00000000000000## Process this file with automake to produce Makefile.in AR=@AR@ AUTOMAKE_OPTIONS = 1.6 foreign if USE_GSS GSSSOURCES = auth_gss.c endif if USE_SASL AUTHENTICATORS = auth_sasl.c else AUTHENTICATORS = auth_anon.c auth_cram.c endif EXTRA_DIST = README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c AM_CPPFLAGS = -I$(top_srcdir) -I../intl noinst_LIBRARIES = libimap.a noinst_HEADERS = auth.h imap_private.h message.h libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h \ message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES) mutt-1.5.21/imap/Makefile.in0000644000175000017500000003716611435242564012530 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = imap DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/curslib.m4 $(top_srcdir)/m4/funcdecl.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpgme.m4 \ $(top_srcdir)/m4/gssapi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/types.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libimap_a_AR = $(AR) $(ARFLAGS) libimap_a_LIBADD = am__libimap_a_SOURCES_DIST = auth.c auth_login.c browse.c command.c \ imap.c imap.h message.c utf7.c util.c auth_anon.c auth_cram.c \ auth_sasl.c auth_gss.c @USE_SASL_FALSE@am__objects_1 = auth_anon.$(OBJEXT) \ @USE_SASL_FALSE@ auth_cram.$(OBJEXT) @USE_SASL_TRUE@am__objects_1 = auth_sasl.$(OBJEXT) @USE_GSS_TRUE@am__objects_2 = auth_gss.$(OBJEXT) am_libimap_a_OBJECTS = auth.$(OBJEXT) auth_login.$(OBJEXT) \ browse.$(OBJEXT) command.$(OBJEXT) imap.$(OBJEXT) \ message.$(OBJEXT) utf7.$(OBJEXT) util.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) libimap_a_OBJECTS = $(am_libimap_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libimap_a_SOURCES) DIST_SOURCES = $(am__libimap_a_SOURCES_DIST) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DBX = @DBX@ DEBUGGER = @DEBUGGER@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOTLOCK_GROUP = @DOTLOCK_GROUP@ DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ DOTLOCK_TARGET = @DOTLOCK_TARGET@ DSLROOT = @DSLROOT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDB = @GDB@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GPGME_CFLAGS = @GPGME_CFLAGS@ GPGME_CONFIG = @GPGME_CONFIG@ GPGME_LIBS = @GPGME_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ ISPELL = @ISPELL@ KRB5CFGPATH = @KRB5CFGPATH@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBIMAP = @LIBIMAP@ LIBIMAPDEPS = @LIBIMAPDEPS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MUTTLIBS = @MUTTLIBS@ MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ MUTT_MD5 = @MUTT_MD5@ OBJEXT = @OBJEXT@ OPS = @OPS@ OSPCAT = @OSPCAT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGPAUX_TARGET = @PGPAUX_TARGET@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDB = @SDB@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ STRIP = @STRIP@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.6 foreign @USE_GSS_TRUE@GSSSOURCES = auth_gss.c @USE_SASL_FALSE@AUTHENTICATORS = auth_anon.c auth_cram.c @USE_SASL_TRUE@AUTHENTICATORS = auth_sasl.c EXTRA_DIST = README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c AM_CPPFLAGS = -I$(top_srcdir) -I../intl noinst_LIBRARIES = libimap.a noinst_HEADERS = auth.h imap_private.h message.h libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h \ message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign imap/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign imap/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libimap.a: $(libimap_a_OBJECTS) $(libimap_a_DEPENDENCIES) -rm -f libimap.a $(libimap_a_AR) libimap.a $(libimap_a_OBJECTS) $(libimap_a_LIBADD) $(RANLIB) libimap.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_anon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_cram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_gss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_login.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_sasl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/browse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mutt-1.5.21/imap/TODO0000644000175000017500000000176610770271235011146 00000000000000IMAP enhancements, by priority: [ -- socket -- ] * Smarter connection code. Mutt should handle dropped connections/routing problems gracefully. It should be able to transparently reconnect. This is facilitated by the next item. * Interruptible socket calls, preferably without having to abort the connection. For example large downloads could be chunked. [ -- browsing -- ] * We should maybe add a new imap_format string for IMAP browsing, without all the stat variables but with tags like how many messages are in the folders, how many subfolders, that weird \Marked tag, etc. [ -- speed -- ] * Partial index loading, using server-side threading and sorting * Partial message loading, including parsing BODYSTRUCTURE for the view-attachments menu * Disconnected mode, probably based on an augmented header cache [ -- new mail detection -- ] * Possibly opening multiple connections for mailbox polling, now that we have IDLE support. Brendan Cully Updated: 20070409 mutt-1.5.21/imap/auth.c0000644000175000017500000000570611160517736011564 00000000000000/* * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2001 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* IMAP login/authentication code */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "auth.h" static imap_auth_t imap_authenticators[] = { #ifdef USE_SASL { imap_auth_sasl, NULL }, #else { imap_auth_anon, "anonymous" }, #endif #ifdef USE_GSS { imap_auth_gss, "gssapi" }, #endif /* SASL includes CRAM-MD5 (and GSSAPI, but that's not enabled by default) */ #ifndef USE_SASL { imap_auth_cram_md5, "cram-md5" }, #endif { imap_auth_login, "login" }, { NULL, NULL } }; /* imap_authenticate: Attempt to authenticate using either user-specified * authentication method if specified, or any. */ int imap_authenticate (IMAP_DATA* idata) { imap_auth_t* authenticator; char* methods; char* method; char* delim; int r = -1; if (ImapAuthenticators && *ImapAuthenticators) { /* Try user-specified list of authentication methods */ methods = safe_strdup (ImapAuthenticators); for (method = methods; method; method = delim) { delim = strchr (method, ':'); if (delim) *delim++ = '\0'; if (! method[0]) continue; dprint (2, (debugfile, "imap_authenticate: Trying method %s\n", method)); authenticator = imap_authenticators; while (authenticator->authenticate) { if (!authenticator->method || !ascii_strcasecmp (authenticator->method, method)) if ((r = authenticator->authenticate (idata, method)) != IMAP_AUTH_UNAVAIL) { FREE (&methods); return r; } authenticator++; } } FREE (&methods); } else { /* Fall back to default: any authenticator */ dprint (2, (debugfile, "imap_authenticate: Using any available method.\n")); authenticator = imap_authenticators; while (authenticator->authenticate) { if ((r = authenticator->authenticate (idata, NULL)) != IMAP_AUTH_UNAVAIL) return r; authenticator++; } } if (r == IMAP_AUTH_UNAVAIL) { mutt_error (_("No authenticators available")); mutt_sleep (1); } return r; } mutt-1.5.21/imap/auth_login.c0000644000175000017500000000421411245033304012731 00000000000000/* * Copyright (C) 1999-2001,2005 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* plain LOGIN support */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "auth.h" /* imap_auth_login: Plain LOGIN support */ imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method) { char q_user[SHORT_STRING], q_pass[SHORT_STRING]; char buf[STRING]; int rc; if (mutt_bit_isset (idata->capabilities, LOGINDISABLED)) { mutt_message _("LOGIN disabled on this server."); return IMAP_AUTH_UNAVAIL; } if (mutt_account_getuser (&idata->conn->account)) return IMAP_AUTH_FAILURE; if (mutt_account_getpass (&idata->conn->account)) return IMAP_AUTH_FAILURE; mutt_message _("Logging in..."); imap_quote_string (q_user, sizeof (q_user), idata->conn->account.user); imap_quote_string (q_pass, sizeof (q_pass), idata->conn->account.pass); #ifdef DEBUG /* don't print the password unless we're at the ungodly debugging level * of 5 or higher */ if (debuglevel < IMAP_LOG_PASS) dprint (2, (debugfile, "Sending LOGIN command for %s...\n", idata->conn->account.user)); #endif snprintf (buf, sizeof (buf), "LOGIN %s %s", q_user, q_pass); rc = imap_exec (idata, buf, IMAP_CMD_FAIL_OK | IMAP_CMD_PASS); if (!rc) return IMAP_AUTH_SUCCESS; mutt_error _("Login failed."); mutt_sleep (2); return IMAP_AUTH_FAILURE; } mutt-1.5.21/imap/browse.c0000644000175000017500000003052111133443030012076 00000000000000/* * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2008 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Mutt browser support routines */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "mutt.h" #include "imap_private.h" /* -- forward declarations -- */ static int browse_add_list_result (IMAP_DATA* idata, const char* cmd, struct browser_state* state, short isparent); static void imap_add_folder (char delim, char *folder, int noselect, int noinferiors, struct browser_state *state, short isparent); static int compare_names(struct folder_file *a, struct folder_file *b); /* imap_browse: IMAP hook into the folder browser, fills out browser_state, * given a current folder to browse */ int imap_browse (char* path, struct browser_state* state) { IMAP_DATA* idata; IMAP_LIST list; char buf[LONG_STRING]; char buf2[LONG_STRING]; char mbox[LONG_STRING]; char list_cmd[5]; int n; int nsup; char ctmp; short showparents = 0; int save_lsub; IMAP_MBOX mx; if (imap_parse_path (path, &mx)) { mutt_error (_("%s is an invalid IMAP path"), path); return -1; } save_lsub = option (OPTIMAPCHECKSUBSCRIBED); unset_option (OPTIMAPCHECKSUBSCRIBED); strfcpy (list_cmd, option (OPTIMAPLSUB) ? "LSUB" : "LIST", sizeof (list_cmd)); if (!(idata = imap_conn_find (&(mx.account), 0))) goto fail; mutt_message _("Getting folder list..."); /* skip check for parents when at the root */ if (mx.mbox && mx.mbox[0] != '\0') { int rc; char *ptr; imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox)); ptr = safe_strdup (mbox); imap_utf7_encode (&ptr); mbox[sizeof (mbox) - 1] = '\0'; strncpy (mbox, ptr, sizeof (mbox) - 1); FREE (&ptr); n = mutt_strlen (mbox); dprint (3, (debugfile, "imap_browse: mbox: %s\n", mbox)); /* if our target exists and has inferiors, enter it if we * aren't already going to */ if (mbox[n-1] != idata->delim) { snprintf (buf, sizeof (buf), "%s \"\" \"%s\"", list_cmd, mbox); imap_cmd_start (idata, buf); idata->cmdtype = IMAP_CT_LIST; idata->cmddata = &list; do { list.name = 0; rc = imap_cmd_step (idata); if (rc == IMAP_CMD_CONTINUE && list.name) { if (!list.noinferiors && list.name[0] && !imap_mxcmp (list.name, mbox) && (n = strlen (mbox)) < sizeof (mbox) - 1) { mbox[n++] = list.delim; mbox[n] = '\0'; } } } while (rc == IMAP_CMD_CONTINUE); idata->cmddata = NULL; } /* if we're descending a folder, mark it as current in browser_state */ if (mbox[n-1] == list.delim) { showparents = 1; imap_qualify_path (buf, sizeof (buf), &mx, mbox); state->folder = safe_strdup (buf); n--; } /* Find superiors to list * Note: UW-IMAP servers return folder + delimiter when asked to list * folder + delimiter. Cyrus servers don't. So we ask for folder, * and tack on delimiter ourselves. * Further note: UW-IMAP servers return nothing when asked for * NAMESPACES without delimiters at the end. Argh! */ for (n--; n >= 0 && mbox[n] != list.delim ; n--); if (n > 0) /* "aaaa/bbbb/" -> "aaaa" */ { /* forget the check, it is too delicate (see above). Have we ever * had the parent not exist? */ ctmp = mbox[n]; mbox[n] = '\0'; if (showparents) { dprint (3, (debugfile, "imap_init_browse: adding parent %s\n", mbox)); imap_add_folder (list.delim, mbox, 1, 0, state, 1); } /* if our target isn't a folder, we are in our superior */ if (!state->folder) { /* store folder with delimiter */ mbox[n++] = ctmp; ctmp = mbox[n]; mbox[n] = '\0'; imap_qualify_path (buf, sizeof (buf), &mx, mbox); state->folder = safe_strdup (buf); } mbox[n] = ctmp; } /* "/bbbb/" -> add "/", "aaaa/" -> add "" */ else { char relpath[2]; /* folder may be "/" */ snprintf (relpath, sizeof (relpath), "%c" , n < 0 ? '\0' : idata->delim); if (showparents) imap_add_folder (idata->delim, relpath, 1, 0, state, 1); if (!state->folder) { imap_qualify_path (buf, sizeof (buf), &mx, relpath); state->folder = safe_strdup (buf); } } } else mbox[0] = '\0'; /* no namespace, no folder: set folder to host only */ if (!state->folder) { imap_qualify_path (buf, sizeof (buf), &mx, NULL); state->folder = safe_strdup (buf); } nsup = state->entrylen; dprint (3, (debugfile, "imap_browse: Quoting mailbox scan: %s -> ", mbox)); snprintf (buf, sizeof (buf), "%s%%", mbox); imap_quote_string (buf2, sizeof (buf2), buf); dprint (3, (debugfile, "%s\n", buf2)); snprintf (buf, sizeof (buf), "%s \"\" %s", list_cmd, buf2); if (browse_add_list_result (idata, buf, state, 0)) goto fail; if (!state->entrylen) { mutt_error _("No such folder"); goto fail; } mutt_clear_error (); qsort(&(state->entry[nsup]),state->entrylen-nsup,sizeof(state->entry[0]), (int (*)(const void*,const void*)) compare_names); if (save_lsub) set_option (OPTIMAPCHECKSUBSCRIBED); FREE (&mx.mbox); return 0; fail: if (save_lsub) set_option (OPTIMAPCHECKSUBSCRIBED); FREE (&mx.mbox); return -1; } int imap_mailbox_state (const char* path, struct mailbox_state* state) { IMAP_DATA* idata; IMAP_MBOX mx; IMAP_STATUS* status; memset (state, 0, sizeof (*state)); if (imap_parse_path (path, &mx) < 0) { dprint (1, (debugfile, "imap_mailbox_state: bad path %s\n", path)); return -1; } if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) { dprint (2, (debugfile, "imap_mailbox_state: no open connection for %s\n", path)); FREE (&mx.mbox); return -1; } if (idata->ctx && !imap_mxcmp(mx.mbox, idata->mailbox)) { state->new = idata->ctx->new; state->messages = idata->ctx->msgcount; } else if ((status = imap_mboxcache_get (idata, mx.mbox, 0))) { state->new = status->unseen; state->messages = status->messages; } FREE (&mx.mbox); return 0; } /* imap_mailbox_create: Prompt for a new mailbox name, and try to create it */ int imap_mailbox_create (const char* folder) { IMAP_DATA* idata; IMAP_MBOX mx; char buf[LONG_STRING]; short n; if (imap_parse_path (folder, &mx) < 0) { dprint (1, (debugfile, "imap_mailbox_create: Bad starting path %s\n", folder)); return -1; } if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) { dprint (1, (debugfile, "imap_mailbox_create: Couldn't find open connection to %s", mx.account.host)); goto fail; } strfcpy (buf, NONULL (mx.mbox), sizeof (buf)); /* append a delimiter if necessary */ n = mutt_strlen (buf); if (n && (n < sizeof (buf) - 1) && (buf[n-1] != idata->delim)) { buf[n++] = idata->delim; buf[n] = '\0'; } if (mutt_get_field (_("Create mailbox: "), buf, sizeof (buf), M_FILE) < 0) goto fail; if (!mutt_strlen (buf)) { mutt_error (_("Mailbox must have a name.")); mutt_sleep(1); goto fail; } if (imap_create_mailbox (idata, buf) < 0) goto fail; mutt_message _("Mailbox created."); mutt_sleep (0); FREE (&mx.mbox); return 0; fail: FREE (&mx.mbox); return -1; } int imap_mailbox_rename(const char* mailbox) { IMAP_DATA* idata; IMAP_MBOX mx; char buf[LONG_STRING]; char newname[SHORT_STRING]; if (imap_parse_path (mailbox, &mx) < 0) { dprint (1, (debugfile, "imap_mailbox_rename: Bad source mailbox %s\n", mailbox)); return -1; } if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) { dprint (1, (debugfile, "imap_mailbox_rename: Couldn't find open connection to %s", mx.account.host)); goto fail; } snprintf(buf, sizeof (buf), _("Rename mailbox %s to: "), mx.mbox); if (mutt_get_field (buf, newname, sizeof (newname), M_FILE) < 0) goto fail; if (!mutt_strlen (newname)) { mutt_error (_("Mailbox must have a name.")); mutt_sleep (1); goto fail; } imap_fix_path (idata, newname, buf, sizeof (buf)); if (imap_rename_mailbox (idata, &mx, buf) < 0) { mutt_error (_("Rename failed: %s"), imap_get_qualifier (idata->buf)); mutt_sleep (1); goto fail; } mutt_message (_("Mailbox renamed.")); mutt_sleep (0); FREE (&mx.mbox); return 0; fail: FREE (&mx.mbox); return -1; } static int browse_add_list_result (IMAP_DATA* idata, const char* cmd, struct browser_state* state, short isparent) { IMAP_LIST list; IMAP_MBOX mx; int rc; if (imap_parse_path (state->folder, &mx)) { dprint (2, (debugfile, "browse_add_list_result: current folder %s makes no sense\n", state->folder)); return -1; } imap_cmd_start (idata, cmd); idata->cmdtype = IMAP_CT_LIST; idata->cmddata = &list; do { list.name = NULL; rc = imap_cmd_step (idata); if (rc == IMAP_CMD_CONTINUE && list.name) { /* Let a parent folder never be selectable for navigation */ if (isparent) list.noselect = 1; /* prune current folder from output */ if (isparent || mutt_strncmp (list.name, mx.mbox, strlen (list.name))) imap_add_folder (list.delim, list.name, list.noselect, list.noinferiors, state, isparent); } } while (rc == IMAP_CMD_CONTINUE); idata->cmddata = NULL; FREE (&mx.mbox); return rc == IMAP_CMD_OK ? 0 : -1; } /* imap_add_folder: add a folder name to the browser list, formatting it as * necessary. */ static void imap_add_folder (char delim, char *folder, int noselect, int noinferiors, struct browser_state *state, short isparent) { char tmp[LONG_STRING]; char relpath[LONG_STRING]; IMAP_MBOX mx; if (imap_parse_path (state->folder, &mx)) return; imap_unmunge_mbox_name (folder); if (state->entrylen + 1 == state->entrymax) { safe_realloc (&state->entry, sizeof (struct folder_file) * (state->entrymax += 256)); memset (state->entry + state->entrylen, 0, (sizeof (struct folder_file) * (state->entrymax - state->entrylen))); } /* render superiors as unix-standard ".." */ if (isparent) strfcpy (relpath, "../", sizeof (relpath)); /* strip current folder from target, to render a relative path */ else if (!mutt_strncmp (mx.mbox, folder, mutt_strlen (mx.mbox))) strfcpy (relpath, folder + mutt_strlen (mx.mbox), sizeof (relpath)); else strfcpy (relpath, folder, sizeof (relpath)); /* apply filemask filter. This should really be done at menu setup rather * than at scan, since it's so expensive to scan. But that's big changes * to browser.c */ if (!((regexec (Mask.rx, relpath, 0, NULL, 0) == 0) ^ Mask.not)) { FREE (&mx.mbox); return; } imap_qualify_path (tmp, sizeof (tmp), &mx, folder); (state->entry)[state->entrylen].name = safe_strdup (tmp); /* mark desc with delim in browser if it can have subfolders */ if (!isparent && !noinferiors && strlen (relpath) < sizeof (relpath) - 1) { relpath[strlen (relpath) + 1] = '\0'; relpath[strlen (relpath)] = delim; } (state->entry)[state->entrylen].desc = safe_strdup (relpath); (state->entry)[state->entrylen].imap = 1; /* delimiter at the root is useless. */ if (folder[0] == '\0') delim = '\0'; (state->entry)[state->entrylen].delim = delim; (state->entry)[state->entrylen].selectable = !noselect; (state->entry)[state->entrylen].inferiors = !noinferiors; (state->entrylen)++; FREE (&mx.mbox); } static int compare_names(struct folder_file *a, struct folder_file *b) { return mutt_strcmp(a->name, b->name); } mutt-1.5.21/imap/command.c0000644000175000017500000006410411444164263012234 00000000000000/* * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2009 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* command.c: routines for sending commands to an IMAP server and parsing * responses */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "message.h" #include "mx.h" #include "buffy.h" #include #include #define IMAP_CMD_BUFSIZE 512 /* forward declarations */ static int cmd_start (IMAP_DATA* idata, const char* cmdstr, int flags); static int cmd_queue_full (IMAP_DATA* idata); static int cmd_queue (IMAP_DATA* idata, const char* cmdstr); static IMAP_COMMAND* cmd_new (IMAP_DATA* idata); static int cmd_status (const char *s); static void cmd_handle_fatal (IMAP_DATA* idata); static int cmd_handle_untagged (IMAP_DATA* idata); static void cmd_parse_capability (IMAP_DATA* idata, char* s); static void cmd_parse_expunge (IMAP_DATA* idata, const char* s); static void cmd_parse_list (IMAP_DATA* idata, char* s); static void cmd_parse_lsub (IMAP_DATA* idata, char* s); static void cmd_parse_fetch (IMAP_DATA* idata, char* s); static void cmd_parse_myrights (IMAP_DATA* idata, const char* s); static void cmd_parse_search (IMAP_DATA* idata, const char* s); static void cmd_parse_status (IMAP_DATA* idata, char* s); static char *Capabilities[] = { "IMAP4", "IMAP4rev1", "STATUS", "ACL", "NAMESPACE", "AUTH=CRAM-MD5", "AUTH=GSSAPI", "AUTH=ANONYMOUS", "STARTTLS", "LOGINDISABLED", "IDLE", "SASL-IR", NULL }; /* imap_cmd_start: Given an IMAP command, send it to the server. * If cmdstr is NULL, sends queued commands. */ int imap_cmd_start (IMAP_DATA* idata, const char* cmdstr) { return cmd_start (idata, cmdstr, 0); } /* imap_cmd_step: Reads server responses from an IMAP command, detects * tagged completion response, handles untagged messages, can read * arbitrarily large strings (using malloc, so don't make it _too_ * large!). */ int imap_cmd_step (IMAP_DATA* idata) { size_t len = 0; int c; int rc; int stillrunning = 0; IMAP_COMMAND* cmd; if (idata->status == IMAP_FATAL) { cmd_handle_fatal (idata); return IMAP_CMD_BAD; } /* read into buffer, expanding buffer as necessary until we have a full * line */ do { if (len == idata->blen) { safe_realloc (&idata->buf, idata->blen + IMAP_CMD_BUFSIZE); idata->blen = idata->blen + IMAP_CMD_BUFSIZE; dprint (3, (debugfile, "imap_cmd_step: grew buffer to %u bytes\n", idata->blen)); } /* back up over '\0' */ if (len) len--; c = mutt_socket_readln (idata->buf + len, idata->blen - len, idata->conn); if (c <= 0) { dprint (1, (debugfile, "imap_cmd_step: Error reading server response.\n")); cmd_handle_fatal (idata); return IMAP_CMD_BAD; } len += c; } /* if we've read all the way to the end of the buffer, we haven't read a * full line (mutt_socket_readln strips the \r, so we always have at least * one character free when we've read a full line) */ while (len == idata->blen); /* don't let one large string make cmd->buf hog memory forever */ if ((idata->blen > IMAP_CMD_BUFSIZE) && (len <= IMAP_CMD_BUFSIZE)) { safe_realloc (&idata->buf, IMAP_CMD_BUFSIZE); idata->blen = IMAP_CMD_BUFSIZE; dprint (3, (debugfile, "imap_cmd_step: shrank buffer to %u bytes\n", idata->blen)); } idata->lastread = time (NULL); /* handle untagged messages. The caller still gets its shot afterwards. */ if ((!ascii_strncmp (idata->buf, "* ", 2) || !ascii_strncmp (imap_next_word (idata->buf), "OK [", 4)) && cmd_handle_untagged (idata)) return IMAP_CMD_BAD; /* server demands a continuation response from us */ if (idata->buf[0] == '+') return IMAP_CMD_RESPOND; /* look for tagged command completions */ rc = IMAP_CMD_CONTINUE; c = idata->lastcmd; do { cmd = &idata->cmds[c]; if (cmd->state == IMAP_CMD_NEW) { if (!ascii_strncmp (idata->buf, cmd->seq, SEQLEN)) { if (!stillrunning) { /* first command in queue has finished - move queue pointer up */ idata->lastcmd = (idata->lastcmd + 1) % idata->cmdslots; } cmd->state = cmd_status (idata->buf); /* bogus - we don't know which command result to return here. Caller * should provide a tag. */ rc = cmd->state; } else stillrunning++; } c = (c + 1) % idata->cmdslots; } while (c != idata->nextcmd); if (stillrunning) rc = IMAP_CMD_CONTINUE; else { dprint (3, (debugfile, "IMAP queue drained\n")); imap_cmd_finish (idata); } return rc; } /* imap_code: returns 1 if the command result was OK, or 0 if NO or BAD */ int imap_code (const char *s) { return cmd_status (s) == IMAP_CMD_OK; } /* imap_cmd_trailer: extra information after tagged command response if any */ const char* imap_cmd_trailer (IMAP_DATA* idata) { static const char* notrailer = ""; const char* s = idata->buf; if (!s) { dprint (2, (debugfile, "imap_cmd_trailer: not a tagged response")); return notrailer; } s = imap_next_word ((char *)s); if (!s || (ascii_strncasecmp (s, "OK", 2) && ascii_strncasecmp (s, "NO", 2) && ascii_strncasecmp (s, "BAD", 3))) { dprint (2, (debugfile, "imap_cmd_trailer: not a command completion: %s", idata->buf)); return notrailer; } s = imap_next_word ((char *)s); if (!s) return notrailer; return s; } /* imap_exec: execute a command, and wait for the response from the server. * Also, handle untagged responses. * Flags: * IMAP_CMD_FAIL_OK: the calling procedure can handle failure. This is used * for checking for a mailbox on append and login * IMAP_CMD_PASS: command contains a password. Suppress logging. * IMAP_CMD_QUEUE: only queue command, do not execute. * Return 0 on success, -1 on Failure, -2 on OK Failure */ int imap_exec (IMAP_DATA* idata, const char* cmdstr, int flags) { int rc; if ((rc = cmd_start (idata, cmdstr, flags)) < 0) { cmd_handle_fatal (idata); return -1; } if (flags & IMAP_CMD_QUEUE) return 0; do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc == IMAP_CMD_NO && (flags & IMAP_CMD_FAIL_OK)) return -2; if (rc != IMAP_CMD_OK) { if (flags & IMAP_CMD_FAIL_OK && idata->status != IMAP_FATAL) return -2; dprint (1, (debugfile, "imap_exec: command failed: %s\n", idata->buf)); return -1; } return 0; } /* imap_cmd_finish: Attempts to perform cleanup (eg fetch new mail if * detected, do expunge). Called automatically by imap_cmd_step, but * may be called at any time. Called by imap_check_mailbox just before * the index is refreshed, for instance. */ void imap_cmd_finish (IMAP_DATA* idata) { if (idata->status == IMAP_FATAL) { cmd_handle_fatal (idata); return; } if (!(idata->state >= IMAP_SELECTED) || idata->ctx->closing) return; if (idata->reopen & IMAP_REOPEN_ALLOW) { int count = idata->newMailCount; if (!(idata->reopen & IMAP_EXPUNGE_PENDING) && (idata->reopen & IMAP_NEWMAIL_PENDING) && count > idata->ctx->msgcount) { /* read new mail messages */ dprint (2, (debugfile, "imap_cmd_finish: Fetching new mail\n")); /* check_status: curs_main uses imap_check_mailbox to detect * whether the index needs updating */ idata->check_status = IMAP_NEWMAIL_PENDING; imap_read_headers (idata, idata->ctx->msgcount, count-1); } else if (idata->reopen & IMAP_EXPUNGE_PENDING) { dprint (2, (debugfile, "imap_cmd_finish: Expunging mailbox\n")); imap_expunge_mailbox (idata); /* Detect whether we've gotten unexpected EXPUNGE messages */ if (idata->reopen & IMAP_EXPUNGE_PENDING && !(idata->reopen & IMAP_EXPUNGE_EXPECTED)) idata->check_status = IMAP_EXPUNGE_PENDING; idata->reopen &= ~(IMAP_EXPUNGE_PENDING | IMAP_NEWMAIL_PENDING | IMAP_EXPUNGE_EXPECTED); } } idata->status = 0; } /* imap_cmd_idle: Enter the IDLE state. */ int imap_cmd_idle (IMAP_DATA* idata) { int rc; imap_cmd_start (idata, "IDLE"); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc == IMAP_CMD_RESPOND) { /* successfully entered IDLE state */ idata->state = IMAP_IDLE; /* queue automatic exit when next command is issued */ mutt_buffer_printf (idata->cmdbuf, "DONE\r\n"); rc = IMAP_CMD_OK; } if (rc != IMAP_CMD_OK) { dprint (1, (debugfile, "imap_cmd_idle: error starting IDLE\n")); return -1; } return 0; } static int cmd_queue_full (IMAP_DATA* idata) { if ((idata->nextcmd + 1) % idata->cmdslots == idata->lastcmd) return 1; return 0; } /* sets up a new command control block and adds it to the queue. * Returns NULL if the pipeline is full. */ static IMAP_COMMAND* cmd_new (IMAP_DATA* idata) { IMAP_COMMAND* cmd; if (cmd_queue_full (idata)) { dprint (3, (debugfile, "cmd_new: IMAP command queue full\n")); return NULL; } cmd = idata->cmds + idata->nextcmd; idata->nextcmd = (idata->nextcmd + 1) % idata->cmdslots; snprintf (cmd->seq, sizeof (cmd->seq), "a%04u", idata->seqno++); if (idata->seqno > 9999) idata->seqno = 0; cmd->state = IMAP_CMD_NEW; return cmd; } /* queues command. If the queue is full, attempts to drain it. */ static int cmd_queue (IMAP_DATA* idata, const char* cmdstr) { IMAP_COMMAND* cmd; int rc; if (cmd_queue_full (idata)) { dprint (3, (debugfile, "Draining IMAP command pipeline\n")); rc = imap_exec (idata, NULL, IMAP_CMD_FAIL_OK); if (rc < 0 && rc != -2) return rc; } if (!(cmd = cmd_new (idata))) return IMAP_CMD_BAD; if (mutt_buffer_printf (idata->cmdbuf, "%s %s\r\n", cmd->seq, cmdstr) < 0) return IMAP_CMD_BAD; return 0; } static int cmd_start (IMAP_DATA* idata, const char* cmdstr, int flags) { int rc; if (idata->status == IMAP_FATAL) { cmd_handle_fatal (idata); return -1; } if (cmdstr && ((rc = cmd_queue (idata, cmdstr)) < 0)) return rc; if (flags & IMAP_CMD_QUEUE) return 0; if (idata->cmdbuf->dptr == idata->cmdbuf->data) return IMAP_CMD_BAD; rc = mutt_socket_write_d (idata->conn, idata->cmdbuf->data, -1, flags & IMAP_CMD_PASS ? IMAP_LOG_PASS : IMAP_LOG_CMD); idata->cmdbuf->dptr = idata->cmdbuf->data; /* unidle when command queue is flushed */ if (idata->state == IMAP_IDLE) idata->state = IMAP_SELECTED; return (rc < 0) ? IMAP_CMD_BAD : 0; } /* parse response line for tagged OK/NO/BAD */ static int cmd_status (const char *s) { s = imap_next_word((char*)s); if (!ascii_strncasecmp("OK", s, 2)) return IMAP_CMD_OK; if (!ascii_strncasecmp("NO", s, 2)) return IMAP_CMD_NO; return IMAP_CMD_BAD; } /* cmd_handle_fatal: when IMAP_DATA is in fatal state, do what we can */ static void cmd_handle_fatal (IMAP_DATA* idata) { idata->status = IMAP_FATAL; if ((idata->state >= IMAP_SELECTED) && (idata->reopen & IMAP_REOPEN_ALLOW)) { mx_fastclose_mailbox (idata->ctx); mutt_error (_("Mailbox closed")); mutt_sleep (1); idata->state = IMAP_DISCONNECTED; } if (idata->state < IMAP_SELECTED) imap_close_connection (idata); } /* cmd_handle_untagged: fallback parser for otherwise unhandled messages. */ static int cmd_handle_untagged (IMAP_DATA* idata) { char* s; char* pn; int count; s = imap_next_word (idata->buf); pn = imap_next_word (s); if ((idata->state >= IMAP_SELECTED) && isdigit ((unsigned char) *s)) { pn = s; s = imap_next_word (s); /* EXISTS and EXPUNGE are always related to the SELECTED mailbox for the * connection, so update that one. */ if (ascii_strncasecmp ("EXISTS", s, 6) == 0) { dprint (2, (debugfile, "Handling EXISTS\n")); /* new mail arrived */ count = atoi (pn); if ( !(idata->reopen & IMAP_EXPUNGE_PENDING) && count < idata->ctx->msgcount) { /* Notes 6.0.3 has a tendency to report fewer messages exist than * it should. */ dprint (1, (debugfile, "Message count is out of sync")); return 0; } /* at least the InterChange server sends EXISTS messages freely, * even when there is no new mail */ else if (count == idata->ctx->msgcount) dprint (3, (debugfile, "cmd_handle_untagged: superfluous EXISTS message.\n")); else { if (!(idata->reopen & IMAP_EXPUNGE_PENDING)) { dprint (2, (debugfile, "cmd_handle_untagged: New mail in %s - %d messages total.\n", idata->mailbox, count)); idata->reopen |= IMAP_NEWMAIL_PENDING; } idata->newMailCount = count; } } /* pn vs. s: need initial seqno */ else if (ascii_strncasecmp ("EXPUNGE", s, 7) == 0) cmd_parse_expunge (idata, pn); else if (ascii_strncasecmp ("FETCH", s, 5) == 0) cmd_parse_fetch (idata, pn); } else if (ascii_strncasecmp ("CAPABILITY", s, 10) == 0) cmd_parse_capability (idata, s); else if (!ascii_strncasecmp ("OK [CAPABILITY", s, 14)) cmd_parse_capability (idata, pn); else if (!ascii_strncasecmp ("OK [CAPABILITY", pn, 14)) cmd_parse_capability (idata, imap_next_word (pn)); else if (ascii_strncasecmp ("LIST", s, 4) == 0) cmd_parse_list (idata, s); else if (ascii_strncasecmp ("LSUB", s, 4) == 0) cmd_parse_lsub (idata, s); else if (ascii_strncasecmp ("MYRIGHTS", s, 8) == 0) cmd_parse_myrights (idata, s); else if (ascii_strncasecmp ("SEARCH", s, 6) == 0) cmd_parse_search (idata, s); else if (ascii_strncasecmp ("STATUS", s, 6) == 0) cmd_parse_status (idata, s); else if (ascii_strncasecmp ("BYE", s, 3) == 0) { dprint (2, (debugfile, "Handling BYE\n")); /* check if we're logging out */ if (idata->status == IMAP_BYE) return 0; /* server shut down our connection */ s += 3; SKIPWS (s); mutt_error ("%s", s); mutt_sleep (2); cmd_handle_fatal (idata); return -1; } else if (option (OPTIMAPSERVERNOISE) && (ascii_strncasecmp ("NO", s, 2) == 0)) { dprint (2, (debugfile, "Handling untagged NO\n")); /* Display the warning message from the server */ mutt_error ("%s", s+3); mutt_sleep (2); } return 0; } /* cmd_parse_capabilities: set capability bits according to CAPABILITY * response */ static void cmd_parse_capability (IMAP_DATA* idata, char* s) { int x; char* bracket; dprint (3, (debugfile, "Handling CAPABILITY\n")); s = imap_next_word (s); if ((bracket = strchr (s, ']'))) *bracket = '\0'; FREE(&idata->capstr); idata->capstr = safe_strdup (s); memset (idata->capabilities, 0, sizeof (idata->capabilities)); while (*s) { for (x = 0; x < CAPMAX; x++) if (imap_wordcasecmp(Capabilities[x], s) == 0) { mutt_bit_set (idata->capabilities, x); break; } s = imap_next_word (s); } } /* cmd_parse_expunge: mark headers with new sequence ID and mark idata to * be reopened at our earliest convenience */ static void cmd_parse_expunge (IMAP_DATA* idata, const char* s) { int expno, cur; HEADER* h; dprint (2, (debugfile, "Handling EXPUNGE\n")); expno = atoi (s); /* walk headers, zero seqno of expunged message, decrement seqno of those * above. Possibly we could avoid walking the whole list by resorting * and guessing a good starting point, but I'm guessing the resort would * nullify the gains */ for (cur = 0; cur < idata->ctx->msgcount; cur++) { h = idata->ctx->hdrs[cur]; if (h->index+1 == expno) h->index = -1; else if (h->index+1 > expno) h->index--; } idata->reopen |= IMAP_EXPUNGE_PENDING; } /* cmd_parse_fetch: Load fetch response into IMAP_DATA. Currently only * handles unanticipated FETCH responses, and only FLAGS data. We get * these if another client has changed flags for a mailbox we've selected. * Of course, a lot of code here duplicates code in message.c. */ static void cmd_parse_fetch (IMAP_DATA* idata, char* s) { int msgno, cur; HEADER* h = NULL; dprint (3, (debugfile, "Handling FETCH\n")); msgno = atoi (s); if (msgno <= idata->ctx->msgcount) /* see cmd_parse_expunge */ for (cur = 0; cur < idata->ctx->msgcount; cur++) { h = idata->ctx->hdrs[cur]; if (h && h->active && h->index+1 == msgno) { dprint (2, (debugfile, "Message UID %d updated\n", HEADER_DATA(h)->uid)); break; } h = NULL; } if (!h) { dprint (3, (debugfile, "FETCH response ignored for this message\n")); return; } /* skip FETCH */ s = imap_next_word (s); s = imap_next_word (s); if (*s != '(') { dprint (1, (debugfile, "Malformed FETCH response")); return; } s++; if (ascii_strncasecmp ("FLAGS", s, 5) != 0) { dprint (2, (debugfile, "Only handle FLAGS updates\n")); return; } /* If server flags could conflict with mutt's flags, reopen the mailbox. */ if (h->changed) idata->reopen |= IMAP_EXPUNGE_PENDING; else { imap_set_flags (idata, h, s); idata->check_status = IMAP_FLAGS_PENDING; } } static void cmd_parse_list (IMAP_DATA* idata, char* s) { IMAP_LIST* list; IMAP_LIST lb; char delimbuf[5]; /* worst case: "\\"\0 */ long litlen; if (idata->cmddata && idata->cmdtype == IMAP_CT_LIST) list = (IMAP_LIST*)idata->cmddata; else list = &lb; memset (list, 0, sizeof (IMAP_LIST)); /* flags */ s = imap_next_word (s); if (*s != '(') { dprint (1, (debugfile, "Bad LIST response\n")); return; } s++; while (*s) { if (!ascii_strncasecmp (s, "\\NoSelect", 9)) list->noselect = 1; else if (!ascii_strncasecmp (s, "\\NoInferiors", 12)) list->noinferiors = 1; /* See draft-gahrns-imap-child-mailbox-?? */ else if (!ascii_strncasecmp (s, "\\HasNoChildren", 14)) list->noinferiors = 1; s = imap_next_word (s); if (*(s - 2) == ')') break; } /* Delimiter */ if (ascii_strncasecmp (s, "NIL", 3)) { delimbuf[0] = '\0'; safe_strcat (delimbuf, 5, s); imap_unquote_string (delimbuf); list->delim = delimbuf[0]; } /* Name */ s = imap_next_word (s); /* Notes often responds with literals here. We need a real tokenizer. */ if (!imap_get_literal_count (s, &litlen)) { if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) { idata->status = IMAP_FATAL; return; } list->name = idata->buf; } else { imap_unmunge_mbox_name (s); list->name = s; } if (list->name[0] == '\0') { idata->delim = list->delim; dprint (3, (debugfile, "Root delimiter: %c\n", idata->delim)); } } static void cmd_parse_lsub (IMAP_DATA* idata, char* s) { char buf[STRING]; char errstr[STRING]; BUFFER err, token; ciss_url_t url; IMAP_LIST list; if (idata->cmddata && idata->cmdtype == IMAP_CT_LIST) { /* caller will handle response itself */ cmd_parse_list (idata, s); return; } if (!option (OPTIMAPCHECKSUBSCRIBED)) return; idata->cmdtype = IMAP_CT_LIST; idata->cmddata = &list; cmd_parse_list (idata, s); idata->cmddata = NULL; if (!list.name) return; dprint (3, (debugfile, "Subscribing to %s\n", list.name)); strfcpy (buf, "mailboxes \"", sizeof (buf)); mutt_account_tourl (&idata->conn->account, &url); /* escape \ and " */ imap_quote_string(errstr, sizeof (errstr), list.name); url.path = errstr + 1; url.path[strlen(url.path) - 1] = '\0'; if (!mutt_strcmp (url.user, ImapUser)) url.user = NULL; url_ciss_tostring (&url, buf + 11, sizeof (buf) - 10, 0); safe_strcat (buf, sizeof (buf), "\""); memset (&token, 0, sizeof (token)); err.data = errstr; err.dsize = sizeof (errstr); if (mutt_parse_rc_line (buf, &token, &err)) dprint (1, (debugfile, "Error adding subscribed mailbox: %s\n", errstr)); FREE (&token.data); } /* cmd_parse_myrights: set rights bits according to MYRIGHTS response */ static void cmd_parse_myrights (IMAP_DATA* idata, const char* s) { dprint (2, (debugfile, "Handling MYRIGHTS\n")); s = imap_next_word ((char*)s); s = imap_next_word ((char*)s); /* zero out current rights set */ memset (idata->ctx->rights, 0, sizeof (idata->ctx->rights)); while (*s && !isspace((unsigned char) *s)) { switch (*s) { case 'l': mutt_bit_set (idata->ctx->rights, M_ACL_LOOKUP); break; case 'r': mutt_bit_set (idata->ctx->rights, M_ACL_READ); break; case 's': mutt_bit_set (idata->ctx->rights, M_ACL_SEEN); break; case 'w': mutt_bit_set (idata->ctx->rights, M_ACL_WRITE); break; case 'i': mutt_bit_set (idata->ctx->rights, M_ACL_INSERT); break; case 'p': mutt_bit_set (idata->ctx->rights, M_ACL_POST); break; case 'a': mutt_bit_set (idata->ctx->rights, M_ACL_ADMIN); break; case 'k': mutt_bit_set (idata->ctx->rights, M_ACL_CREATE); break; case 'x': mutt_bit_set (idata->ctx->rights, M_ACL_DELMX); break; case 't': mutt_bit_set (idata->ctx->rights, M_ACL_DELETE); break; case 'e': mutt_bit_set (idata->ctx->rights, M_ACL_EXPUNGE); break; /* obsolete rights */ case 'c': mutt_bit_set (idata->ctx->rights, M_ACL_CREATE); mutt_bit_set (idata->ctx->rights, M_ACL_DELMX); break; case 'd': mutt_bit_set (idata->ctx->rights, M_ACL_DELETE); mutt_bit_set (idata->ctx->rights, M_ACL_EXPUNGE); break; default: dprint(1, (debugfile, "Unknown right: %c\n", *s)); } s++; } } /* This should be optimised (eg with a tree or hash) */ static int uid2msgno (IMAP_DATA* idata, unsigned int uid) { int i; for (i = 0; i < idata->ctx->msgcount; i++) { HEADER* h = idata->ctx->hdrs[i]; if (HEADER_DATA(h)->uid == uid) return i; } return -1; } /* cmd_parse_search: store SEARCH response for later use */ static void cmd_parse_search (IMAP_DATA* idata, const char* s) { unsigned int uid; int msgno; dprint (2, (debugfile, "Handling SEARCH\n")); while ((s = imap_next_word ((char*)s)) && *s != '\0') { uid = atoi (s); msgno = uid2msgno (idata, uid); if (msgno >= 0) idata->ctx->hdrs[uid2msgno (idata, uid)]->matched = 1; } } /* first cut: just do buffy update. Later we may wish to cache all * mailbox information, even that not desired by buffy */ static void cmd_parse_status (IMAP_DATA* idata, char* s) { char* mailbox; char* value; BUFFY* inc; IMAP_MBOX mx; int count; IMAP_STATUS *status; unsigned int olduv, oldun; long litlen; mailbox = imap_next_word (s); /* We need a real tokenizer. */ if (!imap_get_literal_count (mailbox, &litlen)) { if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) { idata->status = IMAP_FATAL; return; } mailbox = idata->buf; s = mailbox + litlen; *s = '\0'; s++; SKIPWS(s); } else { s = imap_next_word (mailbox); *(s - 1) = '\0'; imap_unmunge_mbox_name (mailbox); } status = imap_mboxcache_get (idata, mailbox, 1); olduv = status->uidvalidity; oldun = status->uidnext; if (*s++ != '(') { dprint (1, (debugfile, "Error parsing STATUS\n")); return; } while (*s && *s != ')') { value = imap_next_word (s); count = strtol (value, &value, 10); if (!ascii_strncmp ("MESSAGES", s, 8)) status->messages = count; else if (!ascii_strncmp ("RECENT", s, 6)) status->recent = count; else if (!ascii_strncmp ("UIDNEXT", s, 7)) status->uidnext = count; else if (!ascii_strncmp ("UIDVALIDITY", s, 11)) status->uidvalidity = count; else if (!ascii_strncmp ("UNSEEN", s, 6)) status->unseen = count; s = value; if (*s && *s != ')') s = imap_next_word (s); } dprint (3, (debugfile, "%s (UIDVALIDITY: %d, UIDNEXT: %d) %d messages, %d recent, %d unseen\n", status->name, status->uidvalidity, status->uidnext, status->messages, status->recent, status->unseen)); /* caller is prepared to handle the result herself */ if (idata->cmddata && idata->cmdtype == IMAP_CT_STATUS) { memcpy (idata->cmddata, status, sizeof (IMAP_STATUS)); return; } dprint (3, (debugfile, "Running default STATUS handler\n")); /* should perhaps move this code back to imap_buffy_check */ for (inc = Incoming; inc; inc = inc->next) { if (inc->magic != M_IMAP) continue; if (imap_parse_path (inc->path, &mx) < 0) { dprint (1, (debugfile, "Error parsing mailbox %s, skipping\n", inc->path)); continue; } /* dprint (2, (debugfile, "Buffy entry: [%s] mbox: [%s]\n", inc->path, NONULL(mx.mbox))); */ if (imap_account_match (&idata->conn->account, &mx.account)) { if (mx.mbox) { value = safe_strdup (mx.mbox); imap_fix_path (idata, mx.mbox, value, mutt_strlen (value) + 1); FREE (&mx.mbox); } else value = safe_strdup ("INBOX"); if (value && !imap_mxcmp (mailbox, value)) { dprint (3, (debugfile, "Found %s in buffy list (OV: %d ON: %d U: %d)\n", mailbox, olduv, oldun, status->unseen)); if (option(OPTMAILCHECKRECENT)) { if (olduv && olduv == status->uidvalidity) { if (oldun < status->uidnext) inc->new = status->unseen; } else if (!olduv && !oldun) /* first check per session, use recent. might need a flag for this. */ inc->new = status->recent; else inc->new = status->unseen; } else inc->new = status->unseen; if (inc->new) /* force back to keep detecting new mail until the mailbox is opened */ status->uidnext = oldun; FREE (&value); return; } FREE (&value); } FREE (&mx.mbox); } } mutt-1.5.21/imap/imap.c0000644000175000017500000014537511245033304011544 00000000000000/* * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2009 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Support for IMAP4rev1, with the occasional nod to IMAP 4. */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "mx.h" #include "mailbox.h" #include "globals.h" #include "sort.h" #include "browser.h" #include "message.h" #include "imap_private.h" #if defined(USE_SSL) # include "mutt_ssl.h" #endif #include "buffy.h" #if USE_HCACHE #include "hcache.h" #endif #include #include #include #include #include #include /* imap forward declarations */ static char* imap_get_flags (LIST** hflags, char* s); static int imap_check_capabilities (IMAP_DATA* idata); static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag, const char* str, char* flags, size_t flsize); /* imap_access: Check permissions on an IMAP mailbox. * TODO: ACL checks. Right now we assume if it exists we can * mess with it. */ int imap_access (const char* path, int flags) { IMAP_DATA* idata; IMAP_MBOX mx; char buf[LONG_STRING]; char mailbox[LONG_STRING]; char mbox[LONG_STRING]; int rc; if (imap_parse_path (path, &mx)) return -1; if (!(idata = imap_conn_find (&mx.account, option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) { FREE (&mx.mbox); return -1; } imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); if (!*mailbox) strfcpy (mailbox, "INBOX", sizeof (mailbox)); /* we may already be in the folder we're checking */ if (!ascii_strcmp(idata->mailbox, mx.mbox)) { FREE (&mx.mbox); return 0; } FREE (&mx.mbox); if (imap_mboxcache_get (idata, mailbox, 0)) { dprint (3, (debugfile, "imap_access: found %s in cache\n", mailbox)); return 0; } imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); if (mutt_bit_isset (idata->capabilities, IMAP4REV1)) snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox); else if (mutt_bit_isset (idata->capabilities, STATUS)) snprintf (buf, sizeof (buf), "STATUS %s (UID-VALIDITY)", mbox); else { dprint (2, (debugfile, "imap_access: STATUS not supported?\n")); return -1; } if ((rc = imap_exec (idata, buf, IMAP_CMD_FAIL_OK)) < 0) { dprint (1, (debugfile, "imap_access: Can't check STATUS of %s\n", mbox)); return rc; } return 0; } int imap_create_mailbox (IMAP_DATA* idata, char* mailbox) { char buf[LONG_STRING], mbox[LONG_STRING]; imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); snprintf (buf, sizeof (buf), "CREATE %s", mbox); if (imap_exec (idata, buf, 0) != 0) { mutt_error (_("CREATE failed: %s"), imap_cmd_trailer (idata)); return -1; } return 0; } int imap_rename_mailbox (IMAP_DATA* idata, IMAP_MBOX* mx, const char* newname) { char oldmbox[LONG_STRING]; char newmbox[LONG_STRING]; char buf[LONG_STRING]; imap_munge_mbox_name (oldmbox, sizeof (oldmbox), mx->mbox); imap_munge_mbox_name (newmbox, sizeof (newmbox), newname); snprintf (buf, sizeof (buf), "RENAME %s %s", oldmbox, newmbox); if (imap_exec (idata, buf, 0) != 0) return -1; return 0; } int imap_delete_mailbox (CONTEXT* ctx, IMAP_MBOX mx) { char buf[LONG_STRING], mbox[LONG_STRING]; IMAP_DATA *idata; if (!ctx || !ctx->data) { if (!(idata = imap_conn_find (&mx.account, option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) { FREE (&mx.mbox); return -1; } } else { idata = ctx->data; } imap_munge_mbox_name (mbox, sizeof (mbox), mx.mbox); snprintf (buf, sizeof (buf), "DELETE %s", mbox); if (imap_exec ((IMAP_DATA*) idata, buf, 0) != 0) return -1; return 0; } /* imap_logout_all: close all open connections. Quick and dirty until we can * make sure we've got all the context we need. */ void imap_logout_all (void) { CONNECTION* conn; CONNECTION* tmp; conn = mutt_socket_head (); while (conn) { tmp = conn->next; if (conn->account.type == M_ACCT_TYPE_IMAP && conn->fd >= 0) { mutt_message (_("Closing connection to %s..."), conn->account.host); imap_logout ((IMAP_DATA**) (void*) &conn->data); mutt_clear_error (); mutt_socket_free (conn); } conn = tmp; } } /* imap_read_literal: read bytes bytes from server into file. Not explicitly * buffered, relies on FILE buffering. NOTE: strips \r from \r\n. * Apparently even literals use \r\n-terminated strings ?! */ int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes, progress_t* pbar) { long pos; char c; int r = 0; dprint (2, (debugfile, "imap_read_literal: reading %ld bytes\n", bytes)); for (pos = 0; pos < bytes; pos++) { if (mutt_socket_readchar (idata->conn, &c) != 1) { dprint (1, (debugfile, "imap_read_literal: error during read, %ld bytes read\n", pos)); idata->status = IMAP_FATAL; return -1; } #if 1 if (r == 1 && c != '\n') fputc ('\r', fp); if (c == '\r') { r = 1; continue; } else r = 0; #endif fputc (c, fp); if (pbar && !(pos % 1024)) mutt_progress_update (pbar, pos, -1); #ifdef DEBUG if (debuglevel >= IMAP_LOG_LTRL) fputc (c, debugfile); #endif } return 0; } /* imap_expunge_mailbox: Purge IMAP portion of expunged messages from the * context. Must not be done while something has a handle on any headers * (eg inside pager or editor). That is, check IMAP_REOPEN_ALLOW. */ void imap_expunge_mailbox (IMAP_DATA* idata) { HEADER* h; int i, cacheno; #ifdef USE_HCACHE idata->hcache = imap_hcache_open (idata, NULL); #endif for (i = 0; i < idata->ctx->msgcount; i++) { h = idata->ctx->hdrs[i]; if (h->index == -1) { dprint (2, (debugfile, "Expunging message UID %d.\n", HEADER_DATA (h)->uid)); h->active = 0; idata->ctx->size -= h->content->length; imap_cache_del (idata, h); #if USE_HCACHE imap_hcache_del (idata, HEADER_DATA(h)->uid); #endif /* free cached body from disk, if necessary */ cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN; if (idata->cache[cacheno].uid == HEADER_DATA(h)->uid && idata->cache[cacheno].path) { unlink (idata->cache[cacheno].path); FREE (&idata->cache[cacheno].path); } imap_free_header_data (&h->data); } } #if USE_HCACHE imap_hcache_close (idata); #endif /* We may be called on to expunge at any time. We can't rely on the caller * to always know to rethread */ mx_update_tables (idata->ctx, 0); mutt_sort_headers (idata->ctx, 1); } /* imap_check_capabilities: make sure we can log in to this server. */ static int imap_check_capabilities (IMAP_DATA* idata) { if (imap_exec (idata, "CAPABILITY", 0) != 0) { imap_error ("imap_check_capabilities", idata->buf); return -1; } if (!(mutt_bit_isset(idata->capabilities,IMAP4) ||mutt_bit_isset(idata->capabilities,IMAP4REV1))) { mutt_error _("This IMAP server is ancient. Mutt does not work with it."); mutt_sleep (2); /* pause a moment to let the user see the error */ return -1; } return 0; } /* imap_conn_find: Find an open IMAP connection matching account, or open * a new one if none can be found. */ IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags) { CONNECTION* conn = NULL; ACCOUNT* creds = NULL; IMAP_DATA* idata = NULL; int new = 0; while ((conn = mutt_conn_find (conn, account))) { if (!creds) creds = &conn->account; else memcpy (&conn->account, creds, sizeof (ACCOUNT)); idata = (IMAP_DATA*)conn->data; if (flags & M_IMAP_CONN_NONEW) { if (!idata) { /* This should only happen if we've come to the end of the list */ mutt_socket_free (conn); return NULL; } else if (idata->state < IMAP_AUTHENTICATED) continue; } if (flags & M_IMAP_CONN_NOSELECT && idata && idata->state >= IMAP_SELECTED) continue; if (idata && idata->status == IMAP_FATAL) continue; break; } if (!conn) return NULL; /* this happens when the initial connection fails */ if (!idata) { /* The current connection is a new connection */ if (! (idata = imap_new_idata ())) { mutt_socket_free (conn); return NULL; } conn->data = idata; idata->conn = conn; new = 1; } if (idata->state == IMAP_DISCONNECTED) imap_open_connection (idata); if (idata->state == IMAP_CONNECTED) { if (!imap_authenticate (idata)) { idata->state = IMAP_AUTHENTICATED; new = 1; if (idata->conn->ssf) dprint (2, (debugfile, "Communication encrypted at %d bits\n", idata->conn->ssf)); } else mutt_account_unsetpass (&idata->conn->account); FREE (&idata->capstr); } if (new && idata->state == IMAP_AUTHENTICATED) { /* capabilities may have changed */ imap_exec (idata, "CAPABILITY", IMAP_CMD_QUEUE); /* get root delimiter, '/' as default */ idata->delim = '/'; imap_exec (idata, "LIST \"\" \"\"", IMAP_CMD_QUEUE); if (option (OPTIMAPCHECKSUBSCRIBED)) imap_exec (idata, "LSUB \"\" \"*\"", IMAP_CMD_QUEUE); /* we may need the root delimiter before we open a mailbox */ imap_exec (idata, NULL, IMAP_CMD_FAIL_OK); } return idata; } int imap_open_connection (IMAP_DATA* idata) { char buf[LONG_STRING]; if (mutt_socket_open (idata->conn) < 0) return -1; idata->state = IMAP_CONNECTED; if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) { imap_close_connection (idata); return -1; } if (ascii_strncasecmp ("* OK", idata->buf, 4) == 0) { if (ascii_strncasecmp ("* OK [CAPABILITY", idata->buf, 16) && imap_check_capabilities (idata)) goto bail; #if defined(USE_SSL) /* Attempt STARTTLS if available and desired. */ if (!idata->conn->ssf && (option(OPTSSLFORCETLS) || mutt_bit_isset (idata->capabilities, STARTTLS))) { int rc; if (option(OPTSSLFORCETLS)) rc = M_YES; else if ((rc = query_quadoption (OPT_SSLSTARTTLS, _("Secure connection with TLS?"))) == -1) goto err_close_conn; if (rc == M_YES) { if ((rc = imap_exec (idata, "STARTTLS", IMAP_CMD_FAIL_OK)) == -1) goto bail; if (rc != -2) { if (mutt_ssl_starttls (idata->conn)) { mutt_error (_("Could not negotiate TLS connection")); mutt_sleep (1); goto err_close_conn; } else { /* RFC 2595 demands we recheck CAPABILITY after TLS completes. */ if (imap_exec (idata, "CAPABILITY", 0)) goto bail; } } } } if (option(OPTSSLFORCETLS) && ! idata->conn->ssf) { mutt_error _("Encrypted connection unavailable"); mutt_sleep (1); goto err_close_conn; } #endif } else if (ascii_strncasecmp ("* PREAUTH", idata->buf, 9) == 0) { idata->state = IMAP_AUTHENTICATED; if (imap_check_capabilities (idata) != 0) goto bail; FREE (&idata->capstr); } else { imap_error ("imap_open_connection()", buf); goto bail; } return 0; #if defined(USE_SSL) err_close_conn: imap_close_connection (idata); #endif bail: FREE (&idata->capstr); return -1; } void imap_close_connection(IMAP_DATA* idata) { if (idata->state != IMAP_DISCONNECTED) { mutt_socket_close (idata->conn); idata->state = IMAP_DISCONNECTED; } idata->seqno = idata->nextcmd = idata->lastcmd = idata->status = 0; memset (idata->cmds, 0, sizeof (IMAP_COMMAND) * idata->cmdslots); } /* imap_get_flags: Make a simple list out of a FLAGS response. * return stream following FLAGS response */ static char* imap_get_flags (LIST** hflags, char* s) { LIST* flags; char* flag_word; char ctmp; /* sanity-check string */ if (ascii_strncasecmp ("FLAGS", s, 5) != 0) { dprint (1, (debugfile, "imap_get_flags: not a FLAGS response: %s\n", s)); return NULL; } s += 5; SKIPWS(s); if (*s != '(') { dprint (1, (debugfile, "imap_get_flags: bogus FLAGS response: %s\n", s)); return NULL; } /* create list, update caller's flags handle */ flags = mutt_new_list(); *hflags = flags; while (*s && *s != ')') { s++; SKIPWS(s); flag_word = s; while (*s && (*s != ')') && !ISSPACE (*s)) s++; ctmp = *s; *s = '\0'; if (*flag_word) mutt_add_list (flags, flag_word); *s = ctmp; } /* note bad flags response */ if (*s != ')') { dprint (1, (debugfile, "imap_get_flags: Unterminated FLAGS response: %s\n", s)); mutt_free_list (hflags); return NULL; } s++; return s; } int imap_open_mailbox (CONTEXT* ctx) { CONNECTION *conn; IMAP_DATA *idata; IMAP_STATUS* status; char buf[LONG_STRING]; char bufout[LONG_STRING]; int count = 0; IMAP_MBOX mx, pmx; int rc; if (imap_parse_path (ctx->path, &mx)) { mutt_error (_("%s is an invalid IMAP path"), ctx->path); return -1; } /* we require a connection which isn't currently in IMAP_SELECTED state */ if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NOSELECT))) goto fail_noidata; if (idata->state < IMAP_AUTHENTICATED) goto fail; conn = idata->conn; /* once again the context is new */ ctx->data = idata; ctx->mx_close = imap_close_mailbox; /* Clean up path and replace the one in the ctx */ imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); if (!*buf) strfcpy (buf, "INBOX", sizeof (buf)); FREE(&(idata->mailbox)); idata->mailbox = safe_strdup (buf); imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox); FREE (&(ctx->path)); ctx->path = safe_strdup (buf); idata->ctx = ctx; /* clear mailbox status */ idata->status = 0; memset (idata->ctx->rights, 0, sizeof (idata->ctx->rights)); idata->newMailCount = 0; mutt_message (_("Selecting %s..."), idata->mailbox); imap_munge_mbox_name (buf, sizeof(buf), idata->mailbox); /* pipeline ACL test */ if (mutt_bit_isset (idata->capabilities, ACL)) { snprintf (bufout, sizeof (bufout), "MYRIGHTS %s", buf); imap_exec (idata, bufout, IMAP_CMD_QUEUE); } /* assume we have all rights if ACL is unavailable */ else { mutt_bit_set (idata->ctx->rights, M_ACL_LOOKUP); mutt_bit_set (idata->ctx->rights, M_ACL_READ); mutt_bit_set (idata->ctx->rights, M_ACL_SEEN); mutt_bit_set (idata->ctx->rights, M_ACL_WRITE); mutt_bit_set (idata->ctx->rights, M_ACL_INSERT); mutt_bit_set (idata->ctx->rights, M_ACL_POST); mutt_bit_set (idata->ctx->rights, M_ACL_CREATE); mutt_bit_set (idata->ctx->rights, M_ACL_DELETE); } /* pipeline the postponed count if possible */ pmx.mbox = NULL; if (mx_is_imap (Postponed) && !imap_parse_path (Postponed, &pmx) && mutt_account_match (&pmx.account, &mx.account)) imap_status (Postponed, 1); FREE (&pmx.mbox); snprintf (bufout, sizeof (bufout), "%s %s", ctx->readonly ? "EXAMINE" : "SELECT", buf); idata->state = IMAP_SELECTED; imap_cmd_start (idata, bufout); status = imap_mboxcache_get (idata, idata->mailbox, 1); do { char *pc; if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; pc = idata->buf + 2; /* Obtain list of available flags here, may be overridden by a * PERMANENTFLAGS tag in the OK response */ if (ascii_strncasecmp ("FLAGS", pc, 5) == 0) { /* don't override PERMANENTFLAGS */ if (!idata->flags) { dprint (3, (debugfile, "Getting mailbox FLAGS\n")); if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL) goto fail; } } /* PERMANENTFLAGS are massaged to look like FLAGS, then override FLAGS */ else if (ascii_strncasecmp ("OK [PERMANENTFLAGS", pc, 18) == 0) { dprint (3, (debugfile, "Getting mailbox PERMANENTFLAGS\n")); /* safe to call on NULL */ mutt_free_list (&(idata->flags)); /* skip "OK [PERMANENT" so syntax is the same as FLAGS */ pc += 13; if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL) goto fail; } /* save UIDVALIDITY for the header cache */ else if (ascii_strncasecmp ("OK [UIDVALIDITY", pc, 14) == 0) { dprint (3, (debugfile, "Getting mailbox UIDVALIDITY\n")); pc += 3; pc = imap_next_word (pc); idata->uid_validity = strtol (pc, NULL, 10); status->uidvalidity = idata->uid_validity; } else if (ascii_strncasecmp ("OK [UIDNEXT", pc, 11) == 0) { dprint (3, (debugfile, "Getting mailbox UIDNEXT\n")); pc += 3; pc = imap_next_word (pc); idata->uidnext = strtol (pc, NULL, 10); status->uidnext = idata->uidnext; } else { pc = imap_next_word (pc); if (!ascii_strncasecmp ("EXISTS", pc, 6)) { count = idata->newMailCount; idata->newMailCount = 0; } } } while (rc == IMAP_CMD_CONTINUE); if (rc == IMAP_CMD_NO) { char *s; s = imap_next_word (idata->buf); /* skip seq */ s = imap_next_word (s); /* Skip response */ mutt_error ("%s", s); mutt_sleep (2); goto fail; } if (rc != IMAP_CMD_OK) goto fail; /* check for READ-ONLY notification */ if (!ascii_strncasecmp (imap_get_qualifier (idata->buf), "[READ-ONLY]", 11) \ && !mutt_bit_isset (idata->capabilities, ACL)) { dprint (2, (debugfile, "Mailbox is read-only.\n")); ctx->readonly = 1; } #ifdef DEBUG /* dump the mailbox flags we've found */ if (debuglevel > 2) { if (!idata->flags) dprint (3, (debugfile, "No folder flags found\n")); else { LIST* t = idata->flags; dprint (3, (debugfile, "Mailbox flags: ")); t = t->next; while (t) { dprint (3, (debugfile, "[%s] ", t->data)); t = t->next; } dprint (3, (debugfile, "\n")); } } #endif if (!(mutt_bit_isset(idata->ctx->rights, M_ACL_DELETE) || mutt_bit_isset(idata->ctx->rights, M_ACL_SEEN) || mutt_bit_isset(idata->ctx->rights, M_ACL_WRITE) || mutt_bit_isset(idata->ctx->rights, M_ACL_INSERT))) ctx->readonly = 1; ctx->hdrmax = count; ctx->hdrs = safe_calloc (count, sizeof (HEADER *)); ctx->v2r = safe_calloc (count, sizeof (int)); ctx->msgcount = 0; if (count && (imap_read_headers (idata, 0, count-1) < 0)) { mutt_error _("Error opening mailbox"); mutt_sleep (1); goto fail; } dprint (2, (debugfile, "imap_open_mailbox: msgcount is %d\n", ctx->msgcount)); FREE (&mx.mbox); return 0; fail: if (idata->state == IMAP_SELECTED) idata->state = IMAP_AUTHENTICATED; fail_noidata: FREE (&mx.mbox); return -1; } int imap_open_mailbox_append (CONTEXT *ctx) { CONNECTION *conn; IMAP_DATA *idata; char buf[LONG_STRING]; char mailbox[LONG_STRING]; IMAP_MBOX mx; int rc; if (imap_parse_path (ctx->path, &mx)) return -1; /* in APPEND mode, we appear to hijack an existing IMAP connection - * ctx is brand new and mostly empty */ if (!(idata = imap_conn_find (&(mx.account), 0))) { FREE (&mx.mbox); return -1; } conn = idata->conn; ctx->magic = M_IMAP; ctx->data = idata; imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); if (!*mailbox) strfcpy (mailbox, "INBOX", sizeof (mailbox)); FREE (&mx.mbox); /* really we should also check for W_OK */ if ((rc = imap_access (ctx->path, F_OK)) == 0) return 0; if (rc == -1) return -1; snprintf (buf, sizeof (buf), _("Create %s?"), mailbox); if (option (OPTCONFIRMCREATE) && mutt_yesorno (buf, 1) < 1) return -1; if (imap_create_mailbox (idata, mailbox) < 0) return -1; return 0; } /* imap_logout: Gracefully log out of server. */ void imap_logout (IMAP_DATA** idata) { /* we set status here to let imap_handle_untagged know we _expect_ to * receive a bye response (so it doesn't freak out and close the conn) */ (*idata)->status = IMAP_BYE; imap_cmd_start (*idata, "LOGOUT"); while (imap_cmd_step (*idata) == IMAP_CMD_CONTINUE) ; mutt_socket_close ((*idata)->conn); imap_free_idata (idata); } /* imap_set_flag: append str to flags if we currently have permission * according to aclbit */ static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag, const char *str, char *flags, size_t flsize) { if (mutt_bit_isset (idata->ctx->rights, aclbit)) if (flag && imap_has_flag (idata->flags, str)) safe_strcat (flags, flsize, str); } /* imap_has_flag: do a caseless comparison of the flag against a flag list, * return 1 if found or flag list has '\*', 0 otherwise */ int imap_has_flag (LIST* flag_list, const char* flag) { if (!flag_list) return 0; flag_list = flag_list->next; while (flag_list) { if (!ascii_strncasecmp (flag_list->data, flag, strlen (flag_list->data))) return 1; if (!ascii_strncmp (flag_list->data, "\\*", strlen (flag_list->data))) return 1; flag_list = flag_list->next; } return 0; } /* Note: headers must be in SORT_ORDER. See imap_exec_msgset for args. * Pos is an opaque pointer a la strtok. It should be 0 at first call. */ static int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed, int invert, int* pos) { HEADER** hdrs = idata->ctx->hdrs; int count = 0; /* number of messages in message set */ int match = 0; /* whether current message matches flag condition */ unsigned int setstart = 0; /* start of current message range */ int n; int started = 0; hdrs = idata->ctx->hdrs; for (n = *pos; n < idata->ctx->msgcount && buf->dptr - buf->data < IMAP_MAX_CMDLEN; n++) { match = 0; /* don't include pending expunged messages */ if (hdrs[n]->active) switch (flag) { case M_DELETED: if (hdrs[n]->deleted != HEADER_DATA(hdrs[n])->deleted) match = invert ^ hdrs[n]->deleted; break; case M_FLAG: if (hdrs[n]->flagged != HEADER_DATA(hdrs[n])->flagged) match = invert ^ hdrs[n]->flagged; break; case M_OLD: if (hdrs[n]->old != HEADER_DATA(hdrs[n])->old) match = invert ^ hdrs[n]->old; break; case M_READ: if (hdrs[n]->read != HEADER_DATA(hdrs[n])->read) match = invert ^ hdrs[n]->read; break; case M_REPLIED: if (hdrs[n]->replied != HEADER_DATA(hdrs[n])->replied) match = invert ^ hdrs[n]->replied; break; case M_TAG: if (hdrs[n]->tagged) match = 1; break; } if (match && (!changed || hdrs[n]->changed)) { count++; if (setstart == 0) { setstart = HEADER_DATA (hdrs[n])->uid; if (started == 0) { mutt_buffer_printf (buf, "%u", HEADER_DATA (hdrs[n])->uid); started = 1; } else mutt_buffer_printf (buf, ",%u", HEADER_DATA (hdrs[n])->uid); } /* tie up if the last message also matches */ else if (n == idata->ctx->msgcount-1) mutt_buffer_printf (buf, ":%u", HEADER_DATA (hdrs[n])->uid); } /* End current set if message doesn't match or we've reached the end * of the mailbox via inactive messages following the last match. */ else if (setstart && (hdrs[n]->active || n == idata->ctx->msgcount-1)) { if (HEADER_DATA (hdrs[n-1])->uid > setstart) mutt_buffer_printf (buf, ":%u", HEADER_DATA (hdrs[n-1])->uid); setstart = 0; } } *pos = n; return count; } /* Prepares commands for all messages matching conditions (must be flushed * with imap_exec) * Params: * idata: IMAP_DATA containing context containing header set * pre, post: commands are of the form "%s %s %s %s", tag, * pre, message set, post * flag: enum of flag type on which to filter * changed: include only changed messages in message set * invert: invert sense of flag, eg M_READ matches unread messages * Returns: number of matched messages, or -1 on failure */ int imap_exec_msgset (IMAP_DATA* idata, const char* pre, const char* post, int flag, int changed, int invert) { HEADER** hdrs = NULL; short oldsort; BUFFER* cmd; int pos; int rc; int count = 0; if (! (cmd = mutt_buffer_init (NULL))) { dprint (1, (debugfile, "imap_exec_msgset: unable to allocate buffer\n")); return -1; } /* We make a copy of the headers just in case resorting doesn't give exactly the original order (duplicate messages?), because other parts of the ctx are tied to the header order. This may be overkill. */ oldsort = Sort; if (Sort != SORT_ORDER) { hdrs = idata->ctx->hdrs; idata->ctx->hdrs = safe_malloc (idata->ctx->msgcount * sizeof (HEADER*)); memcpy (idata->ctx->hdrs, hdrs, idata->ctx->msgcount * sizeof (HEADER*)); Sort = SORT_ORDER; qsort (idata->ctx->hdrs, idata->ctx->msgcount, sizeof (HEADER*), mutt_get_sort_func (SORT_ORDER)); } pos = 0; do { cmd->dptr = cmd->data; mutt_buffer_printf (cmd, "%s ", pre); rc = imap_make_msg_set (idata, cmd, flag, changed, invert, &pos); if (rc > 0) { mutt_buffer_printf (cmd, " %s", post); if (imap_exec (idata, cmd->data, IMAP_CMD_QUEUE)) { rc = -1; goto out; } count += rc; } } while (rc > 0); rc = count; out: mutt_buffer_free (&cmd); if (oldsort != Sort) { Sort = oldsort; FREE (&idata->ctx->hdrs); idata->ctx->hdrs = hdrs; } return rc; } /* returns 0 if mutt's flags match cached server flags */ static int compare_flags (HEADER* h) { IMAP_HEADER_DATA* hd = (IMAP_HEADER_DATA*)h->data; if (h->read != hd->read) return 1; if (h->old != hd->old) return 1; if (h->flagged != hd->flagged) return 1; if (h->replied != hd->replied) return 1; if (h->deleted != hd->deleted) return 1; return 0; } /* Update the IMAP server to reflect the flags a single message. */ int imap_sync_message (IMAP_DATA *idata, HEADER *hdr, BUFFER *cmd, int *err_continue) { char flags[LONG_STRING]; char uid[11]; hdr->changed = 0; if (!compare_flags (hdr)) { idata->ctx->changed--; return 0; } snprintf (uid, sizeof (uid), "%u", HEADER_DATA(hdr)->uid); cmd->dptr = cmd->data; mutt_buffer_addstr (cmd, "UID STORE "); mutt_buffer_addstr (cmd, uid); flags[0] = '\0'; imap_set_flag (idata, M_ACL_SEEN, hdr->read, "\\Seen ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, hdr->old, "Old ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, hdr->flagged, "\\Flagged ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, hdr->replied, "\\Answered ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_DELETE, hdr->deleted, "\\Deleted ", flags, sizeof (flags)); /* now make sure we don't lose custom tags */ if (mutt_bit_isset (idata->ctx->rights, M_ACL_WRITE)) imap_add_keywords (flags, hdr, idata->flags, sizeof (flags)); mutt_remove_trailing_ws (flags); /* UW-IMAP is OK with null flags, Cyrus isn't. The only solution is to * explicitly revoke all system flags (if we have permission) */ if (!*flags) { imap_set_flag (idata, M_ACL_SEEN, 1, "\\Seen ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, 1, "Old ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, 1, "\\Flagged ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_WRITE, 1, "\\Answered ", flags, sizeof (flags)); imap_set_flag (idata, M_ACL_DELETE, 1, "\\Deleted ", flags, sizeof (flags)); mutt_remove_trailing_ws (flags); mutt_buffer_addstr (cmd, " -FLAGS.SILENT ("); } else mutt_buffer_addstr (cmd, " FLAGS.SILENT ("); mutt_buffer_addstr (cmd, flags); mutt_buffer_addstr (cmd, ")"); /* dumb hack for bad UW-IMAP 4.7 servers spurious FLAGS updates */ hdr->active = 0; /* after all this it's still possible to have no flags, if you * have no ACL rights */ if (*flags && (imap_exec (idata, cmd->data, 0) != 0) && err_continue && (*err_continue != M_YES)) { *err_continue = imap_continue ("imap_sync_message: STORE failed", idata->buf); if (*err_continue != M_YES) return -1; } hdr->active = 1; idata->ctx->changed--; return 0; } static int sync_helper (IMAP_DATA* idata, int right, int flag, const char* name) { int count = 0; int rc; char buf[LONG_STRING]; if (!mutt_bit_isset (idata->ctx->rights, right)) return 0; if (right == M_ACL_WRITE && !imap_has_flag (idata->flags, name)) return 0; snprintf (buf, sizeof(buf), "+FLAGS.SILENT (%s)", name); if ((rc = imap_exec_msgset (idata, "UID STORE", buf, flag, 1, 0)) < 0) return rc; count += rc; buf[0] = '-'; if ((rc = imap_exec_msgset (idata, "UID STORE", buf, flag, 1, 1)) < 0) return rc; count += rc; return count; } /* update the IMAP server to reflect message changes done within mutt. * Arguments * ctx: the current context * expunge: 0 or 1 - do expunge? */ int imap_sync_mailbox (CONTEXT* ctx, int expunge, int* index_hint) { IMAP_DATA* idata; CONTEXT* appendctx = NULL; HEADER* h; HEADER** hdrs = NULL; int oldsort; int n; int rc; idata = (IMAP_DATA*) ctx->data; if (idata->state < IMAP_SELECTED) { dprint (2, (debugfile, "imap_sync_mailbox: no mailbox selected\n")); return -1; } /* This function is only called when the calling code expects the context * to be changed. */ imap_allow_reopen (ctx); if ((rc = imap_check_mailbox (ctx, index_hint, 0)) != 0) return rc; /* if we are expunging anyway, we can do deleted messages very quickly... */ if (expunge && mutt_bit_isset (ctx->rights, M_ACL_DELETE)) { if ((rc = imap_exec_msgset (idata, "UID STORE", "+FLAGS.SILENT (\\Deleted)", M_DELETED, 1, 0)) < 0) { mutt_error (_("Expunge failed")); mutt_sleep (1); goto out; } if (rc > 0) { /* mark these messages as unchanged so second pass ignores them. Done * here so BOGUS UW-IMAP 4.7 SILENT FLAGS updates are ignored. */ for (n = 0; n < ctx->msgcount; n++) if (ctx->hdrs[n]->deleted && ctx->hdrs[n]->changed) ctx->hdrs[n]->active = 0; mutt_message (_("Marking %d messages deleted..."), rc); } } #if USE_HCACHE idata->hcache = imap_hcache_open (idata, NULL); #endif /* save messages with real (non-flag) changes */ for (n = 0; n < ctx->msgcount; n++) { h = ctx->hdrs[n]; if (h->deleted) { imap_cache_del (idata, h); #if USE_HCACHE imap_hcache_del (idata, HEADER_DATA(h)->uid); #endif } if (h->active && h->changed) { #if USE_HCACHE imap_hcache_put (idata, h); #endif /* if the message has been rethreaded or attachments have been deleted * we delete the message and reupload it. * This works better if we're expunging, of course. */ if ((h->env && (h->env->refs_changed || h->env->irt_changed)) || h->attach_del) { mutt_message (_("Saving changed messages... [%d/%d]"), n+1, ctx->msgcount); if (!appendctx) appendctx = mx_open_mailbox (ctx->path, M_APPEND | M_QUIET, NULL); if (!appendctx) dprint (1, (debugfile, "imap_sync_mailbox: Error opening mailbox in append mode\n")); else _mutt_save_message (h, appendctx, 1, 0, 0); } } } #if USE_HCACHE imap_hcache_close (idata); #endif /* sync +/- flags for the five flags mutt cares about */ rc = 0; /* presort here to avoid doing 10 resorts in imap_exec_msgset */ oldsort = Sort; if (Sort != SORT_ORDER) { hdrs = ctx->hdrs; ctx->hdrs = safe_malloc (ctx->msgcount * sizeof (HEADER*)); memcpy (ctx->hdrs, hdrs, ctx->msgcount * sizeof (HEADER*)); Sort = SORT_ORDER; qsort (ctx->hdrs, ctx->msgcount, sizeof (HEADER*), mutt_get_sort_func (SORT_ORDER)); } rc += sync_helper (idata, M_ACL_DELETE, M_DELETED, "\\Deleted"); rc += sync_helper (idata, M_ACL_WRITE, M_FLAG, "\\Flagged"); rc += sync_helper (idata, M_ACL_WRITE, M_OLD, "Old"); rc += sync_helper (idata, M_ACL_SEEN, M_READ, "\\Seen"); rc += sync_helper (idata, M_ACL_WRITE, M_REPLIED, "\\Answered"); if (oldsort != Sort) { Sort = oldsort; FREE (&ctx->hdrs); ctx->hdrs = hdrs; } if (rc && (imap_exec (idata, NULL, 0) != IMAP_CMD_OK)) { if (ctx->closing) { if (mutt_yesorno (_("Error saving flags. Close anyway?"), 0) == M_YES) { rc = 0; idata->state = IMAP_AUTHENTICATED; goto out; } } else mutt_error _("Error saving flags"); goto out; } for (n = 0; n < ctx->msgcount; n++) ctx->hdrs[n]->changed = 0; ctx->changed = 0; /* We must send an EXPUNGE command if we're not closing. */ if (expunge && !(ctx->closing) && mutt_bit_isset(ctx->rights, M_ACL_DELETE)) { mutt_message _("Expunging messages from server..."); /* Set expunge bit so we don't get spurious reopened messages */ idata->reopen |= IMAP_EXPUNGE_EXPECTED; if (imap_exec (idata, "EXPUNGE", 0) != 0) { imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->buf); rc = -1; goto out; } } if (expunge && ctx->closing) { imap_exec (idata, "CLOSE", IMAP_CMD_QUEUE); idata->state = IMAP_AUTHENTICATED; } if (option (OPTMESSAGECACHECLEAN)) imap_cache_clean (idata); rc = 0; out: if (appendctx) { mx_fastclose_mailbox (appendctx); FREE (&appendctx); } return rc; } /* imap_close_mailbox: clean up IMAP data in CONTEXT */ int imap_close_mailbox (CONTEXT* ctx) { IMAP_DATA* idata; int i; idata = (IMAP_DATA*) ctx->data; /* Check to see if the mailbox is actually open */ if (!idata) return 0; if (ctx == idata->ctx) { if (idata->status != IMAP_FATAL && idata->state >= IMAP_SELECTED) { /* mx_close_mailbox won't sync if there are no deleted messages * and the mailbox is unchanged, so we may have to close here */ if (!ctx->deleted) imap_exec (idata, "CLOSE", IMAP_CMD_QUEUE); idata->state = IMAP_AUTHENTICATED; } idata->reopen &= IMAP_REOPEN_ALLOW; FREE (&(idata->mailbox)); mutt_free_list (&idata->flags); idata->ctx = NULL; } /* free IMAP part of headers */ for (i = 0; i < ctx->msgcount; i++) /* mailbox may not have fully loaded */ if (ctx->hdrs[i] && ctx->hdrs[i]->data) imap_free_header_data (&(ctx->hdrs[i]->data)); for (i = 0; i < IMAP_CACHE_LEN; i++) { if (idata->cache[i].path) { unlink (idata->cache[i].path); FREE (&idata->cache[i].path); } } mutt_bcache_close (&idata->bcache); return 0; } /* use the NOOP or IDLE command to poll for new mail * * return values: * M_REOPENED mailbox has been externally modified * M_NEW_MAIL new mail has arrived! * 0 no change * -1 error */ int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force) { /* overload keyboard timeout to avoid many mailbox checks in a row. * Most users don't like having to wait exactly when they press a key. */ IMAP_DATA* idata; int result = 0; idata = (IMAP_DATA*) ctx->data; /* try IDLE first, unless force is set */ if (!force && option (OPTIMAPIDLE) && mutt_bit_isset (idata->capabilities, IDLE) && (idata->state != IMAP_IDLE || time(NULL) >= idata->lastread + ImapKeepalive)) { if (imap_cmd_idle (idata) < 0) return -1; } if (idata->state == IMAP_IDLE) { while ((result = mutt_socket_poll (idata->conn)) > 0) { if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) { dprint (1, (debugfile, "Error reading IDLE response\n")); return -1; } } if (result < 0) { dprint (1, (debugfile, "Poll failed, disabling IDLE\n")); mutt_bit_unset (idata->capabilities, IDLE); } } if ((force || (idata->state != IMAP_IDLE && time(NULL) >= idata->lastread + Timeout)) && imap_exec (idata, "NOOP", 0) != 0) return -1; /* We call this even when we haven't run NOOP in case we have pending * changes to process, since we can reopen here. */ imap_cmd_finish (idata); if (idata->check_status & IMAP_EXPUNGE_PENDING) result = M_REOPENED; else if (idata->check_status & IMAP_NEWMAIL_PENDING) result = M_NEW_MAIL; else if (idata->check_status & IMAP_FLAGS_PENDING) result = M_FLAGS; idata->check_status = 0; return result; } /* split path into (idata,mailbox name) */ static int imap_get_mailbox (const char* path, IMAP_DATA** hidata, char* buf, size_t blen) { IMAP_MBOX mx; if (imap_parse_path (path, &mx)) { dprint (1, (debugfile, "imap_get_mailbox: Error parsing %s\n", path)); return -1; } if (!(*hidata = imap_conn_find (&(mx.account), option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0)) || (*hidata)->state < IMAP_AUTHENTICATED) { FREE (&mx.mbox); return -1; } imap_fix_path (*hidata, mx.mbox, buf, blen); if (!*buf) strfcpy (buf, "INBOX", blen); FREE (&mx.mbox); return 0; } /* check for new mail in any subscribed mailboxes. Given a list of mailboxes * rather than called once for each so that it can batch the commands and * save on round trips. Returns number of mailboxes with new mail. */ int imap_buffy_check (int force) { IMAP_DATA* idata; IMAP_DATA* lastdata = NULL; BUFFY* mailbox; char name[LONG_STRING]; char command[LONG_STRING]; char munged[LONG_STRING]; int buffies = 0; for (mailbox = Incoming; mailbox; mailbox = mailbox->next) { /* Init newly-added mailboxes */ if (! mailbox->magic) { if (mx_is_imap (mailbox->path)) mailbox->magic = M_IMAP; } if (mailbox->magic != M_IMAP) continue; mailbox->new = 0; if (imap_get_mailbox (mailbox->path, &idata, name, sizeof (name)) < 0) continue; /* Don't issue STATUS on the selected mailbox, it will be NOOPed or * IDLEd elsewhere. * idata->mailbox may be NULL for connections other than the current * mailbox's, and shouldn't expand to INBOX in that case. #3216. */ if (idata->mailbox && !imap_mxcmp (name, idata->mailbox)) continue; if (!mutt_bit_isset (idata->capabilities, IMAP4REV1) && !mutt_bit_isset (idata->capabilities, STATUS)) { dprint (2, (debugfile, "Server doesn't support STATUS\n")); continue; } if (lastdata && idata != lastdata) { /* Send commands to previous server. Sorting the buffy list * may prevent some infelicitous interleavings */ if (imap_exec (lastdata, NULL, IMAP_CMD_FAIL_OK) == -1) dprint (1, (debugfile, "Error polling mailboxes\n")); lastdata = NULL; } if (!lastdata) lastdata = idata; imap_munge_mbox_name (munged, sizeof (munged), name); snprintf (command, sizeof (command), "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) { dprint (1, (debugfile, "Error queueing command\n")); return 0; } } if (lastdata && (imap_exec (lastdata, NULL, IMAP_CMD_FAIL_OK) == -1)) { dprint (1, (debugfile, "Error polling mailboxes\n")); return 0; } /* collect results */ for (mailbox = Incoming; mailbox; mailbox = mailbox->next) { if (mailbox->magic == M_IMAP && mailbox->new) buffies++; } return buffies; } /* imap_status: returns count of messages in mailbox, or -1 on error. * if queue != 0, queue the command and expect it to have been run * on the next call (for pipelining the postponed count) */ int imap_status (char* path, int queue) { static int queued = 0; IMAP_DATA *idata; char buf[LONG_STRING]; char mbox[LONG_STRING]; IMAP_STATUS* status; if (imap_get_mailbox (path, &idata, buf, sizeof (buf)) < 0) return -1; if (!imap_mxcmp (buf, idata->mailbox)) /* We are in the folder we're polling - just return the mailbox count */ return idata->ctx->msgcount; else if (mutt_bit_isset(idata->capabilities,IMAP4REV1) || mutt_bit_isset(idata->capabilities,STATUS)) { imap_munge_mbox_name (mbox, sizeof(mbox), buf); snprintf (buf, sizeof (buf), "STATUS %s (%s)", mbox, "MESSAGES"); imap_unmunge_mbox_name (mbox); } else /* Server does not support STATUS, and this is not the current mailbox. * There is no lightweight way to check recent arrivals */ return -1; if (queue) { imap_exec (idata, buf, IMAP_CMD_QUEUE); queued = 1; return 0; } else if (!queued) imap_exec (idata, buf, 0); queued = 0; if ((status = imap_mboxcache_get (idata, mbox, 0))) return status->messages; return 0; } /* return cached mailbox stats or NULL if create is 0 */ IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox, int create) { LIST* cur; IMAP_STATUS* status; IMAP_STATUS scache; #ifdef USE_HCACHE header_cache_t *hc = NULL; unsigned int *uidvalidity = NULL; unsigned int *uidnext = NULL; #endif for (cur = idata->mboxcache; cur; cur = cur->next) { status = (IMAP_STATUS*)cur->data; if (!imap_mxcmp (mbox, status->name)) return status; } status = NULL; /* lame */ if (create) { memset (&scache, 0, sizeof (scache)); scache.name = (char*)mbox; idata->mboxcache = mutt_add_list_n (idata->mboxcache, &scache, sizeof (scache)); status = imap_mboxcache_get (idata, mbox, 0); status->name = safe_strdup (mbox); } #ifdef USE_HCACHE hc = imap_hcache_open (idata, mbox); if (hc) { uidvalidity = mutt_hcache_fetch_raw (hc, "/UIDVALIDITY", imap_hcache_keylen); uidnext = mutt_hcache_fetch_raw (hc, "/UIDNEXT", imap_hcache_keylen); mutt_hcache_close (hc); if (uidvalidity) { if (!status) { FREE (&uidvalidity); FREE (&uidnext); return imap_mboxcache_get (idata, mbox, 1); } status->uidvalidity = *uidvalidity; status->uidnext = uidnext ? *uidnext: 0; dprint (3, (debugfile, "mboxcache: hcache uidvalidity %d, uidnext %d\n", status->uidvalidity, status->uidnext)); } FREE (&uidvalidity); FREE (&uidnext); } #endif return status; } void imap_mboxcache_free (IMAP_DATA* idata) { LIST* cur; IMAP_STATUS* status; for (cur = idata->mboxcache; cur; cur = cur->next) { status = (IMAP_STATUS*)cur->data; FREE (&status->name); } mutt_free_list (&idata->mboxcache); } /* returns number of patterns in the search that should be done server-side * (eg are full-text) */ static int do_search (const pattern_t* search, int allpats) { int rc = 0; const pattern_t* pat; for (pat = search; pat; pat = pat->next) { switch (pat->op) { case M_BODY: case M_HEADER: case M_WHOLE_MSG: if (pat->stringmatch) rc++; break; default: if (pat->child && do_search (pat->child, 1)) rc++; } if (!allpats) break; } return rc; } /* convert mutt pattern_t to IMAP SEARCH command containing only elements * that require full-text search (mutt already has what it needs for most * match types, and does a better job (eg server doesn't support regexps). */ static int imap_compile_search (const pattern_t* pat, BUFFER* buf) { if (! do_search (pat, 0)) return 0; if (pat->not) mutt_buffer_addstr (buf, "NOT "); if (pat->child) { int clauses; if ((clauses = do_search (pat->child, 1)) > 0) { const pattern_t* clause = pat->child; mutt_buffer_addch (buf, '('); while (clauses) { if (do_search (clause, 0)) { if (pat->op == M_OR && clauses > 1) mutt_buffer_addstr (buf, "OR "); clauses--; if (imap_compile_search (clause, buf) < 0) return -1; if (clauses) mutt_buffer_addch (buf, ' '); } clause = clause->next; } mutt_buffer_addch (buf, ')'); } } else { char term[STRING]; char *delim; switch (pat->op) { case M_HEADER: mutt_buffer_addstr (buf, "HEADER "); /* extract header name */ if (! (delim = strchr (pat->p.str, ':'))) { mutt_error (_("Header search without header name: %s"), pat->p.str); return -1; } *delim = '\0'; imap_quote_string (term, sizeof (term), pat->p.str); mutt_buffer_addstr (buf, term); mutt_buffer_addch (buf, ' '); /* and field */ *delim = ':'; delim++; SKIPWS(delim); imap_quote_string (term, sizeof (term), delim); mutt_buffer_addstr (buf, term); break; case M_BODY: mutt_buffer_addstr (buf, "BODY "); imap_quote_string (term, sizeof (term), pat->p.str); mutt_buffer_addstr (buf, term); break; case M_WHOLE_MSG: mutt_buffer_addstr (buf, "TEXT "); imap_quote_string (term, sizeof (term), pat->p.str); mutt_buffer_addstr (buf, term); break; } } return 0; } int imap_search (CONTEXT* ctx, const pattern_t* pat) { BUFFER buf; IMAP_DATA* idata = (IMAP_DATA*)ctx->data; int i; for (i = 0; i < ctx->msgcount; i++) ctx->hdrs[i]->matched = 0; if (!do_search (pat, 1)) return 0; memset (&buf, 0, sizeof (buf)); mutt_buffer_addstr (&buf, "UID SEARCH "); if (imap_compile_search (pat, &buf) < 0) { FREE (&buf.data); return -1; } if (imap_exec (idata, buf.data, 0) < 0) { FREE (&buf.data); return -1; } FREE (&buf.data); return 0; } int imap_subscribe (char *path, int subscribe) { CONNECTION *conn; IMAP_DATA *idata; char buf[LONG_STRING]; char mbox[LONG_STRING]; char errstr[STRING]; BUFFER err, token; IMAP_MBOX mx; if (!mx_is_imap (path) || imap_parse_path (path, &mx) || !mx.mbox) { mutt_error (_("Bad mailbox name")); return -1; } if (!(idata = imap_conn_find (&(mx.account), 0))) goto fail; conn = idata->conn; imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); if (!*buf) strfcpy (buf, "INBOX", sizeof (buf)); if (option (OPTIMAPCHECKSUBSCRIBED)) { memset (&token, 0, sizeof (token)); err.data = errstr; err.dsize = sizeof (errstr); snprintf (mbox, sizeof (mbox), "%smailboxes \"%s\"", subscribe ? "" : "un", path); if (mutt_parse_rc_line (mbox, &token, &err)) dprint (1, (debugfile, "Error adding subscribed mailbox: %s\n", errstr)); FREE (&token.data); } if (subscribe) mutt_message (_("Subscribing to %s..."), buf); else mutt_message (_("Unsubscribing from %s..."), buf); imap_munge_mbox_name (mbox, sizeof(mbox), buf); snprintf (buf, sizeof (buf), "%sSUBSCRIBE %s", subscribe ? "" : "UN", mbox); if (imap_exec (idata, buf, 0) < 0) goto fail; imap_unmunge_mbox_name(mx.mbox); if (subscribe) mutt_message (_("Subscribed to %s"), mx.mbox); else mutt_message (_("Unsubscribed from %s"), mx.mbox); FREE (&mx.mbox); return 0; fail: FREE (&mx.mbox); return -1; } /* trim dest to the length of the longest prefix it shares with src, * returning the length of the trimmed string */ static int longest_common_prefix (char *dest, const char* src, int start, size_t dlen) { int pos = start; while (pos < dlen && dest[pos] && dest[pos] == src[pos]) pos++; dest[pos] = '\0'; return pos; } /* look for IMAP URLs to complete from defined mailboxes. Could be extended * to complete over open connections and account/folder hooks too. */ static int imap_complete_hosts (char *dest, size_t len) { BUFFY* mailbox; CONNECTION* conn; int rc = -1; int matchlen; matchlen = mutt_strlen (dest); for (mailbox = Incoming; mailbox; mailbox = mailbox->next) { if (!mutt_strncmp (dest, mailbox->path, matchlen)) { if (rc) { strfcpy (dest, mailbox->path, len); rc = 0; } else longest_common_prefix (dest, mailbox->path, matchlen, len); } } for (conn = mutt_socket_head (); conn; conn = conn->next) { ciss_url_t url; char urlstr[LONG_STRING]; if (conn->account.type != M_ACCT_TYPE_IMAP) continue; mutt_account_tourl (&conn->account, &url); /* FIXME: how to handle multiple users on the same host? */ url.user = NULL; url.path = NULL; url_ciss_tostring (&url, urlstr, sizeof (urlstr), 0); if (!mutt_strncmp (dest, urlstr, matchlen)) { if (rc) { strfcpy (dest, urlstr, len); rc = 0; } else longest_common_prefix (dest, urlstr, matchlen, len); } } return rc; } /* imap_complete: given a partial IMAP folder path, return a string which * adds as much to the path as is unique */ int imap_complete(char* dest, size_t dlen, char* path) { CONNECTION* conn; IMAP_DATA* idata; char list[LONG_STRING]; char buf[LONG_STRING]; IMAP_LIST listresp; char completion[LONG_STRING]; int clen, matchlen = 0; int completions = 0; IMAP_MBOX mx; int rc; if (imap_parse_path (path, &mx)) { strfcpy (dest, path, dlen); return imap_complete_hosts (dest, dlen); } /* don't open a new socket just for completion. Instead complete over * known mailboxes/hooks/etc */ if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NONEW))) { FREE (&mx.mbox); strfcpy (dest, path, dlen); return imap_complete_hosts (dest, dlen); } conn = idata->conn; /* reformat path for IMAP list, and append wildcard */ /* don't use INBOX in place of "" */ if (mx.mbox && mx.mbox[0]) imap_fix_path (idata, mx.mbox, list, sizeof(list)); else list[0] = '\0'; /* fire off command */ snprintf (buf, sizeof(buf), "%s \"\" \"%s%%\"", option (OPTIMAPLSUB) ? "LSUB" : "LIST", list); imap_cmd_start (idata, buf); /* and see what the results are */ strfcpy (completion, NONULL(mx.mbox), sizeof(completion)); idata->cmdtype = IMAP_CT_LIST; idata->cmddata = &listresp; do { listresp.name = NULL; rc = imap_cmd_step (idata); if (rc == IMAP_CMD_CONTINUE && listresp.name) { /* if the folder isn't selectable, append delimiter to force browse * to enter it on second tab. */ if (listresp.noselect) { clen = strlen(listresp.name); listresp.name[clen++] = listresp.delim; listresp.name[clen] = '\0'; } /* copy in first word */ if (!completions) { strfcpy (completion, listresp.name, sizeof(completion)); matchlen = strlen (completion); completions++; continue; } matchlen = longest_common_prefix (completion, listresp.name, 0, matchlen); completions++; } } while (rc == IMAP_CMD_CONTINUE); idata->cmddata = NULL; if (completions) { /* reformat output */ imap_qualify_path (dest, dlen, &mx, completion); mutt_pretty_mailbox (dest, dlen); FREE (&mx.mbox); return 0; } return -1; } mutt-1.5.21/imap/imap.h0000644000175000017500000000476511130456625011556 00000000000000/* * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 2000-7 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _IMAP_H #define _IMAP_H 1 #include "account.h" #include "browser.h" #include "mailbox.h" /* -- data structures -- */ typedef struct { ACCOUNT account; char* mbox; } IMAP_MBOX; /* imap.c */ int imap_access (const char*, int); int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force); int imap_delete_mailbox (CONTEXT* idata, IMAP_MBOX mx); int imap_open_mailbox (CONTEXT *ctx); int imap_open_mailbox_append (CONTEXT *ctx); int imap_sync_mailbox (CONTEXT *ctx, int expunge, int *index_hint); int imap_close_mailbox (CONTEXT *ctx); int imap_buffy_check (int force); int imap_status (char *path, int queue); int imap_search (CONTEXT* ctx, const pattern_t* pat); int imap_subscribe (char *path, int subscribe); int imap_complete (char* dest, size_t dlen, char* path); void imap_allow_reopen (CONTEXT *ctx); void imap_disallow_reopen (CONTEXT *ctx); /* browse.c */ int imap_browse (char* path, struct browser_state* state); int imap_mailbox_state (const char* path, struct mailbox_state* state); int imap_mailbox_create (const char* folder); int imap_mailbox_rename (const char* mailbox); /* message.c */ int imap_append_message (CONTEXT* ctx, MESSAGE* msg); int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete); int imap_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno); /* socket.c */ void imap_logout_all (void); /* util.c */ int imap_expand_path (char* path, size_t len); int imap_parse_path (const char* path, IMAP_MBOX* mx); void imap_pretty_mailbox (char* path); int imap_wait_keepalive (pid_t pid); void imap_keepalive (void); int imap_account_match (const ACCOUNT* a1, const ACCOUNT* a2); #endif mutt-1.5.21/imap/message.c0000644000175000017500000010241511434772215012241 00000000000000/* * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2009 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ /* message parsing/updating functions */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include "mutt.h" #include "imap_private.h" #include "message.h" #include "mx.h" #ifdef HAVE_PGP #include "pgp.h" #endif #if USE_HCACHE #include "hcache.h" #endif #include "bcache.h" static FILE* msg_cache_get (IMAP_DATA* idata, HEADER* h); static FILE* msg_cache_put (IMAP_DATA* idata, HEADER* h); static int msg_cache_commit (IMAP_DATA* idata, HEADER* h); static void flush_buffer(char* buf, size_t* len, CONNECTION* conn); static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf, FILE* fp); static int msg_parse_fetch (IMAP_HEADER* h, char* s); static char* msg_parse_flags (IMAP_HEADER* h, char* s); /* imap_read_headers: * Changed to read many headers instead of just one. It will return the * msgno of the last message read. It will return a value other than * msgend if mail comes in while downloading headers (in theory). */ int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend) { CONTEXT* ctx; char buf[LONG_STRING]; char *hdrreq = NULL; FILE *fp; char tempfile[_POSIX_PATH_MAX]; int msgno, idx; IMAP_HEADER h; IMAP_STATUS* status; int rc, mfhrc, oldmsgcount; int fetchlast = 0; int maxuid = 0; const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL"; progress_t progress; int retval = -1; #if USE_HCACHE unsigned int *uid_validity = NULL; unsigned int *puidnext = NULL; unsigned int uidnext = 0; int evalhc = 0; #endif /* USE_HCACHE */ ctx = idata->ctx; if (mutt_bit_isset (idata->capabilities,IMAP4REV1)) { safe_asprintf (&hdrreq, "BODY.PEEK[HEADER.FIELDS (%s%s%s)]", want_headers, ImapHeaders ? " " : "", NONULL (ImapHeaders)); } else if (mutt_bit_isset (idata->capabilities,IMAP4)) { safe_asprintf (&hdrreq, "RFC822.HEADER.LINES (%s%s%s)", want_headers, ImapHeaders ? " " : "", NONULL (ImapHeaders)); } else { /* Unable to fetch headers for lower versions */ mutt_error _("Unable to fetch headers from this IMAP server version."); mutt_sleep (2); /* pause a moment to let the user see the error */ goto error_out_0; } /* instead of downloading all headers and then parsing them, we parse them * as they come in. */ mutt_mktemp (tempfile, sizeof (tempfile)); if (!(fp = safe_fopen (tempfile, "w+"))) { mutt_error (_("Could not create temporary file %s"), tempfile); mutt_sleep (2); goto error_out_0; } unlink (tempfile); /* make sure context has room to hold the mailbox */ while ((msgend) >= idata->ctx->hdrmax) mx_alloc_memory (idata->ctx); oldmsgcount = ctx->msgcount; idata->reopen &= ~(IMAP_REOPEN_ALLOW|IMAP_NEWMAIL_PENDING); idata->newMailCount = 0; #if USE_HCACHE idata->hcache = imap_hcache_open (idata, NULL); if (idata->hcache && !msgbegin) { uid_validity = mutt_hcache_fetch_raw (idata->hcache, "/UIDVALIDITY", imap_hcache_keylen); puidnext = mutt_hcache_fetch_raw (idata->hcache, "/UIDNEXT", imap_hcache_keylen); if (puidnext) { uidnext = *puidnext; FREE (&puidnext); } if (uid_validity && uidnext && *uid_validity == idata->uid_validity) evalhc = 1; FREE (&uid_validity); } if (evalhc) { mutt_progress_init (&progress, _("Evaluating cache..."), M_PROGRESS_MSG, ReadInc, msgend + 1); snprintf (buf, sizeof (buf), "UID FETCH 1:%u (UID FLAGS)", uidnext - 1); imap_cmd_start (idata, buf); rc = IMAP_CMD_CONTINUE; for (msgno = msgbegin; rc == IMAP_CMD_CONTINUE; msgno++) { mutt_progress_update (&progress, msgno + 1, -1); memset (&h, 0, sizeof (h)); h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA)); do { mfhrc = 0; rc = imap_cmd_step (idata); if (rc != IMAP_CMD_CONTINUE) { /* suppress GCC aliasing warning */ imap_free_header_data ((void**) (void*) &h.data); break; } /* hole in the header cache */ if (!evalhc) continue; if ((mfhrc = msg_fetch_header (ctx, &h, idata->buf, NULL)) == -1) continue; else if (mfhrc < 0) { imap_free_header_data ((void**) (void*) &h.data); break; } if (!h.data->uid) { dprint (2, (debugfile, "imap_read_headers: skipping hcache FETCH " "response for unknown message number %d\n", h.sid)); mfhrc = -1; continue; } idx = h.sid - 1; ctx->hdrs[idx] = imap_hcache_get (idata, h.data->uid); if (ctx->hdrs[idx]) { ctx->hdrs[idx]->index = idx; /* messages which have not been expunged are ACTIVE (borrowed from mh * folders) */ ctx->hdrs[idx]->active = 1; ctx->hdrs[idx]->read = h.data->read; ctx->hdrs[idx]->old = h.data->old; ctx->hdrs[idx]->deleted = h.data->deleted; ctx->hdrs[idx]->flagged = h.data->flagged; ctx->hdrs[idx]->replied = h.data->replied; ctx->hdrs[idx]->changed = h.data->changed; /* ctx->hdrs[msgno]->received is restored from mutt_hcache_restore */ ctx->hdrs[idx]->data = (void *) (h.data); ctx->msgcount++; ctx->size += ctx->hdrs[idx]->content->length; } else { /* bad header in the cache, we'll have to refetch. */ dprint (3, (debugfile, "bad cache entry at %d, giving up\n", h.sid - 1)); imap_free_header_data((void**) (void*) &h.data); evalhc = 0; } } while (rc != IMAP_CMD_OK && mfhrc == -1); if (rc == IMAP_CMD_OK) break; if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) { if (h.data) imap_free_header_data ((void**) (void*) &h.data); imap_hcache_close (idata); goto error_out_1; } } /* could also look for first null header in case hcache is holey */ msgbegin = ctx->msgcount; } #endif /* USE_HCACHE */ mutt_progress_init (&progress, _("Fetching message headers..."), M_PROGRESS_MSG, ReadInc, msgend + 1); for (msgno = msgbegin; msgno <= msgend ; msgno++) { mutt_progress_update (&progress, msgno + 1, -1); /* we may get notification of new mail while fetching headers */ if (msgno + 1 > fetchlast) { char *cmd; fetchlast = msgend + 1; safe_asprintf (&cmd, "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1, fetchlast, hdrreq); imap_cmd_start (idata, cmd); FREE (&cmd); } rewind (fp); memset (&h, 0, sizeof (h)); h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA)); /* this DO loop does two things: * 1. handles untagged messages, so we can try again on the same msg * 2. fetches the tagged response at the end of the last message. */ do { mfhrc = 0; rc = imap_cmd_step (idata); if (rc != IMAP_CMD_CONTINUE) break; if ((mfhrc = msg_fetch_header (ctx, &h, idata->buf, fp)) == -1) continue; else if (mfhrc < 0) break; if (!ftello (fp)) { dprint (2, (debugfile, "msg_fetch_header: ignoring fetch response with no body\n")); mfhrc = -1; continue; } /* make sure we don't get remnants from older larger message headers */ fputs ("\n\n", fp); idx = h.sid - 1; if (idx > msgend) { dprint (1, (debugfile, "imap_read_headers: skipping FETCH response for " "unknown message number %d\n", h.sid)); mfhrc = -1; continue; } /* May receive FLAGS updates in a separate untagged response (#2935) */ if (idx < ctx->msgcount) { dprint (2, (debugfile, "imap_read_headers: message %d is not new\n", h.sid)); continue; } ctx->hdrs[idx] = mutt_new_header (); ctx->hdrs[idx]->index = h.sid - 1; /* messages which have not been expunged are ACTIVE (borrowed from mh * folders) */ ctx->hdrs[idx]->active = 1; ctx->hdrs[idx]->read = h.data->read; ctx->hdrs[idx]->old = h.data->old; ctx->hdrs[idx]->deleted = h.data->deleted; ctx->hdrs[idx]->flagged = h.data->flagged; ctx->hdrs[idx]->replied = h.data->replied; ctx->hdrs[idx]->changed = h.data->changed; ctx->hdrs[idx]->received = h.received; ctx->hdrs[idx]->data = (void *) (h.data); if (maxuid < h.data->uid) maxuid = h.data->uid; rewind (fp); /* NOTE: if Date: header is missing, mutt_read_rfc822_header depends * on h.received being set */ ctx->hdrs[idx]->env = mutt_read_rfc822_header (fp, ctx->hdrs[idx], 0, 0); /* content built as a side-effect of mutt_read_rfc822_header */ ctx->hdrs[idx]->content->length = h.content_length; ctx->size += h.content_length; #if USE_HCACHE imap_hcache_put (idata, ctx->hdrs[idx]); #endif /* USE_HCACHE */ ctx->msgcount++; } while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) || ((msgno + 1) >= fetchlast))); if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) { if (h.data) imap_free_header_data ((void**) (void*) &h.data); #if USE_HCACHE imap_hcache_close (idata); #endif goto error_out_1; } /* in case we get new mail while fetching the headers */ if (idata->reopen & IMAP_NEWMAIL_PENDING) { msgend = idata->newMailCount - 1; while ((msgend) >= ctx->hdrmax) mx_alloc_memory (ctx); idata->reopen &= ~IMAP_NEWMAIL_PENDING; idata->newMailCount = 0; } } if (maxuid && (status = imap_mboxcache_get (idata, idata->mailbox, 0))) status->uidnext = maxuid + 1; #if USE_HCACHE mutt_hcache_store_raw (idata->hcache, "/UIDVALIDITY", &idata->uid_validity, sizeof (idata->uid_validity), imap_hcache_keylen); if (maxuid && idata->uidnext < maxuid + 1) { dprint (2, (debugfile, "Overriding UIDNEXT: %u -> %u\n", idata->uidnext, maxuid + 1)); idata->uidnext = maxuid + 1; } if (idata->uidnext > 1) mutt_hcache_store_raw (idata->hcache, "/UIDNEXT", &idata->uidnext, sizeof (idata->uidnext), imap_hcache_keylen); imap_hcache_close (idata); #endif /* USE_HCACHE */ if (ctx->msgcount > oldmsgcount) { mx_alloc_memory(ctx); mx_update_context (ctx, ctx->msgcount - oldmsgcount); } idata->reopen |= IMAP_REOPEN_ALLOW; retval = msgend; error_out_1: safe_fclose (&fp); error_out_0: FREE (&hdrreq); return retval; } int imap_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno) { IMAP_DATA* idata; HEADER* h; ENVELOPE* newenv; char buf[LONG_STRING]; char path[_POSIX_PATH_MAX]; char *pc; long bytes; progress_t progressbar; int uid; int cacheno; IMAP_CACHE *cache; int read; int rc; /* Sam's weird courier server returns an OK response even when FETCH * fails. Thanks Sam. */ short fetched = 0; idata = (IMAP_DATA*) ctx->data; h = ctx->hdrs[msgno]; if ((msg->fp = msg_cache_get (idata, h))) { if (HEADER_DATA(h)->parsed) return 0; else goto parsemsg; } /* we still do some caching even if imap_cachedir is unset */ /* see if we already have the message in our cache */ cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN; cache = &idata->cache[cacheno]; if (cache->path) { /* don't treat cache errors as fatal, just fall back. */ if (cache->uid == HEADER_DATA(h)->uid && (msg->fp = fopen (cache->path, "r"))) return 0; else { unlink (cache->path); FREE (&cache->path); } } if (!isendwin()) mutt_message _("Fetching message..."); if (!(msg->fp = msg_cache_put (idata, h))) { cache->uid = HEADER_DATA(h)->uid; mutt_mktemp (path, sizeof (path)); cache->path = safe_strdup (path); if (!(msg->fp = safe_fopen (path, "w+"))) { FREE (&cache->path); return -1; } } /* mark this header as currently inactive so the command handler won't * also try to update it. HACK until all this code can be moved into the * command handler */ h->active = 0; snprintf (buf, sizeof (buf), "UID FETCH %u %s", HEADER_DATA(h)->uid, (mutt_bit_isset (idata->capabilities, IMAP4REV1) ? (option (OPTIMAPPEEK) ? "BODY.PEEK[]" : "BODY[]") : "RFC822")); imap_cmd_start (idata, buf); do { if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; pc = idata->buf; pc = imap_next_word (pc); pc = imap_next_word (pc); if (!ascii_strncasecmp ("FETCH", pc, 5)) { while (*pc) { pc = imap_next_word (pc); if (pc[0] == '(') pc++; if (ascii_strncasecmp ("UID", pc, 3) == 0) { pc = imap_next_word (pc); uid = atoi (pc); if (uid != HEADER_DATA(h)->uid) mutt_error (_("The message index is incorrect. Try reopening the mailbox.")); } else if ((ascii_strncasecmp ("RFC822", pc, 6) == 0) || (ascii_strncasecmp ("BODY[]", pc, 6) == 0)) { pc = imap_next_word (pc); if (imap_get_literal_count(pc, &bytes) < 0) { imap_error ("imap_fetch_message()", buf); goto bail; } mutt_progress_init (&progressbar, _("Fetching message..."), M_PROGRESS_SIZE, NetInc, bytes); if (imap_read_literal (msg->fp, idata, bytes, &progressbar) < 0) goto bail; /* pick up trailing line */ if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) goto bail; pc = idata->buf; fetched = 1; } /* UW-IMAP will provide a FLAGS update here if the FETCH causes a * change (eg from \Unseen to \Seen). * Uncommitted changes in mutt take precedence. If we decide to * incrementally update flags later, this won't stop us syncing */ else if ((ascii_strncasecmp ("FLAGS", pc, 5) == 0) && !h->changed) { if ((pc = imap_set_flags (idata, h, pc)) == NULL) goto bail; } } } } while (rc == IMAP_CMD_CONTINUE); /* see comment before command start. */ h->active = 1; fflush (msg->fp); if (ferror (msg->fp)) { mutt_perror (cache->path); goto bail; } if (rc != IMAP_CMD_OK) goto bail; if (!fetched || !imap_code (idata->buf)) goto bail; msg_cache_commit (idata, h); parsemsg: /* Update the header information. Previously, we only downloaded a * portion of the headers, those required for the main display. */ rewind (msg->fp); /* It may be that the Status header indicates a message is read, but the * IMAP server doesn't know the message has been \Seen. So we capture * the server's notion of 'read' and if it differs from the message info * picked up in mutt_read_rfc822_header, we mark the message (and context * changed). Another possiblity: ignore Status on IMAP?*/ read = h->read; newenv = mutt_read_rfc822_header (msg->fp, h, 0, 0); mutt_merge_envelopes(h->env, &newenv); /* see above. We want the new status in h->read, so we unset it manually * and let mutt_set_flag set it correctly, updating context. */ if (read != h->read) { h->read = read; mutt_set_flag (ctx, h, M_NEW, read); } h->lines = 0; fgets (buf, sizeof (buf), msg->fp); while (!feof (msg->fp)) { h->lines++; fgets (buf, sizeof (buf), msg->fp); } h->content->length = ftell (msg->fp) - h->content->offset; /* This needs to be done in case this is a multipart message */ #if defined(HAVE_PGP) || defined(HAVE_SMIME) h->security = crypt_query (h->content); #endif mutt_clear_error(); rewind (msg->fp); HEADER_DATA(h)->parsed = 1; return 0; bail: safe_fclose (&msg->fp); imap_cache_del (idata, h); if (cache->path) { unlink (cache->path); FREE (&cache->path); } return -1; } int imap_append_message (CONTEXT *ctx, MESSAGE *msg) { IMAP_DATA* idata; FILE *fp; char buf[LONG_STRING]; char mbox[LONG_STRING]; char mailbox[LONG_STRING]; char internaldate[IMAP_DATELEN]; size_t len; progress_t progressbar; size_t sent; int c, last; IMAP_MBOX mx; int rc; idata = (IMAP_DATA*) ctx->data; if (imap_parse_path (ctx->path, &mx)) return -1; imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); if (!*mailbox) strfcpy (mailbox, "INBOX", sizeof (mailbox)); if ((fp = fopen (msg->path, "r")) == NULL) { mutt_perror (msg->path); goto fail; } /* currently we set the \Seen flag on all messages, but probably we * should scan the message Status header for flag info. Since we're * already rereading the whole file for length it isn't any more * expensive (it'd be nice if we had the file size passed in already * by the code that writes the file, but that's a lot of changes. * Ideally we'd have a HEADER structure with flag info here... */ for (last = EOF, len = 0; (c = fgetc(fp)) != EOF; last = c) { if(c == '\n' && last != '\r') len++; len++; } rewind (fp); mutt_progress_init (&progressbar, _("Uploading message..."), M_PROGRESS_SIZE, NetInc, len); imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); imap_make_date (internaldate, msg->received); snprintf (buf, sizeof (buf), "APPEND %s (%s%s%s%s%s) \"%s\" {%lu}", mbox, msg->flags.read ? "\\Seen" : "", msg->flags.read && (msg->flags.replied || msg->flags.flagged) ? " " : "", msg->flags.replied ? "\\Answered" : "", msg->flags.replied && msg->flags.flagged ? " " : "", msg->flags.flagged ? "\\Flagged" : "", internaldate, (unsigned long) len); imap_cmd_start (idata, buf); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { char *pc; dprint (1, (debugfile, "imap_append_message(): command failed: %s\n", idata->buf)); pc = idata->buf + SEQLEN; SKIPWS (pc); pc = imap_next_word (pc); mutt_error ("%s", pc); mutt_sleep (1); safe_fclose (&fp); goto fail; } for (last = EOF, sent = len = 0; (c = fgetc(fp)) != EOF; last = c) { if (c == '\n' && last != '\r') buf[len++] = '\r'; buf[len++] = c; if (len > sizeof(buf) - 3) { sent += len; flush_buffer(buf, &len, idata->conn); mutt_progress_update (&progressbar, sent, -1); } } if (len) flush_buffer(buf, &len, idata->conn); mutt_socket_write (idata->conn, "\r\n"); safe_fclose (&fp); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (!imap_code (idata->buf)) { char *pc; dprint (1, (debugfile, "imap_append_message(): command failed: %s\n", idata->buf)); pc = idata->buf + SEQLEN; SKIPWS (pc); pc = imap_next_word (pc); mutt_error ("%s", pc); mutt_sleep (1); goto fail; } FREE (&mx.mbox); return 0; fail: FREE (&mx.mbox); return -1; } /* imap_copy_messages: use server COPY command to copy messages to another * folder. * Return codes: * -1: error * 0: success * 1: non-fatal error - try fetch/append */ int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete) { IMAP_DATA* idata; BUFFER cmd, sync_cmd; char mbox[LONG_STRING]; char mmbox[LONG_STRING]; char prompt[LONG_STRING]; int rc; int n; IMAP_MBOX mx; int err_continue = M_NO; int triedcreate = 0; idata = (IMAP_DATA*) ctx->data; if (imap_parse_path (dest, &mx)) { dprint (1, (debugfile, "imap_copy_messages: bad destination %s\n", dest)); return -1; } /* check that the save-to folder is in the same account */ if (!mutt_account_match (&(CTX_DATA->conn->account), &(mx.account))) { dprint (3, (debugfile, "imap_copy_messages: %s not same server as %s\n", dest, ctx->path)); return 1; } if (h && h->attach_del) { dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n")); return 1; } imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox)); if (!*mbox) strfcpy (mbox, "INBOX", sizeof (mbox)); imap_munge_mbox_name (mmbox, sizeof (mmbox), mbox); /* loop in case of TRYCREATE */ do { memset (&sync_cmd, 0, sizeof (sync_cmd)); memset (&cmd, 0, sizeof (cmd)); /* Null HEADER* means copy tagged messages */ if (!h) { /* if any messages have attachments to delete, fall through to FETCH * and APPEND. TODO: Copy what we can with COPY, fall through for the * remainder. */ for (n = 0; n < ctx->msgcount; n++) { if (ctx->hdrs[n]->tagged && ctx->hdrs[n]->attach_del) { dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n")); return 1; } if (ctx->hdrs[n]->tagged && ctx->hdrs[n]->active && ctx->hdrs[n]->changed) { rc = imap_sync_message (idata, ctx->hdrs[n], &sync_cmd, &err_continue); if (rc < 0) { dprint (1, (debugfile, "imap_copy_messages: could not sync\n")); goto out; } } } rc = imap_exec_msgset (idata, "UID COPY", mmbox, M_TAG, 0, 0); if (!rc) { dprint (1, (debugfile, "imap_copy_messages: No messages tagged\n")); rc = -1; goto out; } else if (rc < 0) { dprint (1, (debugfile, "could not queue copy\n")); goto out; } else mutt_message (_("Copying %d messages to %s..."), rc, mbox); } else { mutt_message (_("Copying message %d to %s..."), h->index+1, mbox); mutt_buffer_printf (&cmd, "UID COPY %u %s", HEADER_DATA (h)->uid, mmbox); if (h->active && h->changed) { rc = imap_sync_message (idata, h, &sync_cmd, &err_continue); if (rc < 0) { dprint (1, (debugfile, "imap_copy_messages: could not sync\n")); goto out; } } if ((rc = imap_exec (idata, cmd.data, IMAP_CMD_QUEUE)) < 0) { dprint (1, (debugfile, "could not queue copy\n")); goto out; } } /* let's get it on */ rc = imap_exec (idata, NULL, IMAP_CMD_FAIL_OK); if (rc == -2) { if (triedcreate) { dprint (1, (debugfile, "Already tried to create mailbox %s\n", mbox)); break; } /* bail out if command failed for reasons other than nonexistent target */ if (ascii_strncasecmp (imap_get_qualifier (idata->buf), "[TRYCREATE]", 11)) break; dprint (3, (debugfile, "imap_copy_messages: server suggests TRYCREATE\n")); snprintf (prompt, sizeof (prompt), _("Create %s?"), mbox); if (option (OPTCONFIRMCREATE) && mutt_yesorno (prompt, 1) < 1) { mutt_clear_error (); goto out; } if (imap_create_mailbox (idata, mbox) < 0) break; triedcreate = 1; } } while (rc == -2); if (rc != 0) { imap_error ("imap_copy_messages", idata->buf); goto out; } /* cleanup */ if (delete) { if (!h) for (n = 0; n < ctx->msgcount; n++) { if (ctx->hdrs[n]->tagged) { mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1); if (option (OPTDELETEUNTAG)) mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0); } } else { mutt_set_flag (ctx, h, M_DELETE, 1); if (option (OPTDELETEUNTAG)) mutt_set_flag (ctx, h, M_TAG, 0); } } rc = 0; out: if (cmd.data) FREE (&cmd.data); if (sync_cmd.data) FREE (&sync_cmd.data); FREE (&mx.mbox); return rc < 0 ? -1 : rc; } static body_cache_t *msg_cache_open (IMAP_DATA *idata) { char mailbox[_POSIX_PATH_MAX]; if (idata->bcache) return idata->bcache; imap_cachepath (idata, idata->mailbox, mailbox, sizeof (mailbox)); return mutt_bcache_open (&idata->conn->account, mailbox); } static FILE* msg_cache_get (IMAP_DATA* idata, HEADER* h) { char id[_POSIX_PATH_MAX]; if (!idata || !h) return NULL; idata->bcache = msg_cache_open (idata); snprintf (id, sizeof (id), "%u-%u", idata->uid_validity, HEADER_DATA(h)->uid); return mutt_bcache_get (idata->bcache, id); } static FILE* msg_cache_put (IMAP_DATA* idata, HEADER* h) { char id[_POSIX_PATH_MAX]; if (!idata || !h) return NULL; idata->bcache = msg_cache_open (idata); snprintf (id, sizeof (id), "%u-%u", idata->uid_validity, HEADER_DATA(h)->uid); return mutt_bcache_put (idata->bcache, id, 1); } static int msg_cache_commit (IMAP_DATA* idata, HEADER* h) { char id[_POSIX_PATH_MAX]; if (!idata || !h) return -1; idata->bcache = msg_cache_open (idata); snprintf (id, sizeof (id), "%u-%u", idata->uid_validity, HEADER_DATA(h)->uid); return mutt_bcache_commit (idata->bcache, id); } int imap_cache_del (IMAP_DATA* idata, HEADER* h) { char id[_POSIX_PATH_MAX]; if (!idata || !h) return -1; idata->bcache = msg_cache_open (idata); snprintf (id, sizeof (id), "%u-%u", idata->uid_validity, HEADER_DATA(h)->uid); return mutt_bcache_del (idata->bcache, id); } static int msg_cache_clean_cb (const char* id, body_cache_t* bcache, void* data) { unsigned int uv, uid, n; IMAP_DATA* idata = (IMAP_DATA*)data; if (sscanf (id, "%u-%u", &uv, &uid) != 2) return 0; /* bad UID */ if (uv != idata->uid_validity) mutt_bcache_del (bcache, id); /* TODO: presort UIDs, walk in order */ for (n = 0; n < idata->ctx->msgcount; n++) { if (uid == HEADER_DATA(idata->ctx->hdrs[n])->uid) return 0; } mutt_bcache_del (bcache, id); return 0; } int imap_cache_clean (IMAP_DATA* idata) { idata->bcache = msg_cache_open (idata); mutt_bcache_list (idata->bcache, msg_cache_clean_cb, idata); return 0; } /* imap_add_keywords: concatenate custom IMAP tags to list, if they * appear in the folder flags list. Why wouldn't they? */ void imap_add_keywords (char* s, HEADER* h, LIST* mailbox_flags, size_t slen) { LIST *keywords; if (!mailbox_flags || !HEADER_DATA(h) || !HEADER_DATA(h)->keywords) return; keywords = HEADER_DATA(h)->keywords->next; while (keywords) { if (imap_has_flag (mailbox_flags, keywords->data)) { safe_strcat (s, slen, keywords->data); safe_strcat (s, slen, " "); } keywords = keywords->next; } } /* imap_free_header_data: free IMAP_HEADER structure */ void imap_free_header_data (void** data) { /* this should be safe even if the list wasn't used */ mutt_free_list (&(((IMAP_HEADER_DATA*) *data)->keywords)); FREE (data); /* __FREE_CHECKED__ */ } /* imap_set_flags: fill out the message header according to the flags from * the server. Expects a flags line of the form "FLAGS (flag flag ...)" */ char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s) { CONTEXT* ctx = idata->ctx; IMAP_HEADER newh; IMAP_HEADER_DATA* hd; unsigned char readonly; memset (&newh, 0, sizeof (newh)); hd = h->data; newh.data = hd; dprint (2, (debugfile, "imap_fetch_message: parsing FLAGS\n")); if ((s = msg_parse_flags (&newh, s)) == NULL) return NULL; /* YAUH (yet another ugly hack): temporarily set context to * read-write even if it's read-only, so *server* updates of * flags can be processed by mutt_set_flag. ctx->changed must * be restored afterwards */ readonly = ctx->readonly; ctx->readonly = 0; mutt_set_flag (ctx, h, M_NEW, !(hd->read || hd->old)); mutt_set_flag (ctx, h, M_OLD, hd->old); mutt_set_flag (ctx, h, M_READ, hd->read); mutt_set_flag (ctx, h, M_DELETE, hd->deleted); mutt_set_flag (ctx, h, M_FLAG, hd->flagged); mutt_set_flag (ctx, h, M_REPLIED, hd->replied); /* this message is now definitively *not* changed (mutt_set_flag * marks things changed as a side-effect) */ h->changed = 0; ctx->changed &= ~readonly; ctx->readonly = readonly; return s; } /* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER. * Expects string beginning with * n FETCH. * Returns: * 0 on success * -1 if the string is not a fetch response * -2 if the string is a corrupt fetch response */ static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf, FILE* fp) { IMAP_DATA* idata; long bytes; int rc = -1; /* default now is that string isn't FETCH response*/ idata = (IMAP_DATA*) ctx->data; if (buf[0] != '*') return rc; /* skip to message number */ buf = imap_next_word (buf); h->sid = atoi (buf); /* find FETCH tag */ buf = imap_next_word (buf); if (ascii_strncasecmp ("FETCH", buf, 5)) return rc; rc = -2; /* we've got a FETCH response, for better or worse */ if (!(buf = strchr (buf, '('))) return rc; buf++; /* FIXME: current implementation - call msg_parse_fetch - if it returns -2, * read header lines and call it again. Silly. */ if ((rc = msg_parse_fetch (h, buf)) != -2 || !fp) return rc; if (imap_get_literal_count (buf, &bytes) == 0) { imap_read_literal (fp, idata, bytes, NULL); /* we may have other fields of the FETCH _after_ the literal * (eg Domino puts FLAGS here). Nothing wrong with that, either. * This all has to go - we should accept literals and nonliterals * interchangeably at any time. */ if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) return rc; if (msg_parse_fetch (h, idata->buf) == -1) return rc; } rc = 0; /* success */ /* subtract headers from message size - unfortunately only the subset of * headers we've requested. */ h->content_length -= bytes; return rc; } /* msg_parse_fetch: handle headers returned from header fetch */ static int msg_parse_fetch (IMAP_HEADER *h, char *s) { char tmp[SHORT_STRING]; char *ptmp; if (!s) return -1; while (*s) { SKIPWS (s); if (ascii_strncasecmp ("FLAGS", s, 5) == 0) { if ((s = msg_parse_flags (h, s)) == NULL) return -1; } else if (ascii_strncasecmp ("UID", s, 3) == 0) { s += 3; SKIPWS (s); h->data->uid = (unsigned int) atoi (s); s = imap_next_word (s); } else if (ascii_strncasecmp ("INTERNALDATE", s, 12) == 0) { s += 12; SKIPWS (s); if (*s != '\"') { dprint (1, (debugfile, "msg_parse_fetch(): bogus INTERNALDATE entry: %s\n", s)); return -1; } s++; ptmp = tmp; while (*s && *s != '\"') *ptmp++ = *s++; if (*s != '\"') return -1; s++; /* skip past the trailing " */ *ptmp = 0; h->received = imap_parse_date (tmp); } else if (ascii_strncasecmp ("RFC822.SIZE", s, 11) == 0) { s += 11; SKIPWS (s); ptmp = tmp; while (isdigit ((unsigned char) *s)) *ptmp++ = *s++; *ptmp = 0; h->content_length = atoi (tmp); } else if (!ascii_strncasecmp ("BODY", s, 4) || !ascii_strncasecmp ("RFC822.HEADER", s, 13)) { /* handle above, in msg_fetch_header */ return -2; } else if (*s == ')') s++; /* end of request */ else if (*s) { /* got something i don't understand */ imap_error ("msg_parse_fetch", s); return -1; } } return 0; } /* msg_parse_flags: read a FLAGS token into an IMAP_HEADER */ static char* msg_parse_flags (IMAP_HEADER* h, char* s) { IMAP_HEADER_DATA* hd = h->data; /* sanity-check string */ if (ascii_strncasecmp ("FLAGS", s, 5) != 0) { dprint (1, (debugfile, "msg_parse_flags: not a FLAGS response: %s\n", s)); return NULL; } s += 5; SKIPWS(s); if (*s != '(') { dprint (1, (debugfile, "msg_parse_flags: bogus FLAGS response: %s\n", s)); return NULL; } s++; mutt_free_list (&hd->keywords); hd->deleted = hd->flagged = hd->replied = hd->read = hd->old = 0; /* start parsing */ while (*s && *s != ')') { if (ascii_strncasecmp ("\\deleted", s, 8) == 0) { s += 8; hd->deleted = 1; } else if (ascii_strncasecmp ("\\flagged", s, 8) == 0) { s += 8; hd->flagged = 1; } else if (ascii_strncasecmp ("\\answered", s, 9) == 0) { s += 9; hd->replied = 1; } else if (ascii_strncasecmp ("\\seen", s, 5) == 0) { s += 5; hd->read = 1; } else if (ascii_strncasecmp ("\\recent", s, 7) == 0) s += 7; else if (ascii_strncasecmp ("old", s, 3) == 0) { s += 3; hd->old = 1; } else { /* store custom flags as well */ char ctmp; char* flag_word = s; if (!hd->keywords) hd->keywords = mutt_new_list (); while (*s && !ISSPACE (*s) && *s != ')') s++; ctmp = *s; *s = '\0'; mutt_add_list (hd->keywords, flag_word); *s = ctmp; } SKIPWS(s); } /* wrap up, or note bad flags response */ if (*s == ')') s++; else { dprint (1, (debugfile, "msg_parse_flags: Unterminated FLAGS response: %s\n", s)); return NULL; } return s; } static void flush_buffer(char *buf, size_t *len, CONNECTION *conn) { buf[*len] = '\0'; mutt_socket_write_n(conn, buf, *len); *len = 0; } mutt-1.5.21/imap/utf7.c0000644000175000017500000001430211130456625011474 00000000000000/* * Copyright (C) 2000,2003 Edmund Grimley Evans * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "charset.h" #include "imap_private.h" static int Index_64[128] = { -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, 63,-1,-1,-1, 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 }; static char B64Chars[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', ',' }; /* * Convert the data (u7,u7len) from RFC 2060's UTF-7 to UTF-8. * The result is null-terminated and returned, and also stored * in (*u8,*u8len) if u8 or u8len is non-zero. * If input data is invalid, return 0 and don't store anything. * RFC 2060 obviously intends the encoding to be unique (see * point 5 in section 5.1.3), so we reject any non-canonical * form, such as &ACY- (instead of &-) or &AMA-&AMA- (instead * of &AMAAwA-). */ static char *utf7_to_utf8 (const char *u7, size_t u7len, char **u8, size_t *u8len) { char *buf, *p; int b, ch, k; p = buf = safe_malloc (u7len + u7len / 8 + 1); for (; u7len; u7++, u7len--) { if (*u7 == '&') { u7++, u7len--; if (u7len && *u7 == '-') { *p++ = '&'; continue; } ch = 0; k = 10; for (; u7len; u7++, u7len--) { if ((*u7 & 0x80) || (b = Index_64[(int)*u7]) == -1) break; if (k > 0) { ch |= b << k; k -= 6; } else { ch |= b >> (-k); if (ch < 0x80) { if (0x20 <= ch && ch < 0x7f) /* Printable US-ASCII */ goto bail; *p++ = ch; } else if (ch < 0x800) { *p++ = 0xc0 | (ch >> 6); *p++ = 0x80 | (ch & 0x3f); } else { *p++ = 0xe0 | (ch >> 12); *p++ = 0x80 | ((ch >> 6) & 0x3f); *p++ = 0x80 | (ch & 0x3f); } ch = (b << (16 + k)) & 0xffff; k += 10; } } if (ch || k < 6) /* Non-zero or too many extra bits */ goto bail; if (!u7len || *u7 != '-') /* BASE64 not properly terminated */ goto bail; if (u7len > 2 && u7[1] == '&' && u7[2] != '-') /* Adjacent BASE64 sections */ goto bail; } else if (*u7 < 0x20 || *u7 >= 0x7f) /* Not printable US-ASCII */ goto bail; else *p++ = *u7; } *p++ = '\0'; if (u8len) *u8len = p - buf; safe_realloc (&buf, p - buf); if (u8) *u8 = buf; return buf; bail: FREE (&buf); return 0; } /* * Convert the data (u8,u8len) from UTF-8 to RFC 2060's UTF-7. * The result is null-terminated and returned, and also stored * in (*u7,*u7len) if u7 or u7len is non-zero. * Unicode characters above U+FFFF are replaced by U+FFFE. * If input data is invalid, return 0 and don't store anything. */ static char *utf8_to_utf7 (const char *u8, size_t u8len, char **u7, size_t *u7len) { char *buf, *p; int ch; int n, i, b = 0, k = 0; int base64 = 0; /* * In the worst case we convert 2 chars to 7 chars. For example: * "\x10&\x10&..." -> "&ABA-&-&ABA-&-...". */ p = buf = safe_malloc ((u8len / 2) * 7 + 6); while (u8len) { unsigned char c = *u8; if (c < 0x80) ch = c, n = 0; else if (c < 0xc2) goto bail; else if (c < 0xe0) ch = c & 0x1f, n = 1; else if (c < 0xf0) ch = c & 0x0f, n = 2; else if (c < 0xf8) ch = c & 0x07, n = 3; else if (c < 0xfc) ch = c & 0x03, n = 4; else if (c < 0xfe) ch = c & 0x01, n = 5; else goto bail; u8++, u8len--; if (n > u8len) goto bail; for (i = 0; i < n; i++) { if ((u8[i] & 0xc0) != 0x80) goto bail; ch = (ch << 6) | (u8[i] & 0x3f); } if (n > 1 && !(ch >> (n * 5 + 1))) goto bail; u8 += n, u8len -= n; if (ch < 0x20 || ch >= 0x7f) { if (!base64) { *p++ = '&'; base64 = 1; b = 0; k = 10; } if (ch & ~0xffff) ch = 0xfffe; *p++ = B64Chars[b | ch >> k]; k -= 6; for (; k >= 0; k -= 6) *p++ = B64Chars[(ch >> k) & 0x3f]; b = (ch << (-k)) & 0x3f; k += 16; } else { if (base64) { if (k > 10) *p++ = B64Chars[b]; *p++ = '-'; base64 = 0; } *p++ = ch; if (ch == '&') *p++ = '-'; } } if (u8len) { FREE (&buf); return 0; } if (base64) { if (k > 10) *p++ = B64Chars[b]; *p++ = '-'; } *p++ = '\0'; if (u7len) *u7len = p - buf; safe_realloc (&buf, p - buf); if (u7) *u7 = buf; return buf; bail: FREE (&buf); return 0; } void imap_utf7_encode (char **s) { if (Charset) { char *t = safe_strdup (*s); if (!mutt_convert_string (&t, Charset, "utf-8", 0)) { char *u7 = utf8_to_utf7 (t, strlen (t), NULL, 0); FREE (s); /* __FREE_CHECKED__ */ *s = u7; } FREE (&t); } } void imap_utf7_decode (char **s) { if (Charset) { char *t = utf7_to_utf8 (*s, strlen (*s), 0, 0); if (t && !mutt_convert_string (&t, "utf-8", Charset, 0)) { FREE (s); /* __FREE_CHECKED__ */ *s = t; } } } mutt-1.5.21/imap/util.c0000644000175000017500000004520611434772215011576 00000000000000/* * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 1996-9 Brandon Long * Copyright (C) 1999-2009 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* general IMAP utility functions */ #include "config.h" #include "mutt.h" #include "mx.h" /* for M_IMAP */ #include "url.h" #include "imap_private.h" #ifdef USE_HCACHE #include "message.h" #include "hcache.h" #endif #include #include #include #include #include #include #include #include /* -- public functions -- */ /* imap_expand_path: IMAP implementation of mutt_expand_path. Rewrite * an IMAP path in canonical and absolute form. * Inputs: a buffer containing an IMAP path, and the number of bytes in * that buffer. * Outputs: The buffer is rewritten in place with the canonical IMAP path. * Returns 0 on success, or -1 if imap_parse_path chokes or url_ciss_tostring * fails, which it might if there isn't enough room in the buffer. */ int imap_expand_path (char* path, size_t len) { IMAP_MBOX mx; IMAP_DATA* idata; ciss_url_t url; char fixedpath[LONG_STRING]; int rc; if (imap_parse_path (path, &mx) < 0) return -1; idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW); mutt_account_tourl (&mx.account, &url); imap_fix_path (idata, mx.mbox, fixedpath, sizeof (fixedpath)); url.path = fixedpath; rc = url_ciss_tostring (&url, path, len, U_DECODE_PASSWD); FREE (&mx.mbox); return rc; } #ifdef USE_HCACHE static int imap_hcache_namer (const char* path, char* dest, size_t dlen) { return snprintf (dest, dlen, "%s.hcache", path); } header_cache_t* imap_hcache_open (IMAP_DATA* idata, const char* path) { IMAP_MBOX mx; ciss_url_t url; char cachepath[LONG_STRING]; char mbox[LONG_STRING]; if (path) imap_cachepath (idata, path, mbox, sizeof (mbox)); else { if (!idata->ctx || imap_parse_path (idata->ctx->path, &mx) < 0) return NULL; imap_cachepath (idata, mx.mbox, mbox, sizeof (mbox)); FREE (&mx.mbox); } mutt_account_tourl (&idata->conn->account, &url); url.path = mbox; url_ciss_tostring (&url, cachepath, sizeof (cachepath), U_PATH); return mutt_hcache_open (HeaderCache, cachepath, imap_hcache_namer); } void imap_hcache_close (IMAP_DATA* idata) { if (!idata->hcache) return; mutt_hcache_close (idata->hcache); idata->hcache = NULL; } HEADER* imap_hcache_get (IMAP_DATA* idata, unsigned int uid) { char key[16]; unsigned int* uv; HEADER* h = NULL; if (!idata->hcache) return NULL; sprintf (key, "/%u", uid); uv = (unsigned int*)mutt_hcache_fetch (idata->hcache, key, imap_hcache_keylen); if (uv) { if (*uv == idata->uid_validity) h = mutt_hcache_restore ((unsigned char*)uv, NULL); else dprint (3, (debugfile, "hcache uidvalidity mismatch: %u", *uv)); FREE (&uv); } return h; } int imap_hcache_put (IMAP_DATA* idata, HEADER* h) { char key[16]; if (!idata->hcache) return -1; sprintf (key, "/%u", HEADER_DATA (h)->uid); return mutt_hcache_store (idata->hcache, key, h, idata->uid_validity, imap_hcache_keylen); } int imap_hcache_del (IMAP_DATA* idata, unsigned int uid) { char key[16]; if (!idata->hcache) return -1; sprintf (key, "/%u", uid); return mutt_hcache_delete (idata->hcache, key, imap_hcache_keylen); } #endif /* imap_parse_path: given an IMAP mailbox name, return host, port * and a path IMAP servers will recognise. * mx.mbox is malloc'd, caller must free it */ int imap_parse_path (const char* path, IMAP_MBOX* mx) { static unsigned short ImapPort = 0; static unsigned short ImapsPort = 0; struct servent* service; char tmp[128]; ciss_url_t url; char *c; int n; if (!ImapPort) { service = getservbyname ("imap", "tcp"); if (service) ImapPort = ntohs (service->s_port); else ImapPort = IMAP_PORT; dprint (3, (debugfile, "Using default IMAP port %d\n", ImapPort)); } if (!ImapsPort) { service = getservbyname ("imaps", "tcp"); if (service) ImapsPort = ntohs (service->s_port); else ImapsPort = IMAP_SSL_PORT; dprint (3, (debugfile, "Using default IMAPS port %d\n", ImapsPort)); } /* Defaults */ memset(&mx->account, 0, sizeof(mx->account)); mx->account.port = ImapPort; mx->account.type = M_ACCT_TYPE_IMAP; c = safe_strdup (path); url_parse_ciss (&url, c); if (url.scheme == U_IMAP || url.scheme == U_IMAPS) { if (mutt_account_fromurl (&mx->account, &url) < 0 || !*mx->account.host) { FREE (&c); return -1; } mx->mbox = safe_strdup (url.path); if (url.scheme == U_IMAPS) mx->account.flags |= M_ACCT_SSL; FREE (&c); } /* old PINE-compatibility code */ else { FREE (&c); if (sscanf (path, "{%127[^}]}", tmp) != 1) return -1; c = strchr (path, '}'); if (!c) return -1; else /* walk past closing '}' */ mx->mbox = safe_strdup (c+1); if ((c = strrchr (tmp, '@'))) { *c = '\0'; strfcpy (mx->account.user, tmp, sizeof (mx->account.user)); strfcpy (tmp, c+1, sizeof (tmp)); mx->account.flags |= M_ACCT_USER; } if ((n = sscanf (tmp, "%127[^:/]%127s", mx->account.host, tmp)) < 1) { dprint (1, (debugfile, "imap_parse_path: NULL host in %s\n", path)); FREE (&mx->mbox); return -1; } if (n > 1) { if (sscanf (tmp, ":%hu%127s", &(mx->account.port), tmp) >= 1) mx->account.flags |= M_ACCT_PORT; if (sscanf (tmp, "/%s", tmp) == 1) { if (!ascii_strncmp (tmp, "ssl", 3)) mx->account.flags |= M_ACCT_SSL; else { dprint (1, (debugfile, "imap_parse_path: Unknown connection type in %s\n", path)); FREE (&mx->mbox); return -1; } } } } if ((mx->account.flags & M_ACCT_SSL) && !(mx->account.flags & M_ACCT_PORT)) mx->account.port = ImapsPort; return 0; } /* silly helper for mailbox name string comparisons, because of INBOX */ int imap_mxcmp (const char* mx1, const char* mx2) { char* b1; char* b2; int rc; if (!mx1 || !*mx1) mx1 = "INBOX"; if (!mx2 || !*mx2) mx2 = "INBOX"; if (!ascii_strcasecmp (mx1, "INBOX") && !ascii_strcasecmp (mx2, "INBOX")) return 0; b1 = safe_malloc (strlen (mx1) + 1); b2 = safe_malloc (strlen (mx2) + 1); imap_fix_path (NULL, mx1, b1, strlen (mx1) + 1); imap_fix_path (NULL, mx2, b2, strlen (mx2) + 1); rc = mutt_strcmp (b1, b2); FREE (&b1); FREE (&b2); return rc; } /* imap_pretty_mailbox: called by mutt_pretty_mailbox to make IMAP paths * look nice. */ void imap_pretty_mailbox (char* path) { IMAP_MBOX home, target; ciss_url_t url; char* delim; int tlen; int hlen = 0; char home_match = 0; if (imap_parse_path (path, &target) < 0) return; tlen = mutt_strlen (target.mbox); /* check whether we can do '=' substitution */ if (mx_is_imap(Maildir) && !imap_parse_path (Maildir, &home)) { hlen = mutt_strlen (home.mbox); if (tlen && mutt_account_match (&home.account, &target.account) && !mutt_strncmp (home.mbox, target.mbox, hlen)) { if (! hlen) home_match = 1; else if (ImapDelimChars) for (delim = ImapDelimChars; *delim != '\0'; delim++) if (target.mbox[hlen] == *delim) home_match = 1; } FREE (&home.mbox); } /* do the '=' substitution */ if (home_match) { *path++ = '='; /* copy remaining path, skipping delimiter */ if (! hlen) hlen = -1; memcpy (path, target.mbox + hlen + 1, tlen - hlen - 1); path[tlen - hlen - 1] = '\0'; } else { mutt_account_tourl (&target.account, &url); url.path = target.mbox; /* FIXME: That hard-coded constant is bogus. But we need the actual * size of the buffer from mutt_pretty_mailbox. And these pretty * operations usually shrink the result. Still... */ url_ciss_tostring (&url, path, 1024, 0); } FREE (&target.mbox); } /* -- library functions -- */ /* imap_continue: display a message and ask the user if she wants to * go on. */ int imap_continue (const char* msg, const char* resp) { imap_error (msg, resp); return mutt_yesorno (_("Continue?"), 0); } /* imap_error: show an error and abort */ void imap_error (const char *where, const char *msg) { mutt_error ("%s [%s]\n", where, msg); mutt_sleep (2); } /* imap_new_idata: Allocate and initialise a new IMAP_DATA structure. * Returns NULL on failure (no mem) */ IMAP_DATA* imap_new_idata (void) { IMAP_DATA* idata = safe_calloc (1, sizeof (IMAP_DATA)); if (!idata) return NULL; if (!(idata->cmdbuf = mutt_buffer_init (NULL))) FREE (&idata); idata->cmdslots = ImapPipelineDepth + 2; if (!(idata->cmds = safe_calloc(idata->cmdslots, sizeof(*idata->cmds)))) { mutt_buffer_free(&idata->cmdbuf); FREE (&idata); } return idata; } /* imap_free_idata: Release and clear storage in an IMAP_DATA structure. */ void imap_free_idata (IMAP_DATA** idata) { if (!idata) return; FREE (&(*idata)->capstr); mutt_free_list (&(*idata)->flags); imap_mboxcache_free (*idata); mutt_buffer_free(&(*idata)->cmdbuf); FREE (&(*idata)->buf); mutt_bcache_close (&(*idata)->bcache); FREE (&(*idata)->cmds); FREE (idata); /* __FREE_CHECKED__ */ } /* * Fix up the imap path. This is necessary because the rest of mutt * assumes a hierarchy delimiter of '/', which is not necessarily true * in IMAP. Additionally, the filesystem converts multiple hierarchy * delimiters into a single one, ie "///" is equal to "/". IMAP servers * are not required to do this. * Moreover, IMAP servers may dislike the path ending with the delimiter. */ char *imap_fix_path (IMAP_DATA *idata, const char *mailbox, char *path, size_t plen) { int i = 0; char delim = '\0'; if (idata) delim = idata->delim; while (mailbox && *mailbox && i < plen - 1) { if ((ImapDelimChars && strchr(ImapDelimChars, *mailbox)) || (delim && *mailbox == delim)) { /* use connection delimiter if known. Otherwise use user delimiter */ if (!idata) delim = *mailbox; while (*mailbox && ((ImapDelimChars && strchr(ImapDelimChars, *mailbox)) || (delim && *mailbox == delim))) mailbox++; path[i] = delim; } else { path[i] = *mailbox; mailbox++; } i++; } if (i && path[--i] != delim) i++; path[i] = '\0'; return path; } void imap_cachepath(IMAP_DATA* idata, const char* mailbox, char* dest, size_t dlen) { char* s; const char* p = mailbox; for (s = dest; p && *p && dlen; dlen--) { if (*p == idata->delim) { *s = '/'; /* simple way to avoid collisions with UIDs */ if (*(p + 1) >= '0' && *(p + 1) <= '9') { if (--dlen) *++s = '_'; } } else *s = *p; p++; s++; } *s = '\0'; } /* imap_get_literal_count: write number of bytes in an IMAP literal into * bytes, return 0 on success, -1 on failure. */ int imap_get_literal_count(const char *buf, long *bytes) { char *pc; char *pn; if (!buf || !(pc = strchr (buf, '{'))) return -1; pc++; pn = pc; while (isdigit ((unsigned char) *pc)) pc++; *pc = 0; *bytes = atoi(pn); return 0; } /* imap_get_qualifier: in a tagged response, skip tag and status for * the qualifier message. Used by imap_copy_message for TRYCREATE */ char* imap_get_qualifier (char* buf) { char *s = buf; /* skip tag */ s = imap_next_word (s); /* skip OK/NO/BAD response */ s = imap_next_word (s); return s; } /* imap_next_word: return index into string where next IMAP word begins */ char *imap_next_word (char *s) { int quoted = 0; while (*s) { if (*s == '\\') { s++; if (*s) s++; continue; } if (*s == '\"') quoted = quoted ? 0 : 1; if (!quoted && ISSPACE (*s)) break; s++; } SKIPWS (s); return s; } /* imap_parse_date: date is of the form: DD-MMM-YYYY HH:MM:SS +ZZzz */ time_t imap_parse_date (char *s) { struct tm t; time_t tz; t.tm_mday = (s[0] == ' '? s[1] - '0' : (s[0] - '0') * 10 + (s[1] - '0')); s += 2; if (*s != '-') return 0; s++; t.tm_mon = mutt_check_month (s); s += 3; if (*s != '-') return 0; s++; t.tm_year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0') - 1900; s += 4; if (*s != ' ') return 0; s++; /* time */ t.tm_hour = (s[0] - '0') * 10 + (s[1] - '0'); s += 2; if (*s != ':') return 0; s++; t.tm_min = (s[0] - '0') * 10 + (s[1] - '0'); s += 2; if (*s != ':') return 0; s++; t.tm_sec = (s[0] - '0') * 10 + (s[1] - '0'); s += 2; if (*s != ' ') return 0; s++; /* timezone */ tz = ((s[1] - '0') * 10 + (s[2] - '0')) * 3600 + ((s[3] - '0') * 10 + (s[4] - '0')) * 60; if (s[0] == '+') tz = -tz; return (mutt_mktime (&t, 0) + tz); } /* format date in IMAP style: DD-MMM-YYYY HH:MM:SS +ZZzz. * Caller should provide a buffer of IMAP_DATELEN bytes */ void imap_make_date (char *buf, time_t timestamp) { struct tm* tm = localtime (×tamp); time_t tz = mutt_local_tz (timestamp); tz /= 60; snprintf (buf, IMAP_DATELEN, "%02d-%s-%d %02d:%02d:%02d %+03d%02d", tm->tm_mday, Months[tm->tm_mon], tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, (int) tz / 60, (int) abs (tz) % 60); } /* imap_qualify_path: make an absolute IMAP folder target, given IMAP_MBOX * and relative path. */ void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path) { ciss_url_t url; mutt_account_tourl (&mx->account, &url); url.path = path; url_ciss_tostring (&url, dest, len, 0); } /* imap_quote_string: quote string according to IMAP rules: * surround string with quotes, escape " and \ with \ */ void imap_quote_string (char *dest, size_t dlen, const char *src) { char quote[] = "\"\\", *pt; const char *s; pt = dest; s = src; *pt++ = '"'; /* save room for trailing quote-char */ dlen -= 2; for (; *s && dlen; s++) { if (strchr (quote, *s)) { dlen -= 2; if (!dlen) break; *pt++ = '\\'; *pt++ = *s; } else { *pt++ = *s; dlen--; } } *pt++ = '"'; *pt = 0; } /* imap_unquote_string: equally stupid unquoting routine */ void imap_unquote_string (char *s) { char *d = s; if (*s == '\"') s++; else return; while (*s) { if (*s == '\"') { *d = '\0'; return; } if (*s == '\\') { s++; } if (*s) { *d = *s; d++; s++; } } *d = '\0'; } /* * Quoting and UTF-7 conversion */ void imap_munge_mbox_name (char *dest, size_t dlen, const char *src) { char *buf; buf = safe_strdup (src); imap_utf7_encode (&buf); imap_quote_string (dest, dlen, buf); FREE (&buf); } void imap_unmunge_mbox_name (char *s) { char *buf; imap_unquote_string(s); buf = safe_strdup (s); if (buf) { imap_utf7_decode (&buf); strncpy (s, buf, strlen (s)); } FREE (&buf); } /* imap_wordcasecmp: find word a in word list b */ int imap_wordcasecmp(const char *a, const char *b) { char tmp[SHORT_STRING]; char *s = (char *)b; int i; tmp[SHORT_STRING-1] = 0; for(i=0;i < SHORT_STRING-2;i++,s++) { if (!*s || ISSPACE(*s)) { tmp[i] = 0; break; } tmp[i] = *s; } tmp[i+1] = 0; return ascii_strcasecmp(a, tmp); } /* * Imap keepalive: poll the current folder to keep the * connection alive. * */ static RETSIGTYPE alrm_handler (int sig) { /* empty */ } void imap_keepalive (void) { CONNECTION *conn; CONTEXT *ctx = NULL; IMAP_DATA *idata; conn = mutt_socket_head (); while (conn) { if (conn->account.type == M_ACCT_TYPE_IMAP) { int need_free = 0; idata = (IMAP_DATA*) conn->data; if (idata->state >= IMAP_AUTHENTICATED && time(NULL) >= idata->lastread + ImapKeepalive) { if (idata->ctx) ctx = idata->ctx; else { ctx = safe_calloc (1, sizeof (CONTEXT)); ctx->data = idata; /* imap_close_mailbox will set ctx->iadata->ctx to NULL, so we can't * rely on the value of iadata->ctx to determine if this placeholder * context needs to be freed. */ need_free = 1; } /* if the imap connection closes during this call, ctx may be invalid * after this point, and thus should not be read. */ imap_check_mailbox (ctx, NULL, 1); if (need_free) FREE (&ctx); } } conn = conn->next; } } int imap_wait_keepalive (pid_t pid) { struct sigaction oldalrm; struct sigaction act; sigset_t oldmask; int rc; short imap_passive = option (OPTIMAPPASSIVE); set_option (OPTIMAPPASSIVE); set_option (OPTKEEPQUIET); sigprocmask (SIG_SETMASK, NULL, &oldmask); sigemptyset (&act.sa_mask); act.sa_handler = alrm_handler; #ifdef SA_INTERRUPT act.sa_flags = SA_INTERRUPT; #else act.sa_flags = 0; #endif sigaction (SIGALRM, &act, &oldalrm); alarm (ImapKeepalive); while (waitpid (pid, &rc, 0) < 0 && errno == EINTR) { alarm (0); /* cancel a possibly pending alarm */ imap_keepalive (); alarm (ImapKeepalive); } alarm (0); /* cancel a possibly pending alarm */ sigaction (SIGALRM, &oldalrm, NULL); sigprocmask (SIG_SETMASK, &oldmask, NULL); unset_option (OPTKEEPQUIET); if (!imap_passive) unset_option (OPTIMAPPASSIVE); return rc; } /* Allow/disallow re-opening a folder upon expunge. */ void imap_allow_reopen (CONTEXT *ctx) { if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx) CTX_DATA->reopen |= IMAP_REOPEN_ALLOW; } void imap_disallow_reopen (CONTEXT *ctx) { if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx) CTX_DATA->reopen &= ~IMAP_REOPEN_ALLOW; } int imap_account_match (const ACCOUNT* a1, const ACCOUNT* a2) { IMAP_DATA* a1_idata = imap_conn_find (a1, M_IMAP_CONN_NONEW); IMAP_DATA* a2_idata = imap_conn_find (a2, M_IMAP_CONN_NONEW); const ACCOUNT* a1_canon = a1_idata == NULL ? a1 : &a1_idata->conn->account; const ACCOUNT* a2_canon = a2_idata == NULL ? a2 : &a2_idata->conn->account; return mutt_account_match (a1_canon, a2_canon); } mutt-1.5.21/imap/auth_anon.c0000644000175000017500000000411311130456625012562 00000000000000/* * Copyright (C) 1999-2001,2005 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* IMAP login/authentication code */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "auth.h" /* this is basically a stripped-down version of the cram-md5 method. */ imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method) { int rc; if (!mutt_bit_isset (idata->capabilities, AUTH_ANON)) return IMAP_AUTH_UNAVAIL; if (mutt_account_getuser (&idata->conn->account)) return IMAP_AUTH_FAILURE; if (idata->conn->account.user[0] != '\0') return IMAP_AUTH_UNAVAIL; mutt_message _("Authenticating (anonymous)..."); imap_cmd_start (idata, "AUTHENTICATE ANONYMOUS"); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { dprint (1, (debugfile, "Invalid response from server.\n")); goto bail; } mutt_socket_write (idata->conn, "ZHVtbXkK\r\n"); /* base64 ("dummy") */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_OK) { dprint (1, (debugfile, "Error receiving server response.\n")); goto bail; } if (imap_code (idata->buf)) return IMAP_AUTH_SUCCESS; bail: mutt_error _("Anonymous authentication failed."); mutt_sleep (2); return IMAP_AUTH_FAILURE; } mutt-1.5.21/imap/auth_cram.c0000644000175000017500000001341311130456625012554 00000000000000/* * Copyright (C) 1999-2001,2005 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* IMAP login/authentication code */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "auth.h" #include "md5.h" #define MD5_BLOCK_LEN 64 #define MD5_DIGEST_LEN 16 /* forward declarations */ static void hmac_md5 (const char* password, char* challenge, unsigned char* response); /* imap_auth_cram_md5: AUTH=CRAM-MD5 support. */ imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method) { char ibuf[LONG_STRING*2], obuf[LONG_STRING]; unsigned char hmac_response[MD5_DIGEST_LEN]; int len; int rc; if (!mutt_bit_isset (idata->capabilities, ACRAM_MD5)) return IMAP_AUTH_UNAVAIL; mutt_message _("Authenticating (CRAM-MD5)..."); /* get auth info */ if (mutt_account_getlogin (&idata->conn->account)) return IMAP_AUTH_FAILURE; if (mutt_account_getpass (&idata->conn->account)) return IMAP_AUTH_FAILURE; imap_cmd_start (idata, "AUTHENTICATE CRAM-MD5"); /* From RFC 2195: * The data encoded in the first ready response contains a presumptively * arbitrary string of random digits, a timestamp, and the fully-qualified * primary host name of the server. The syntax of the unencoded form must * correspond to that of an RFC 822 'msg-id' [RFC822] as described in [POP3]. */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { dprint (1, (debugfile, "Invalid response from server: %s\n", ibuf)); goto bail; } if ((len = mutt_from_base64 (obuf, idata->buf + 2)) == -1) { dprint (1, (debugfile, "Error decoding base64 response.\n")); goto bail; } obuf[len] = '\0'; dprint (2, (debugfile, "CRAM challenge: %s\n", obuf)); /* The client makes note of the data and then responds with a string * consisting of the user name, a space, and a 'digest'. The latter is * computed by applying the keyed MD5 algorithm from [KEYED-MD5] where the * key is a shared secret and the digested text is the timestamp (including * angle-brackets). * * Note: The user name shouldn't be quoted. Since the digest can't contain * spaces, there is no ambiguity. Some servers get this wrong, we'll work * around them when the bug report comes in. Until then, we'll remain * blissfully RFC-compliant. */ hmac_md5 (idata->conn->account.pass, obuf, hmac_response); /* dubious optimisation I saw elsewhere: make the whole string in one call */ snprintf (obuf, sizeof (obuf), "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", idata->conn->account.user, hmac_response[0], hmac_response[1], hmac_response[2], hmac_response[3], hmac_response[4], hmac_response[5], hmac_response[6], hmac_response[7], hmac_response[8], hmac_response[9], hmac_response[10], hmac_response[11], hmac_response[12], hmac_response[13], hmac_response[14], hmac_response[15]); dprint(2, (debugfile, "CRAM response: %s\n", obuf)); /* XXX - ibuf must be long enough to store the base64 encoding of obuf, * plus the additional debris */ mutt_to_base64 ((unsigned char*) ibuf, (unsigned char*) obuf, strlen (obuf), sizeof (ibuf) - 2); safe_strcat (ibuf, sizeof (ibuf), "\r\n"); mutt_socket_write (idata->conn, ibuf); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_OK) { dprint (1, (debugfile, "Error receiving server response.\n")); goto bail; } if (imap_code (idata->buf)) return IMAP_AUTH_SUCCESS; bail: mutt_error _("CRAM-MD5 authentication failed."); mutt_sleep (2); return IMAP_AUTH_FAILURE; } /* hmac_md5: produce CRAM-MD5 challenge response. */ static void hmac_md5 (const char* password, char* challenge, unsigned char* response) { struct md5_ctx ctx; unsigned char ipad[MD5_BLOCK_LEN], opad[MD5_BLOCK_LEN]; unsigned char secret[MD5_BLOCK_LEN+1]; unsigned char hash_passwd[MD5_DIGEST_LEN]; unsigned int secret_len, chal_len; int i; secret_len = strlen (password); chal_len = strlen (challenge); /* passwords longer than MD5_BLOCK_LEN bytes are substituted with their MD5 * digests */ if (secret_len > MD5_BLOCK_LEN) { md5_buffer (password, secret_len, hash_passwd); strfcpy ((char*) secret, (char*) hash_passwd, MD5_DIGEST_LEN); secret_len = MD5_DIGEST_LEN; } else strfcpy ((char *) secret, password, sizeof (secret)); memset (ipad, 0, sizeof (ipad)); memset (opad, 0, sizeof (opad)); memcpy (ipad, secret, secret_len); memcpy (opad, secret, secret_len); for (i = 0; i < MD5_BLOCK_LEN; i++) { ipad[i] ^= 0x36; opad[i] ^= 0x5c; } /* inner hash: challenge and ipadded secret */ md5_init_ctx (&ctx); md5_process_bytes (ipad, MD5_BLOCK_LEN, &ctx); md5_process_bytes (challenge, chal_len, &ctx); md5_finish_ctx (&ctx, response); /* outer hash: inner hash and opadded secret */ md5_init_ctx (&ctx); md5_process_bytes (opad, MD5_BLOCK_LEN, &ctx); md5_process_bytes (response, MD5_DIGEST_LEN, &ctx); md5_finish_ctx (&ctx, response); } mutt-1.5.21/imap/auth_sasl.c0000644000175000017500000001322411130456625012574 00000000000000/* * Copyright (C) 2000-6 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* SASL login/authentication code */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "mutt_sasl.h" #include "imap_private.h" #include "auth.h" #include #include /* imap_auth_sasl: Default authenticator if available. */ imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method) { sasl_conn_t* saslconn; sasl_interact_t* interaction = NULL; int rc, irc; char buf[HUGE_STRING]; const char* mech; const char *pc = NULL; unsigned int len, olen; unsigned char client_start; if (mutt_sasl_client_new (idata->conn, &saslconn) < 0) { dprint (1, (debugfile, "imap_auth_sasl: Error allocating SASL connection.\n")); return IMAP_AUTH_FAILURE; } rc = SASL_FAIL; /* If the user hasn't specified a method, use any available */ if (!method) { method = idata->capstr; /* hack for SASL ANONYMOUS support: * 1. Fetch username. If it's "" or "anonymous" then * 2. attempt sasl_client_start with only "AUTH=ANONYMOUS" capability * 3. if sasl_client_start fails, fall through... */ if (mutt_account_getuser (&idata->conn->account)) return IMAP_AUTH_FAILURE; if (mutt_bit_isset (idata->capabilities, AUTH_ANON) && (!idata->conn->account.user[0] || !ascii_strncmp (idata->conn->account.user, "anonymous", 9))) rc = sasl_client_start (saslconn, "AUTH=ANONYMOUS", NULL, &pc, &olen, &mech); } if (rc != SASL_OK && rc != SASL_CONTINUE) do { rc = sasl_client_start (saslconn, method, &interaction, &pc, &olen, &mech); if (rc == SASL_INTERACT) mutt_sasl_interact (interaction); } while (rc == SASL_INTERACT); client_start = (olen > 0); if (rc != SASL_OK && rc != SASL_CONTINUE) { if (method) dprint (2, (debugfile, "imap_auth_sasl: %s unavailable\n", method)); else dprint (1, (debugfile, "imap_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n")); /* SASL doesn't support LOGIN, so fall back */ return IMAP_AUTH_UNAVAIL; } mutt_message (_("Authenticating (%s)..."), mech); snprintf (buf, sizeof (buf), "AUTHENTICATE %s", mech); if (mutt_bit_isset (idata->capabilities, SASL_IR) && client_start) { len = mutt_strlen (buf); buf[len++] = ' '; if (sasl_encode64 (pc, olen, buf + len, sizeof (buf) - len, &olen) != SASL_OK) { dprint (1, (debugfile, "imap_auth_sasl: error base64-encoding client response.\n")); goto bail; } client_start = olen = 0; } imap_cmd_start (idata, buf); irc = IMAP_CMD_CONTINUE; /* looping protocol */ while (rc == SASL_CONTINUE || olen > 0) { do irc = imap_cmd_step (idata); while (irc == IMAP_CMD_CONTINUE); if (irc == IMAP_CMD_BAD || irc == IMAP_CMD_NO) goto bail; if (irc == IMAP_CMD_RESPOND) { /* Exchange incorrectly returns +\r\n instead of + \r\n */ if (idata->buf[1] == '\0') { buf[0] = '\0'; len = 0; } else if (sasl_decode64 (idata->buf+2, strlen (idata->buf+2), buf, LONG_STRING-1, &len) != SASL_OK) { dprint (1, (debugfile, "imap_auth_sasl: error base64-decoding server response.\n")); goto bail; } } /* client-start is only available with the SASL-IR extension, but * SASL 2.1 seems to want to use it regardless, at least for DIGEST * fast reauth. Override if the server sent an initial continuation */ if (!client_start || buf[0]) { do { rc = sasl_client_step (saslconn, buf, len, &interaction, &pc, &olen); if (rc == SASL_INTERACT) mutt_sasl_interact (interaction); } while (rc == SASL_INTERACT); } else client_start = 0; /* send out response, or line break if none needed */ if (olen) { if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK) { dprint (1, (debugfile, "imap_auth_sasl: error base64-encoding client response.\n")); goto bail; } } if (irc == IMAP_CMD_RESPOND) { strfcpy (buf + olen, "\r\n", sizeof (buf) - olen); mutt_socket_write (idata->conn, buf); } /* If SASL has errored out, send an abort string to the server */ if (rc < 0) { mutt_socket_write (idata->conn, "*\r\n"); dprint (1, (debugfile, "imap_auth_sasl: sasl_client_step error %d\n",rc)); } olen = 0; } while (irc != IMAP_CMD_OK) if ((irc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; if (rc != SASL_OK) goto bail; if (imap_code (idata->buf)) { mutt_sasl_setup_conn (idata->conn, saslconn); return IMAP_AUTH_SUCCESS; } bail: sasl_dispose (&saslconn); if (method) { dprint (2, (debugfile, "imap_auth_sasl: %s failed\n", method)); return IMAP_AUTH_UNAVAIL; } mutt_error _("SASL authentication failed."); mutt_sleep(2); return IMAP_AUTH_FAILURE; } mutt-1.5.21/imap/auth_gss.c0000644000175000017500000002352011130456625012426 00000000000000/* * Copyright (C) 1999-2001,2005,2009 Brendan Cully * * 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 2 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* GSS login/authentication code */ #if HAVE_CONFIG_H # include "config.h" #endif #include "mutt.h" #include "imap_private.h" #include "auth.h" #include #ifdef HAVE_HEIMDAL # include # define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE #else # include # include #endif #define GSS_BUFSIZE 8192 #define GSS_AUTH_P_NONE 1 #define GSS_AUTH_P_INTEGRITY 2 #define GSS_AUTH_P_PRIVACY 4 static void print_gss_error(OM_uint32 err_maj, OM_uint32 err_min) { OM_uint32 maj_stat, min_stat; OM_uint32 msg_ctx = 0; gss_buffer_desc status_string; char buf_maj[512]; char buf_min[512]; do { maj_stat = gss_display_status (&min_stat, err_maj, GSS_C_GSS_CODE, GSS_C_NO_OID, &msg_ctx, &status_string); if (GSS_ERROR(maj_stat)) break; strncpy(buf_maj, (char*) status_string.value, sizeof(buf_maj)); gss_release_buffer(&min_stat, &status_string); maj_stat = gss_display_status (&min_stat, err_min, GSS_C_MECH_CODE, GSS_C_NULL_OID, &msg_ctx, &status_string); if (!GSS_ERROR(maj_stat)) { strncpy(buf_min, (char*) status_string.value, sizeof(buf_min)); gss_release_buffer(&min_stat, &status_string); } } while (!GSS_ERROR(maj_stat) && msg_ctx != 0); dprint (2, (debugfile, "((%s:%d )(%s:%d))", buf_maj, err_maj, buf_min, err_min)); } /* imap_auth_gss: AUTH=GSSAPI support. */ imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method) { gss_buffer_desc request_buf, send_token; gss_buffer_t sec_token; gss_name_t target_name; gss_ctx_id_t context; #ifdef DEBUG gss_OID mech_name; #endif gss_qop_t quality; int cflags; OM_uint32 maj_stat, min_stat; char buf1[GSS_BUFSIZE], buf2[GSS_BUFSIZE], server_conf_flags; unsigned long buf_size; int rc; if (!mutt_bit_isset (idata->capabilities, AGSSAPI)) return IMAP_AUTH_UNAVAIL; if (mutt_account_getuser (&idata->conn->account)) return IMAP_AUTH_FAILURE; /* get an IMAP service ticket for the server */ snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->account.host); request_buf.value = buf1; request_buf.length = strlen (buf1) + 1; maj_stat = gss_import_name (&min_stat, &request_buf, gss_nt_service_name, &target_name); if (maj_stat != GSS_S_COMPLETE) { dprint (2, (debugfile, "Couldn't get service name for [%s]\n", buf1)); return IMAP_AUTH_UNAVAIL; } #ifdef DEBUG else if (debuglevel >= 2) { maj_stat = gss_display_name (&min_stat, target_name, &request_buf, &mech_name); dprint (2, (debugfile, "Using service name [%s]\n", (char*) request_buf.value)); maj_stat = gss_release_buffer (&min_stat, &request_buf); } #endif /* Acquire initial credentials - without a TGT GSSAPI is UNAVAIL */ sec_token = GSS_C_NO_BUFFER; context = GSS_C_NO_CONTEXT; /* build token */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context, target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token, (unsigned int*) &cflags, NULL); if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED) { print_gss_error(maj_stat, min_stat); dprint (1, (debugfile, "Error acquiring credentials - no TGT?\n")); gss_release_name (&min_stat, &target_name); return IMAP_AUTH_UNAVAIL; } /* now begin login */ mutt_message _("Authenticating (GSSAPI)..."); imap_cmd_start (idata, "AUTHENTICATE GSSAPI"); /* expect a null continuation response ("+") */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { dprint (2, (debugfile, "Invalid response from server: %s\n", buf1)); gss_release_name (&min_stat, &target_name); goto bail; } /* now start the security context initialisation loop... */ dprint (2, (debugfile, "Sending credentials\n")); mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length, sizeof (buf1) - 2); gss_release_buffer (&min_stat, &send_token); safe_strcat (buf1, sizeof (buf1), "\r\n"); mutt_socket_write (idata->conn, buf1); while (maj_stat == GSS_S_CONTINUE_NEEDED) { /* Read server data */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { dprint (1, (debugfile, "Error receiving server response.\n")); gss_release_name (&min_stat, &target_name); goto bail; } request_buf.length = mutt_from_base64 (buf2, idata->buf + 2); request_buf.value = buf2; sec_token = &request_buf; /* Write client data */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context, target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token, (unsigned int*) &cflags, NULL); if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED) { print_gss_error(maj_stat, min_stat); dprint (1, (debugfile, "Error exchanging credentials\n")); gss_release_name (&min_stat, &target_name); goto err_abort_cmd; } mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length, sizeof (buf1) - 2); gss_release_buffer (&min_stat, &send_token); safe_strcat (buf1, sizeof (buf1), "\r\n"); mutt_socket_write (idata->conn, buf1); } gss_release_name (&min_stat, &target_name); /* get security flags and buffer size */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc != IMAP_CMD_RESPOND) { dprint (1, (debugfile, "Error receiving server response.\n")); goto bail; } request_buf.length = mutt_from_base64 (buf2, idata->buf + 2); request_buf.value = buf2; maj_stat = gss_unwrap (&min_stat, context, &request_buf, &send_token, &cflags, &quality); if (maj_stat != GSS_S_COMPLETE) { print_gss_error(maj_stat, min_stat); dprint (2, (debugfile, "Couldn't unwrap security level data\n")); gss_release_buffer (&min_stat, &send_token); goto err_abort_cmd; } dprint (2, (debugfile, "Credential exchange complete\n")); /* first octet is security levels supported. We want NONE */ server_conf_flags = ((char*) send_token.value)[0]; if ( !(((char*) send_token.value)[0] & GSS_AUTH_P_NONE) ) { dprint (2, (debugfile, "Server requires integrity or privacy\n")); gss_release_buffer (&min_stat, &send_token); goto err_abort_cmd; } /* we don't care about buffer size if we don't wrap content. But here it is */ ((char*) send_token.value)[0] = 0; buf_size = ntohl (*((long *) send_token.value)); gss_release_buffer (&min_stat, &send_token); dprint (2, (debugfile, "Unwrapped security level flags: %c%c%c\n", server_conf_flags & GSS_AUTH_P_NONE ? 'N' : '-', server_conf_flags & GSS_AUTH_P_INTEGRITY ? 'I' : '-', server_conf_flags & GSS_AUTH_P_PRIVACY ? 'P' : '-')); dprint (2, (debugfile, "Maximum GSS token size is %ld\n", buf_size)); /* agree to terms (hack!) */ buf_size = htonl (buf_size); /* not relevant without integrity/privacy */ memcpy (buf1, &buf_size, 4); buf1[0] = GSS_AUTH_P_NONE; /* server decides if principal can log in as user */ strncpy (buf1 + 4, idata->conn->account.user, sizeof (buf1) - 4); request_buf.value = buf1; request_buf.length = 4 + strlen (idata->conn->account.user) + 1; maj_stat = gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, &request_buf, &cflags, &send_token); if (maj_stat != GSS_S_COMPLETE) { dprint (2, (debugfile, "Error creating login request\n")); goto err_abort_cmd; } mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length, sizeof (buf1) - 2); dprint (2, (debugfile, "Requesting authorisation as %s\n", idata->conn->account.user)); safe_strcat (buf1, sizeof (buf1), "\r\n"); mutt_socket_write (idata->conn, buf1); /* Joy of victory or agony of defeat? */ do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); if (rc == IMAP_CMD_RESPOND) { dprint (1, (debugfile, "Unexpected server continuation request.\n")); goto err_abort_cmd; } if (imap_code (idata->buf)) { /* flush the security context */ dprint (2, (debugfile, "Releasing GSS credentials\n")); maj_stat = gss_delete_sec_context (&min_stat, &context, &send_token); if (maj_stat != GSS_S_COMPLETE) dprint (1, (debugfile, "Error releasing credentials\n")); /* send_token may contain a notification to the server to flush * credentials. RFC 1731 doesn't specify what to do, and since this * support is only for authentication, we'll assume the server knows * enough to flush its own credentials */ gss_release_buffer (&min_stat, &send_token); return IMAP_AUTH_SUCCESS; } else goto bail; err_abort_cmd: mutt_socket_write (idata->conn, "*\r\n"); do rc = imap_cmd_step (idata); while (rc == IMAP_CMD_CONTINUE); bail: mutt_error _("GSSAPI authentication failed."); mutt_sleep (2); return IMAP_AUTH_FAILURE; }