diff --git a/NEWS b/NEWS index 44e8d054..abb5ad7a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +Notmuch 0.20 (UNRELEASED) + +Contrib +------- + +`notmuch-deliver` is removed. As far as we know, all functionality +previously provided by `notmuch-deliver` should now be provided by +`notmuch insert`, provided by the main notmuch binary. + Notmuch 0.19 (2014-11-14) ========================= diff --git a/contrib/notmuch-deliver/.gitignore b/contrib/notmuch-deliver/.gitignore deleted file mode 100644 index 6971ef20..00000000 --- a/contrib/notmuch-deliver/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# gitignore for notmuch-deliver -.*.swp -*~ -*.[oa] -*.py[co] - -tags - -*.lo -*.la - -.deps -.libs -Makefile.in -Makefile - -gmon.out -gprof* - -/INSTALL -/aclocal.m4 -/autom4te.cache -/config.guess -/config.h -/config.h.in -/config.log -/config.sub -/config.status -/configure -/compile -/depcomp -/install-sh -/missing -/stamp-h1 -/libtool -/ltmain.sh - -m4/libtool.m4 -m4/lt*.m4 - -maildrop/numlib/config.h -src/notmuch-deliver diff --git a/contrib/notmuch-deliver/.mailmap b/contrib/notmuch-deliver/.mailmap deleted file mode 100644 index 95f1131d..00000000 --- a/contrib/notmuch-deliver/.mailmap +++ /dev/null @@ -1 +0,0 @@ -Ali Polatel diff --git a/contrib/notmuch-deliver/Makefile.am b/contrib/notmuch-deliver/Makefile.am deleted file mode 100644 index 365558ab..00000000 --- a/contrib/notmuch-deliver/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -CLEANFILES= *~ -MAINTAINERCLEANFILES= Makefile.in configure aclocal.m4 \ - config.h config.h.in INSTALL -ACLOCAL_AMFLAGS= -I m4 -AUTOMAKE_OPTIONS= dist-bzip2 no-dist-gzip std-options foreign -SUBDIRS= maildrop/numlib src . - -doc_DATA= README.mkd diff --git a/contrib/notmuch-deliver/README.mkd b/contrib/notmuch-deliver/README.mkd deleted file mode 100644 index 06268bd8..00000000 --- a/contrib/notmuch-deliver/README.mkd +++ /dev/null @@ -1,43 +0,0 @@ -## About -`notmuch-deliver` is a [maildir](http://cr.yp.to/proto/maildir.html) delivery -tool. - -## Overview -`notmuch-deliver` is a [maildir](http://cr.yp.to/proto/maildir.html) delivery -tool for [notmuch](http://notmuchmail.org) mail indexer. It reads from standard -input, delivers the mail to the specified maildir and adds it to the notmuch -database. This is meant as a convenient alternative to running `notmuch new` -after mail delivery. - -## Usage -Here's a simple example for [maildrop](http://www.courier-mta.org/maildrop/): - - # Deliver local mail to $MAILDIR/.Local and add local tag. - if (/^From: root/:h) - { - to "|notmuch-deliver -f -t local Local" - } - - # Deliver lkml mail to $MAILDIR/.Lkml, add lkml tag and remove inbox tag. - if (/^List-Id: linux-kernel@vger.kernel.org/:h) - { - to "|notmuch-deliver -f -t lkml -r inbox Lkml" - } - - # Deliver the rest to $MAILDIR, adding personal tag - to "|notmuch-deliver -t personal" - -## Requirements -- [notmuch](http://notmuchmail.org) shared library -- [GLib](http://library.gnome.org/devel/glib/)-2.16 or newer - -## Contribute -Clone [git://github.com/alip/notmuch-deliver.git](git://github.com/alip/notmuch-deliver.git). -Format patches are preferred. Either send a mail to me or poke me on IRC. -My personal e-mail address is [alip@exherbo.org](mailto:alip@exherbo.org). -I'm available on IRC as `alip` on [Freenode](http://freenode.net) and [OFTC](http://www.oftc.net). - -## License -You may redistribute this under the same terms as notmuch itself. - - diff --git a/contrib/notmuch-deliver/autogen.sh b/contrib/notmuch-deliver/autogen.sh deleted file mode 100755 index 2c660bcf..00000000 --- a/contrib/notmuch-deliver/autogen.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# vim: set sw=4 et sts=4 tw=80 : - -die() { - echo "$@" >&2 - exit 1 -} - -echo ">>> libtoolize --copy --force --automake" -libtoolize --copy --force --automake || die "libtoolize failed" -echo ">>> rm -f config.cache" -rm -f config.cache -echo ">>> aclocal -I m4" -aclocal -I m4 || die "aclocal failed" -echo ">>> autoheader" -autoheader || die "autoheader failed" -echo ">>> autoconf" -autoconf || die "autoconf failed" -echo ">>> automake --foreign --add-missing --copy" -automake --foreign --add-missing --copy || die "automake failed" diff --git a/contrib/notmuch-deliver/configure.ac b/contrib/notmuch-deliver/configure.ac deleted file mode 100644 index 4deb6587..00000000 --- a/contrib/notmuch-deliver/configure.ac +++ /dev/null @@ -1,156 +0,0 @@ -dnl vim: set sw=4 sts=4 ts=4 noet ft=config foldmethod=marker foldmarker={{{,}}} : - -dnl {{{ Program, version -AC_PREREQ(2.59) -AC_INIT([src/main.c]) -AC_CANONICAL_SYSTEM - -VERSION_MAJOR=0 -VERSION_MINOR=1 -VERSION_FULL="$VERSION_MAJOR.$VERSION_MINOR" -VERSION="$VERSION_FULL" - -AC_SUBST([VERSION_MAJOR]) -AC_SUBST([VERSION_MINOR]) -AC_SUBST([VERSION_FULL]) - -AM_INIT_AUTOMAKE(notmuch-deliver, [$VERSION_FULL]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) - -dnl {{{ Git revision -AC_MSG_CHECKING([for git head]) -if test -d "${GIT_DIR:-${ac_top_srcdir:-./}/.git}" ; then - GITHEAD=`git describe 2>/dev/null` - if test -z ${GITHEAD} ; then - GITHEAD=`git rev-parse HEAD` - fi - if test -n "`git diff-index -m --name-only HEAD`" ; then - GITHEAD=${GITHEAD}-dirty - fi - if test -n "${GITHEAD}" ; then - GITHEAD="-${GITHEAD}" - fi -fi -AC_MSG_RESULT([$GITHEAD]) -AC_SUBST([GITHEAD]) -dnl }}} -dnl }}} - -dnl {{{ Toolchain checks -AC_USE_SYSTEM_EXTENSIONS -AC_PROG_CC -AC_PROG_CC_C99 -if test x"$ac_cv_prog_cc_c99" = x"no"; then - AC_MSG_ERROR([notmuch-deliver requires a C compiler that supports ISO C99!]) -fi -AC_PROG_LIBTOOL -AC_PROG_LN_S -AC_PROG_INSTALL -AC_PROG_MAKE_SET -dnl }}} - -dnl {{{ Check for headers -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_HEADER_TIME -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS([sys/stat.h unistd.h sysexits.h utime.h]) -dnl }}} - -dnl {{{ Check for typedefs, structures and compiler characteristics -AC_C_CONST -AC_TYPE_OFF_T -AC_TYPE_SIZE_T -AC_TYPE_UID_T -AC_TYPE_PID_T -AC_STRUCT_TM -dnl }}} - -dnl {{{ Check for library functions -AC_CHECK_FUNCS([setgroups initgroups symlink readlink strcasecmp utime utimes splice]) -dnl }}} - -dnl {{{ gethostname() -AC_CACHE_CHECK([for missing gethostname prototype], - maildir_cv_SYS_GETHOSTNAME, - AC_TRY_COMPILE([ -#ifdef HAVE_UNISTD_H -#include -#endif - -int gethostname(int,int); -],,[maildir_cv_SYS_GETHOSTNAME=yes], [maildir_cv_SYS_GETHOSTNAME=no])) - -if test x"$maildir_cv_SYS_GETHOSTNAME" = x"no" ; then - AC_DEFINE_UNQUOTED(HAS_GETHOSTNAME, 1, [Whether gethostname() is prototyped]) -fi -dnl }}} - -dnl {{{ Check for maildir target separator -if test "$target_os" = "cygwin" ; then - AC_DEFINE_UNQUOTED(MDIRSEP, "!", [Maildir target separator]) -else - AC_DEFINE_UNQUOTED(MDIRSEP, ":", [Maildir target separator]) -fi -dnl }}} - -dnl {{{ Make pkg-config work -PKG_PROG_PKG_CONFIG([0.9.0]) -dnl }}} - -dnl {{{ Check for libraries -GLIB_REQUIRED=2.16 - -PKG_CHECK_MODULES([glib], [glib-2.0 >= $GLIB_REQUIRED],, - [AC_MSG_ERROR([notmuch-deliver requires glib-$GLIB_REQUIRED or newer])]) -AC_CHECK_LIB(notmuch, notmuch_database_create,, - [AC_MSG_ERROR([notmuch-deliver requires notmuch mail indexing library])]) -dnl }}} - -dnl {{{ Extra CFLAGS -NOTMUCH_DELIVER_CFLAGS= -WANTED_CFLAGS="-Wall -W -Wextra -Wvla -Wformat=2 -Wformat-security -Wformat-nonliteral -Winit-self -Wfloat-equal -Wno-deprecated-declarations -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wpointer-arith -Wstrict-prototypes -Wcast-qual -Wwrite-strings -pedantic" -for flag in $WANTED_CFLAGS ; do - AX_CHECK_COMPILER_FLAGS([$flag], [NOTMUCH_DELIVER_CFLAGS="$NOTMUCH_DELIVER_CFLAGS $flag"],) -done -dnl }}} - -dnl {{{ Profiling -AC_MSG_CHECKING([whether gprof symbols are wanted]) -AC_ARG_ENABLE([gprof], - [AS_HELP_STRING([--enable-gprof], - [Add gprof symbols (-pg) (for debugging)])], - PROFILE="$enableval", - PROFILE="no") -AC_MSG_RESULT([$PROFILE]) -if test x"$PROFILE" = x"yes" ; then - AX_CHECK_COMPILER_FLAGS([-pg],, AC_MSG_ERROR([Your compiler doesn't support -pg flag])) - NOTMUCH_DELIVER_CFLAGS="$NOTMUCH_DELIVER_CFLAGS -pg" - LDFLAGS="$LDFLAGS -pg" -fi -AC_MSG_CHECKING([whether coverage testing should be enabled]) -AC_ARG_ENABLE([gcov], - [AS_HELP_STRING([--enable-gcov], - [add gcov support (for debugging)])], - COVERAGE="$enableval", - COVERAGE="no") -AC_MSG_RESULT([$COVERAGE]) -if test x"$COVERAGE" = x"yes" ; then - AX_CHECK_COMPILER_FLAGS([-fprofile-arcs],, - AC_MSG_ERROR([Your compiler doesn't support -fprofile-arcs flag])) - AX_CHECK_COMPILER_FLAGS([-ftest-coverage],, - AC_MSG_ERROR([Your compiler doesn't support -ftest-coverage flag])) - NOTMUCH_DELIVER_CFLAGS="$NOTMUCH_DELIVER_CFLAGS -fprofile-arcs -ftest-coverage" -fi -AC_SUBST([NOTMUCH_DELIVER_CFLAGS]) -dnl }}} - -dnl {{{ Output -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_LINKS([maildrop/numlib/config.h:config.h]) -AC_OUTPUT( - Makefile - maildrop/numlib/Makefile - src/Makefile - ) -dnl }}} diff --git a/contrib/notmuch-deliver/m4/ax_check_compiler_flags.m4 b/contrib/notmuch-deliver/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 7da8324b..00000000 --- a/contrib/notmuch-deliver/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/contrib/notmuch-deliver/maildrop/maildir/Makefile.am b/contrib/notmuch-deliver/maildrop/maildir/Makefile.am deleted file mode 100644 index 6fd0ae49..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/Makefile.am +++ /dev/null @@ -1,201 +0,0 @@ -# -# Copyright 1998 - 2005 Double Precision, Inc. See COPYING for -# distribution information. - - -noinst_LTLIBRARIES=libmaildir.la - - -DOCS= deliverquota.html.in deliverquota.8.in \ - maildiracl.1.in \ - maildir.html maildir.5 \ - maildiracl.html.in \ - maildirmake.html.in maildirmake.1.in maildirquota.html maildirquota.7 \ - maildirkw.html maildirkw.1 - -if HAVE_SGML -BUILT_SOURCES=maildirsharedrc.h maildirfilterconfig.h quotawarnmsg.h \ - mailbot.h autoresponsequota.h $(noinst_DATA) $(DOCS) -else -BUILT_SOURCES=maildirsharedrc.h maildirfilterconfig.h quotawarnmsg.h \ - mailbot.h autoresponsequota.h $(noinst_DATA) -endif - -noinst_DATA=deliverquota.html maildirmake.html deliverquota.8 maildirmake.1 \ - maildiracl.html maildiracl.1 maildir.libdeps - -libmaildir_la_SOURCES=autoresponse.c autoresponse.h \ - maildiraclt.c maildiraclt.h \ - maildircache.c maildircache.h \ - maildircreate.c maildircreate.h \ - maildirfilename.c maildirgetnew.c \ - maildirfilter.c maildirfilter2.c \ - maildirfilter.h maildirfiltertypelist.h\ - maildirflags.c maildirmkdir.c \ - maildirgetquota.c maildirgetquota.h \ - maildirinfo.c maildirinfo.h \ - maildirkeywords.c maildirkeywords2.c maildirkeywords3.c \ - maildirkeywords4.cpp \ - maildirkeywords.h maildirlist.c maildirlock.c \ - maildirmake2.c \ - maildirnewshared.c maildirnewshared.h maildirnewshared2.c \ - maildiropen.c maildirparsequota.c \ - maildirpath.c maildirpurgetmp.c maildirmisc.h \ - maildirrename.c \ - maildirsearch.c maildirsearchC.cpp maildirsearch.h \ - maildirshared.c maildirshared2.c maildirdelfolder.c\ - maildirquota.c maildirquota.h maildirrequota.c maildirrequota.h \ - maildirwatch.c maildirwatch.h loginexec.c loginexec.h - -noinst_PROGRAMS=deliverquota maildirmake testmaildirfilter maildirkwtest \ - maildirkw maildiracl maildiraclttest - -deliverquota_SOURCES=deliverquota.c -deliverquota_DEPENDENCIES=libmaildir.la ../rfc822/librfc822.la \ - ../numlib/libnumlib.la -deliverquota_LDADD=libmaildir.la ../rfc822/librfc822.la ../numlib/libnumlib.la -deliverquota_LDFLAGS=-static - -maildirmake_SOURCES=maildirmake.c -maildirmake_DEPENDENCIES=libmaildir.la ../numlib/libnumlib.la \ - ../rfc822/librfc822.la -maildirmake_LDADD=libmaildir.la ../numlib/libnumlib.la \ - ../rfc822/librfc822.la -maildirmake_LDFLAGS=-static - -testmaildirfilter_SOURCES=maildirfiltertypelist.h testmaildirfilter.c -testmaildirfilter_DEPENDENCIES=libmaildir.la ../numlib/libnumlib.la -testmaildirfilter_LDADD=libmaildir.la ../numlib/libnumlib.la @LIBPCRE@ -testmaildirfilter_LDFLAGS=-static - -maildirkwtest_SOURCES=maildirkwtest.c -maildirkwtest_LDADD=libmaildir.la -maildirkwtest_DEPENDENCIES=libmaildir.la -maildirkwtest_LDFLAGS=-static - -maildirkw_SOURCES=maildirkw.c -maildirkw_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la \ - `cat maildir.libdeps` -maildirkw_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ - ../numlib/libnumlib.la maildir.libdeps -maildirkw_LDFLAGS=-static - -maildiracl=maildiracl.c -maildiracl_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la \ - `cat maildir.libdeps` -maildiracl_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ - ../numlib/libnumlib.la maildir.libdeps -maildiracl_LDFLAGS=-static - -maildiraclttest_SOURCES=testmaildiraclt.c -maildiraclttest_LDADD=libmaildir.la ../liblock/liblock.la \ - ../numlib/libnumlib.la `cat maildir.libdeps` -maildiraclttest_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ - ../numlib/libnumlib.la maildir.libdeps -maildiraclttest_LDFLAGS=-static - -EXTRA_DIST=README.maildirquota.html README.maildirquota.txt \ - README.imapkeywords.html \ - README.maildirfilter.html \ - README.sharedfolders.html README.sharedfolders.txt \ - maildirkwtest.txt \ - testsuite testsuite.txt testsuite2 testsuite2.txt quotawarnmsg $(DOCS) - -HTML2TXT=links -dump -no-numbering - -README.maildirquota.txt: README.maildirquota.html - $(HTML2TXT) README.maildirquota.html >README.maildirquota.txt - -README.sharedfolders.txt: README.sharedfolders.html - $(HTML2TXT) README.sharedfolders.html >README.sharedfolders.txt - -mailbot.h: config.status - echo '#define MAILBOT "@MAILBOT@"' >mailbot.h - -maildirsharedrc.h: config.status - echo '#define MAILDIRSHAREDRC "$(sysconfdir)/maildirshared"' >maildirsharedrc.h - -maildirfilterconfig.h: config.status - echo '#define MAILDIRFILTERCONFIG "$(sysconfdir)/maildirfilterconfig"' >maildirfilterconfig.h - -autoresponsequota.h: config.status - echo '#define AUTORESPONSEQUOTA "$(sysconfdir)/autoresponsesquota"' >autoresponsequota.h - -quotawarnmsg.h: config.status - echo '#define QUOTAWARNMSG "$(sysconfdir)/quotawarnmsg"' >quotawarnmsg.h -maildir.libdeps: config.status - echo @LIBFAM@ >maildir.libdeps - -clean-local: - rm -rf maildir.libdeps testmd - -check-am: - @SHELL@ $(srcdir)/testsuite 2>&1 | cmp - $(srcdir)/testsuite.txt - test "@LIBPCRE@" != "" || exit 0 ; @SHELL@ $(srcdir)/testsuite2 2>&1 | cmp - $(srcdir)/testsuite2.txt - LC_ALL=C; export LC_ALL; ./maildirkwtest | cmp -s - $(srcdir)/maildirkwtest.txt - LC_ALL=C; export LC_ALL; ./maildiraclttest - -if HAVE_SGML - -deliverquota.html.in: deliverquota.sgml ../docbook/sgml2html - ../docbook/sgml2html deliverquota.sgml deliverquota.html.in - -deliverquota.8.in: deliverquota.sgml ../docbook/sgml2html - ../docbook/sgml2man deliverquota.sgml deliverquota.8.in - mv deliverquota.8 deliverquota.8.in - -maildirmake.html.in: maildirmake.sgml ../docbook/sgml2html - ../docbook/sgml2html maildirmake.sgml maildirmake.html.in - -maildirmake.1.in: maildirmake.sgml ../docbook/sgml2html - ../docbook/sgml2man maildirmake.sgml maildirmake.1.in - mv maildirmake.1 maildirmake.1.in - -maildiracl.html.in: maildiracl.sgml ../docbook/sgml2html - ../docbook/sgml2html maildiracl.sgml maildiracl.html.in - -maildiracl.1.in: maildiracl.sgml ../docbook/sgml2html - ../docbook/sgml2man maildiracl.sgml maildiracl.1.in - mv maildiracl.1 maildiracl.1.in - -maildirquota.html: maildirquota.sgml ../docbook/sgml2html - ../docbook/sgml2html maildirquota.sgml maildirquota.html - -maildirquota.7: maildirquota.sgml ../docbook/sgml2man - ../docbook/sgml2man maildirquota.sgml maildirquota.7 - -maildir.html: maildir.sgml ../docbook/sgml2html - ../docbook/sgml2html maildir.sgml maildir.html - -maildir.5: maildir.sgml ../docbook/sgml2man - ../docbook/sgml2man maildir.sgml maildir.5 - -maildirkw.html: maildirkw.sgml ../docbook/sgml2html - ../docbook/sgml2html maildirkw.sgml maildirkw.html - -maildirkw.1: maildirkw.sgml ../docbook/sgml2man - ../docbook/sgml2man maildirkw.sgml maildirkw.1 - -endif - -deliverquota.html: deliverquota.html.in - ./config.status --file=$@ - -deliverquota.8: deliverquota.8.in - ./config.status --file=$@ - -maildirmake.html: maildirmake.html.in - ./config.status --file=$@ - -maildirmake.1: maildirmake.1.in - ./config.status --file=$@ - -maildiracl.html: maildiracl.html.in - ./config.status --file=$@ - -maildiracl.1: maildiracl.1.in - ./config.status --file=$@ - -# autoresponse.c: autoresponsequota.h - -DISTCLEANFILES=$(BUILT_SOURCES) diff --git a/contrib/notmuch-deliver/maildrop/maildir/configure.in b/contrib/notmuch-deliver/maildrop/maildir/configure.in deleted file mode 100644 index dfdd22a3..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/configure.in +++ /dev/null @@ -1,165 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl -dnl Copyright 1998 - 2001 Double Precision, Inc. See COPYING for -dnl distribution information. - -AC_INIT(maildir, 0.11, [courier-maildrop@lists.sourceforge.net]) - ->confdefs.h # Kill PACKAGE_ macros - -AC_CONFIG_SRCDIR(maildirquota.c) -LPATH="$PATH:/usr/local/bin" -AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE([foreign no-define]) -AM_CONFIG_HEADER(config.h) - -dnl Checks for programs. -AC_PROG_AWK -AC_USE_SYSTEM_EXTENSIONS -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_LN_S -AC_LIBTOOL_DLOPEN -AM_PROG_LIBTOOL - -AC_PROG_CXX - -AC_PATH_PROGS(PERL, perl5 perl, perl, $LPATH) - -if test "$GCC" = "yes" -then - CFLAGS="$CFLAGS -Wall" -fi - -if test "$GXX" = "yes" -then - CXXFLAGS="$CXXFLAGS -Wall" -fi - -CFLAGS="$CFLAGS -I${srcdir}/.. -I.." - -dnl Checks for libraries. - -dnl Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_HEADER_TIME -AC_CHECK_HEADERS(sys/stat.h sys/wait.h fcntl.h unistd.h sysexits.h utime.h pcre.h pcre/pcre.h) - -AC_CHECK_HEADER([pcre.h], - [LIBPCRE=-lpcre]) - -AC_CHECK_HEADER([pcre/pcre.h], - [LIBPCRE=-lpcre]) - -AC_SUBST(LIBPCRE) - -AC_HEADER_SYS_WAIT - -AC_LANG_CPLUSPLUS -AC_CHECK_HEADERS(vector vector.h) -AC_LANG_C - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_OFF_T -AC_TYPE_SIZE_T -AC_TYPE_UID_T -AC_STRUCT_TM -AC_SYS_LARGEFILE - -dnl Checks for library functions. -AC_CHECK_HEADER(fam.h, :, :) -AC_CHECK_FUNCS(symlink readlink strcasecmp utime utimes) -AC_CHECK_LIB(fam, FAMOpen, [ - LIBFAM=-lfam - AC_DEFINE_UNQUOTED(HAVE_FAM,1, - [ Whether libfam.a is available ]) - - AC_CHECK_HEADER(fam.h, : , [ -AC_MSG_WARN([[The development header files and libraries for fam,]]) -AC_MSG_WARN([[the File Alteration Monitor, are not installed.]]) -AC_MSG_WARN([[You appear to have the FAM runtime libraries installed,]]) -AC_MSG_WARN([[so you need to simply install the additional development]]) -AC_MSG_WARN([[package for your operating system.]]) -AC_MSG_ERROR([[FAM development libraries not found.]]) ] - ) - ]) - -AC_SUBST(LIBFAM) - -echo "$LIBFAM" >maildir.libdeps - -AC_CACHE_CHECK([for missing gethostname prototype],maildir_cv_SYS_GETHOSTNAME, - -AC_TRY_COMPILE([ -#if HAVE_UNISTD_H -#include -#endif - -extern "C" int gethostname(int,int); -],[ -],maildir_cv_SYS_GETHOSTNAME=yes,maildir_cv_SYS_GETHOSTNAME=no -) - -) - -if test $maildir_cv_SYS_GETHOSTNAME = "no" -then - AC_DEFINE_UNQUOTED(HAS_GETHOSTNAME,1, - [ Whether gethostname() is prototyped ]) -fi - -AC_ARG_WITH(db, [ --with-db=gdbm Use the GDBM library. - --with-db=db Use the libdb.a library.], - db="$withval", db="") - -if test "$db" = "no" -then - db="" -fi - -if test "$db" != "" -then - AC_DEFINE_UNQUOTED(HAVE_DBOBJ,1, - [ Whether the top-level configure script defined dbobj ]) -fi - -AC_ARG_WITH(trashquota, [ --with-trashquota Count deleted messages as part of the quota], - trashquota="$withval", - trashquota="no") - -if test "$trashquota" = "yes" -then - AC_DEFINE_UNQUOTED(TRASHQUOTA,1, - [ Whether to count deleted messages towards the maildir quota ]) -fi - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -eval "prefix=$prefix" -eval "exec_prefix=$exec_prefix" -eval "sysconfdir=$sysconfdir" - -AC_PATH_PROGS(MAILBOT, mailbot, mailbot, $LPATH) - -if test -d $srcdir/../courier -then - MAILBOT="$bindir/mailbot" - AC_DEFINE_UNQUOTED(HAVE_COURIER,1, - [ Whether building the full Courier suite. ]) -fi - -AC_SUBST(MAILBOT) -AM_CONDITIONAL(HAVE_SGML, test -d ${srcdir}/../docbook) - -if test "$target_os" = "cygwin" -then - AC_DEFINE_UNQUOTED(MDIRSEP, "!", - [ Maildir target separator ]) -else - AC_DEFINE_UNQUOTED(MDIRSEP, ":", - [ Maildir target separator ]) -fi - -AC_OUTPUT(Makefile sharedindexinstall sharedindexsplit) diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildircreate.c b/contrib/notmuch-deliver/maildrop/maildir/maildircreate.c deleted file mode 100644 index 5efc0afb..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/maildircreate.c +++ /dev/null @@ -1,240 +0,0 @@ -/* -** Copyright 1998 - 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#include "maildircreate.h" -#include "maildirmisc.h" -#include -#if HAVE_SYS_STAT_H -#include -#endif - -#if TIME_WITH_SYS_TIME -#include -#include -#else -#if HAVE_SYS_TIME_H -#include -#else -#include -#endif -#endif -#if HAVE_SYS_STAT_H -#include -#endif - -#if HAVE_UNISTD_H -#include -#endif -#include -#include -#include -#include -#include -#include "numlib/numlib.h" - - - -FILE *maildir_tmpcreate_fp(struct maildir_tmpcreate_info *info) -{ - int fd=maildir_tmpcreate_fd(info); - FILE *fp; - - if (fd < 0) - return NULL; - - fp=fdopen(fd, "w+"); - - if (fp == NULL) - { - close(fd); - return NULL; - } - - return fp; -} - -static int maildir_tmpcreate_fd_do(struct maildir_tmpcreate_info *info); - -#define KEEPTRYING (60 * 60) -#define SLEEPFOR 3 - -int maildir_tmpcreate_fd(struct maildir_tmpcreate_info *info) -{ - int i; - - if (!info->doordie) - return (maildir_tmpcreate_fd_do(info)); - - for (i=0; i= 0 || errno != EAGAIN) - return fd; - - sleep(SLEEPFOR); - } - - return -1; -} - -static int maildir_tmpcreate_fd_do(struct maildir_tmpcreate_info *info) -{ - const char *maildir=info->maildir; - const char *uniq=info->uniq; - const char *hostname=info->hostname; - - char hostname_buf[256]; - char time_buf[NUMBUFSIZE]; - char usec_buf[NUMBUFSIZE]; - char pid_buf[NUMBUFSIZE]; - char len_buf[NUMBUFSIZE+3]; - char dev_buf[NUMBUFSIZE]; - char ino_buf[NUMBUFSIZE]; - struct timeval tv; - - struct stat stat_buf; - int fd; - - if (!maildir) - maildir="."; - if (!uniq) - uniq=""; - - if (!hostname || !*hostname) - { - hostname_buf[sizeof(hostname_buf)-1]=0; - if (gethostname(hostname_buf, sizeof(hostname_buf)-1) < 0) - strcpy(hostname_buf, "localhost"); - hostname=hostname_buf; - } - - gettimeofday(&tv, NULL); - - libmail_str_time_t(tv.tv_sec, time_buf); - libmail_str_time_t(tv.tv_usec, usec_buf); - libmail_str_pid_t(getpid(), pid_buf); - len_buf[0]=0; - if (info->msgsize > 0) - { - strcpy(len_buf, ",S="); - libmail_str_size_t(info->msgsize, len_buf+3); - } - - if (info->tmpname) - free(info->tmpname); - - info->tmpname=malloc(strlen(maildir)+strlen(uniq)+ - strlen(hostname)+strlen(time_buf)+ - strlen(usec_buf)+ - strlen(pid_buf)+strlen(len_buf)+100); - - if (!info->tmpname) - { - maildir_tmpcreate_free(info); - return -1; - } - - strcpy(info->tmpname, maildir); - strcat(info->tmpname, "/tmp/"); - strcat(info->tmpname, time_buf); - strcat(info->tmpname, ".M"); - strcat(info->tmpname, usec_buf); - strcat(info->tmpname, "P"); - strcat(info->tmpname, pid_buf); - - if (*uniq) - strcat(strcat(info->tmpname, "_"), uniq); - strcat(info->tmpname, "."); - strcat(info->tmpname, hostname); - strcat(info->tmpname, len_buf); - - if (stat( info->tmpname, &stat_buf) == 0) - { - maildir_tmpcreate_free(info); - errno=EAGAIN; - return -1; - } - - if (errno != ENOENT) - { - maildir_tmpcreate_free(info); - if (errno == EAGAIN) - errno=EIO; - return -1; - } - - if ((fd=maildir_safeopen_stat(info->tmpname, O_CREAT|O_RDWR|O_TRUNC, - info->openmode, &stat_buf)) < 0) - { - maildir_tmpcreate_free(info); - return -1; - } - - libmail_strh_dev_t(stat_buf.st_dev, dev_buf); - libmail_strh_ino_t(stat_buf.st_ino, ino_buf); - - if (info->newname) - free(info->newname); - - info->newname=malloc(strlen(info->tmpname)+strlen(ino_buf)+ - strlen(dev_buf)+3); - - if (!info->newname) - { - maildir_tmpcreate_free(info); - unlink(info->tmpname); - close(fd); - if (errno == EAGAIN) - errno=EIO; - return -1; - } - - strcpy(info->newname, maildir); - strcat(info->newname, "/new/"); - strcat(info->newname, time_buf); - strcat(info->newname, ".M"); - strcat(info->newname, usec_buf); - strcat(info->newname, "P"); - strcat(info->newname, pid_buf); - strcat(info->newname, "V"); - strcat(info->newname, dev_buf); - strcat(info->newname, "I"); - strcat(info->newname, ino_buf); - if (*uniq) - strcat(strcat(info->newname, "_"), uniq); - strcat(info->newname, "."); - strcat(info->newname, hostname); - strcat(info->newname, len_buf); - - return fd; -} - -void maildir_tmpcreate_free(struct maildir_tmpcreate_info *info) -{ - if (info->tmpname) - free(info->tmpname); - info->tmpname=NULL; - - if (info->newname) - free(info->newname); - info->newname=NULL; -} - -int maildir_movetmpnew(const char *tmpname, const char *newname) -{ - if (link(tmpname, newname) == 0) - { - unlink(tmpname); - return 0; - } - - if (errno != EXDEV) - return -1; - - /* AFS? */ - - return rename(tmpname, newname); -} diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildircreate.h b/contrib/notmuch-deliver/maildrop/maildir/maildircreate.h deleted file mode 100644 index 85391454..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/maildircreate.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef maildircreate_h -#define maildircreate_h - -/* -** Copyright 1998 - 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - /* Create messages in maildirs */ - -struct maildir_tmpcreate_info { - const char *maildir; - unsigned long msgsize; /* If known, 0 otherwise (must use requota later)*/ - const char *uniq; /* You need when creating multiple msgs */ - const char *hostname; /* If known, NULL otherwise */ - int openmode; /* Default open mode */ - int doordie; /* Loop until we get it right. */ - char *tmpname; /* On exit, filename in tmp */ - char *newname; /* On exit, filename in new */ -}; - -#define maildir_tmpcreate_init(i) \ - do \ - { \ - memset( (i), 0, sizeof(*(i))); \ - (i)->openmode=0644; \ - } while(0) - -int maildir_tmpcreate_fd(struct maildir_tmpcreate_info *); -FILE *maildir_tmpcreate_fp(struct maildir_tmpcreate_info *); -void maildir_tmpcreate_free(struct maildir_tmpcreate_info *); - - /* Move created message from tmp to new */ -int maildir_movetmpnew(const char *tmpname, const char *newname); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h b/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h deleted file mode 100644 index e1e7c19a..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h +++ /dev/null @@ -1,201 +0,0 @@ -#ifndef maildirmisc_h -#define maildirmisc_h - -/* -** Copyright 2000-2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#if HAVE_SYS_STAT_H -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/* -** -** Miscellaneous maildir-related code -** -*/ - -/* Some special folders */ - -#define INBOX "INBOX" -#define DRAFTS "Drafts" -#define SENT "Sent" -#define TRASH "Trash" -#define SHARED "shared" - -#define SHAREDSUBDIR "shared-folders" - -#define NEWSHAREDSP "#shared" -#define NEWSHARED "#shared." - -#define PUBLIC "public" /* SMAP */ - -int maildir_make(const char *maildir, int perm, int subdirperm, - int folder); - -int maildir_del(const char *maildir); - -int maildir_del_content(const char *maildir); - -char *maildir_name2dir(const char *maildir, /* DIR location */ - const char *foldername); /* INBOX.name */ - -char *maildir_location(const char *homedir, - const char *maildir); -/* -** Homedir is the account's home directory, "maildir" is where the account's -** default Maildir is configured to be (usually "./Maildir"). Combine the -** two to produce an absolute pathname. -*/ - - -char *maildir_folderdir(const char *, /* maildir */ - const char *); /* folder name */ - /* Returns the directory corresponding to foldername (foldername is - ** checked to make sure that it's a valid name, else we set errno - ** to EINVAL, and return (0). - */ - -char *maildir_filename(const char *, /* maildir */ - const char *, /* folder */ - const char *); /* filename */ - /* - ** Builds the filename to this message, suitable for opening. - ** If the file doesn't appear to be there, search the maildir to - ** see if someone changed the flags, and return the current filename. - */ - -int maildir_safeopen(const char *, /* filename */ - int, /* mode */ - int); /* perm */ - -/* -** Same arguments as open(). When we're accessing a shared maildir, -** prevent someone from playing cute and dumping a bunch of symlinks -** in there. This function will open the indicate file only if the -** last component is not a symlink. -** This is implemented by opening the file with O_NONBLOCK (to prevent -** a DOS attack of someone pointing the symlink to a pipe, causing -** the open to hang), clearing O_NONBLOCK, then stat-int the file -** descriptor, lstating the filename, and making sure that dev/ino -** match. -*/ - -int maildir_semisafeopen(const char *, /* filename */ - int, /* mode */ - int); /* perm */ - -/* -** Same thing, except that we allow ONE level of soft link indirection, -** because we're reading from our own maildir, which points to the -** message in the sharable maildir. -*/ - -int maildir_safeopen_stat(const char *path, int mode, int perm, - struct stat *stat1); - /* Sane as maildir_safeopen(), except that we also initialize a - ** struct stat, saving an extra syscall to the caller. - */ - -int maildir_mkdir(const char *); /* directory */ -/* -** Create maildir including all subdirectories in the path (like mkdir -p) -*/ - -void maildir_purgetmp(const char *); /* maildir */ - /* purges old stuff out of tmp */ - -void maildir_purge(const char *, /* directory */ - unsigned); /* time_t to purge */ - -void maildir_getnew(const char *, /* maildir */ - const char *, /* folder */ - void (*)(const char *, void *), /* Callback function for - ** every moved msg. - */ - void *arg); /* Passthrough callback arg */ - - /* move messages from new to cur */ - -int maildir_deletefolder(const char *, /* maildir */ - const char *); /* folder */ - /* deletes a folder */ - -void maildir_list(const char *maildir, - void (*func)(const char *, void *), - void *voidp); - -void maildir_list_sharable(const char *, /* maildir */ - void (*)(const char *, void *), /* callback function */ - void *); /* 2nd arg to callback func */ - /* list sharable folders */ - -int maildir_shared_subscribe(const char *, /* maildir */ - const char *); /* folder */ - /* subscribe to a shared folder */ - -void maildir_list_shared(const char *, /* maildir */ - void (*)(const char *, void *), /* callback function */ - void *); /* 2nd arg to the callback func */ - /* list subscribed folders */ - -int maildir_shared_unsubscribe(const char *, /* maildir */ - const char *); /* folder */ - /* unsubscribe from a shared folder */ - -char *maildir_shareddir(const char *, /* maildir */ - const char *); /* folder */ - /* - ** Validate and return a path to a shared folder. folderdir must be - ** a name of a valid shared folder. - */ - -void maildir_shared_sync(const char *); /* maildir */ - /* "sync" the shared folder */ - -int maildir_sharedisro(const char *); /* maildir */ - /* maildir is a shared read-only folder */ - -int maildir_unlinksharedmsg(const char *); /* filename */ - /* Remove a message from a shared folder */ - -/* Internal function that reads a symlink */ - -char *maildir_getlink(const char *); - - /* Determine whether the maildir filename has a certain flag */ - -int maildir_hasflag(const char *filename, char); - -#define MAILDIR_DELETED(f) maildir_hasflag((f), 'T') - - /* - ** Hierarchical maildir rename. - */ - -#define MAILDIR_RENAME_FOLDER 1 -#define MAILDIR_RENAME_SUBFOLDERS 2 - -int maildir_rename(const char *maildir, /* Path to the maildir */ - const char *oldname, /* .foldername */ - const char *newname, /* .foldername */ - int flags, /* See above */ - void (*callback_func)(const char *old_path, - const char *new_path) - ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c b/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c deleted file mode 100644 index 28a3ac21..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/maildirmkdir.c +++ /dev/null @@ -1,77 +0,0 @@ -/* -** Copyright 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#if HAVE_UNISTD_H -#include -#endif -#include - -#include "maildirmisc.h" - - -int maildir_mkdir(const char *dir) -{ -char *buf, *p; -size_t l; - - if (dir == 0 || dir[0] == 0) - { - errno = EINVAL; - return (-1); - } - l = strlen(dir); - if ((buf = malloc(l + sizeof("/tmp"))) == 0) - { - errno = ENOMEM; - return (-1); - } - strcpy(buf, dir); - strcpy(buf+l, "/cur"); - - /* We do mkdir -p here */ - - p = buf+1; - while ((p = strchr(p, '/')) != 0) - { - *p = '\0'; - if (mkdir(buf, 0700) < 0 && errno != EEXIST) - { - free(buf); - return (-1); - } - *p++ = '/'; - } - - if (mkdir(buf, 0700) < 0 && errno != EEXIST) { - free(buf); - return (-1); - } - strcpy(buf+l, "/new"); - if (mkdir(buf, 0700) < 0 && errno != EEXIST) { - free(buf); - return (-1); - } - /* - * make /tmp last because this is the one we open first - - * the existence of this directory implies the whole - * Maildir structure is complete - */ - strcpy(buf+l, "/tmp"); - if (mkdir(buf, 0700) < 0 && errno != EEXIST) { - free(buf); - return (-1); - } - free(buf); - return (0); -} - diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildiropen.c b/contrib/notmuch-deliver/maildrop/maildir/maildiropen.c deleted file mode 100644 index 25428737..00000000 --- a/contrib/notmuch-deliver/maildrop/maildir/maildiropen.c +++ /dev/null @@ -1,140 +0,0 @@ -/* -** Copyright 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#if HAVE_UNISTD_H -#include -#endif -#include -#include -#include -#include - -#include "maildirmisc.h" - - -char *maildir_getlink(const char *filename) -{ -#if HAVE_READLINK -size_t bufsiz; -char *buf; - - bufsiz=0; - buf=0; - - for (;;) - { - int n; - - if (buf) free(buf); - bufsiz += 256; - if ((buf=malloc(bufsiz)) == 0) - { - perror("malloc"); - return (0); - } - if ((n=readlink(filename, buf, bufsiz)) < 0) - { - free(buf); - return (0); - } - if (n < bufsiz) - { - buf[n]=0; - break; - } - } - return (buf); -#else - return (0); -#endif -} - -int maildir_semisafeopen(const char *path, int mode, int perm) -{ - -#if HAVE_READLINK - -char *l=maildir_getlink(path); - - if (l) - { - int f; - - if (*l != '/') - { - char *q=malloc(strlen(path)+strlen(l)+2); - char *s; - - if (!q) - { - free(l); - return (-1); - } - - strcpy(q, path); - if ((s=strchr(q, '/')) != 0) - s[1]=0; - else *q=0; - strcat(q, l); - free(l); - l=q; - } - - f=maildir_safeopen(l, mode, perm); - - free(l); - return (f); - } -#endif - - return (maildir_safeopen(path, mode, perm)); -} - -int maildir_safeopen(const char *path, int mode, int perm) -{ - struct stat stat1; - - return maildir_safeopen_stat(path, mode, perm, &stat1); -} - -int maildir_safeopen_stat(const char *path, int mode, int perm, - struct stat *stat1) -{ - struct stat stat2; - - int fd=open(path, mode -#ifdef O_NONBLOCK - | O_NONBLOCK -#else - | O_NDELAY -#endif - , perm); - - if (fd < 0) return (fd); - if (fcntl(fd, F_SETFL, (mode & O_APPEND)) || fstat(fd, stat1) - || lstat(path, &stat2)) - { - close(fd); - return (-1); - } - - if (stat1->st_dev != stat2.st_dev || stat1->st_ino != stat2.st_ino) - { - close(fd); - errno=ENOENT; - return (-1); - } - - return (fd); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/Makefile.am b/contrib/notmuch-deliver/maildrop/numlib/Makefile.am deleted file mode 100644 index 0a5f103d..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright 1998 - 2004 Double Precision, Inc. See COPYING for -# distribution information. - - -CLEANFILES=$(noinst_DATA) -noinst_LTLIBRARIES=libnumlib.la - -libnumlib_la_SOURCES=\ - atotimet.c \ - atouidt.c \ - changeuidgid.c \ - numlib.h \ - strdevt.c \ - strgidt.c \ - strhdevt.c \ - strhinot.c \ - strhpidt.c \ - strhtimet.c \ - strinot.c \ - strofft.c \ - strpidt.c \ - strsize.c \ - strsizet.c \ - strtimet.c \ - struidt.c diff --git a/contrib/notmuch-deliver/maildrop/numlib/atotimet.c b/contrib/notmuch-deliver/maildrop/numlib/atotimet.c deleted file mode 100644 index 0360b5b2..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/atotimet.c +++ /dev/null @@ -1,13 +0,0 @@ -/* -** Copyright 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -LIBMAIL_STRIMPL(time_t, libmail_strtotime_t, libmail_atotime_t) diff --git a/contrib/notmuch-deliver/maildrop/numlib/atouidt.c b/contrib/notmuch-deliver/maildrop/numlib/atouidt.c deleted file mode 100644 index 6f869d54..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/atouidt.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -** Copyright 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -LIBMAIL_STRIMPL(uid_t, libmail_strtouid_t, libmail_atouid_t) -LIBMAIL_STRIMPL(gid_t, libmail_strtogid_t, libmail_atogid_t) diff --git a/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c b/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c deleted file mode 100644 index adaee406..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c +++ /dev/null @@ -1,110 +0,0 @@ -/* -** Copyright 1998 - 2002 Double Precision, Inc. See COPYING for -** distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include -#if HAVE_UNISTD_H -#include -#endif -#include -#include -#include -#include -#include -#include - -#include "numlib.h" - - -void libmail_changegroup(gid_t gid) -{ - if ( setgid(gid)) - { - perror("setgid"); - exit(1); - } - -#if HAVE_SETGROUPS - if ( getuid() == 0 && setgroups(1, &gid) ) - { - perror("setgroups"); - exit(1); - } -#endif -} - -void libmail_changeuidgid(uid_t uid, gid_t gid) -{ - libmail_changegroup(gid); - if ( setuid(uid)) - { - perror("setuid"); - exit(1); - } -} - -void libmail_changeusername(const char *uname, const gid_t *forcegrp) -{ -struct passwd *pw; -uid_t changeuid; -gid_t changegid; - -/* uname might be a pointer returned from a previous called to getpw(), -** and libc has a problem getting it back. -*/ -char *p=malloc(strlen(uname)+1); - - if (!p) - { - perror("malloc"); - exit(1); - } - strcpy(p, uname); - - errno=ENOENT; - if ((pw=getpwnam(p)) == 0) - { - free(p); - perror("getpwnam"); - exit(1); - } - free(p); - - changeuid=pw->pw_uid; - - if ( !forcegrp ) forcegrp= &pw->pw_gid; - - changegid= *forcegrp; - - if ( setgid( changegid )) - { - perror("setgid"); - exit(1); - } - -#if HAVE_INITGROUPS - if ( getuid() == 0 && initgroups(pw->pw_name, changegid) ) - { - perror("initgroups"); - exit(1); - } -#else -#if HAVE_SETGROUPS - if ( getuid() == 0 && setgroups(1, &changegid) ) - { - perror("setgroups"); - exit(1); - } -#endif -#endif - - if (setuid(changeuid)) - { - perror("setuid"); - exit(1); - } -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/configure.in b/contrib/notmuch-deliver/maildrop/numlib/configure.in deleted file mode 100644 index 7479725b..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/configure.in +++ /dev/null @@ -1,46 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl -dnl Copyright 1998 - 2010 Double Precision, Inc. See COPYING for -dnl distribution information. - -AC_PREREQ(2.59) -AC_INIT(numlib, 0.10, courier-users@lists.sourceforge.net) - ->confdefs.h # Kill PACKAGE_ macros - -AC_CONFIG_SRCDIR([atotimet.c]) -AM_CONFIG_HEADER([config.h]) -AM_INIT_AUTOMAKE([foreign no-define]) - -dnl Checks for programs. -AC_PROG_AWK -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_LIBTOOL - -if test "$GCC" = "yes" -then - CFLAGS="$CFLAGS -Wall" -fi - -dnl Checks for libraries. - -dnl Checks for header files. - -AC_CHECK_HEADERS(unistd.h stdint.h) - -AC_CHECK_TYPE(int64_t, [ : ], - [ - AC_DEFINE_UNQUOTED(int64_t,long long,[default definition of int64_t]) - ]) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_TYPE_UID_T -AC_TYPE_PID_T -AC_SYS_LARGEFILE - -dnl Checks for library functions. - -AC_CHECK_FUNCS(setgroups initgroups) -AC_OUTPUT(Makefile) diff --git a/contrib/notmuch-deliver/maildrop/numlib/numlib.h b/contrib/notmuch-deliver/maildrop/numlib/numlib.h deleted file mode 100644 index c31d9b1a..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/numlib.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef numlib_h -#define numlib_h - -/* -** Copyright 1998 - 2010 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#if HAVE_CONFIG_H -#include "../numlib/config.h" /* VPATH build */ -#endif - -#if HAVE_STDINT_H -#include -#endif - -#include -#include - -#define NUMBUFSIZE 60 - -/* Convert various system types to decimal */ - -char *libmail_str_time_t(time_t, char *); -char *libmail_str_off_t(off_t, char *); -char *libmail_str_int64_t(int64_t, char *); -char *libmail_str_pid_t(pid_t, char *); -char *libmail_str_dev_t(dev_t, char *); -char *libmail_str_ino_t(ino_t, char *); -char *libmail_str_uid_t(uid_t, char *); -char *libmail_str_gid_t(gid_t, char *); -char *libmail_str_size_t(size_t, char *); - -char *libmail_str_sizekb(unsigned long, char *); /* X Kb or X Mb */ - -/* Convert selected system types to hex */ - -char *libmail_strh_time_t(time_t, char *); -char *libmail_strh_pid_t(pid_t, char *); -char *libmail_strh_ino_t(ino_t, char *); -char *libmail_strh_dev_t(dev_t, char *); - -/* And, now let's do the reverse */ - -time_t libmail_strtotime_t(const char **); -time_t libmail_atotime_t(const char *); - -uid_t libmail_strtouid_t(const char **); -uid_t libmail_atouid_t(const char *); - -gid_t libmail_strtogid_t(const char **); -gid_t libmail_atogid_t(const char *); - - /* Common macros: */ - -#define LIBMAIL_STRIMPL(type, f1, f2) \ -\ -type f1(const char **p)\ -{\ - type n=0;\ - while ( **p >= '0' && **p <= '9') n=n*10 + (char)(*(*p)++ - '0');\ - return n;\ -}\ -\ -type f2(const char *p)\ -{\ - return f1(&p);\ -} - - -/* -** The following functions are used by root to reset its user and group id -** to the authenticated user's. Various functions are provided to handle -** various situations. -*/ - -void libmail_changegroup(gid_t); /* Set the group id only. Also clear any - ** auxiliary group ids */ - -void libmail_changeuidgid(uid_t, gid_t); - /* Set both user id and group id. Also clear - ** aux group ids */ - -void libmail_changeusername(const char *, const gid_t *); - /* - ** Set the userid to the indicate user's. If second argument is - ** not null, it points to the groupid to set. If it's null, the - ** group id is taken from the passwd file. Auxiliary IDs are set - ** to any aux IDs set for the user in the group file. If there are - ** no aux group IDs for the user, any AUX ids are cleared. - */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/contrib/notmuch-deliver/maildrop/numlib/strdevt.c b/contrib/notmuch-deliver/maildrop/numlib/strdevt.c deleted file mode 100644 index aa8b0282..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strdevt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_dev_t(dev_t t, char *arg) -{ - char buf[NUMBUFSIZE]; - char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strgidt.c b/contrib/notmuch-deliver/maildrop/numlib/strgidt.c deleted file mode 100644 index 828a4550..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strgidt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 1998 - 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_gid_t(gid_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c b/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c deleted file mode 100644 index 9ff45f28..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c +++ /dev/null @@ -1,28 +0,0 @@ -/* -** Copyright 1998 - 2003 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -static const char xdigit[]="0123456789ABCDEF"; - -char *libmail_strh_dev_t(dev_t t, char *arg) -{ -char buf[sizeof(t)*2+1]; -char *p=buf+sizeof(buf)-1; -unsigned i; - - *p=0; - for (i=0; i - - -static const char xdigit[]="0123456789ABCDEF"; - -char *libmail_strh_ino_t(ino_t t, char *arg) -{ -char buf[sizeof(t)*2+1]; -char *p=buf+sizeof(buf)-1; -unsigned i; - - *p=0; - for (i=0; i - - -static const char xdigit[]="0123456789ABCDEF"; - -char *libmail_strh_pid_t(pid_t t, char *arg) -{ -char buf[sizeof(t)*2+1]; -char *p=buf+sizeof(buf)-1; -unsigned i; - - *p=0; - for (i=0; i - - -static const char xdigit[]="0123456789ABCDEF"; - -char *libmail_strh_time_t(time_t t, char *arg) -{ -char buf[sizeof(t)*2+1]; -char *p=buf+sizeof(buf)-1; -unsigned i; - - *p=0; - for (i=0; i - - -char *libmail_str_ino_t(ino_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strofft.c b/contrib/notmuch-deliver/maildrop/numlib/strofft.c deleted file mode 100644 index 567f912b..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strofft.c +++ /dev/null @@ -1,64 +0,0 @@ -/* -** Copyright 1998 - 2010 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_off_t(off_t t, char *arg) -{ - char buf[NUMBUFSIZE]; - char *p=buf+sizeof(buf)-1; - int isneg=0; - - if (t < 0) - { - t= -t; - isneg=1; - } - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - - if (isneg) - *--p='-'; - - return (strcpy(arg, p)); -} - -char *libmail_str_int64_t(int64_t t, char *arg) -{ - char buf[NUMBUFSIZE]; - char *p=buf+sizeof(buf)-1; - int isneg=0; - - if (t < 0) - { - t= -t; - isneg=1; - } - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - - if (isneg) - *--p='-'; - - return (strcpy(arg, p)); -} - - - diff --git a/contrib/notmuch-deliver/maildrop/numlib/strpidt.c b/contrib/notmuch-deliver/maildrop/numlib/strpidt.c deleted file mode 100644 index 0c29b07e..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strpidt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 1998 - 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_pid_t(pid_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strsize.c b/contrib/notmuch-deliver/maildrop/numlib/strsize.c deleted file mode 100644 index 1c903122..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strsize.c +++ /dev/null @@ -1,61 +0,0 @@ -/* -** Copyright 2001 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -static void cat_n(char *buf, unsigned long n) -{ -char bb[NUMBUFSIZE+1]; -char *p=bb+sizeof(bb)-1; - - *p=0; - do - { - *--p = "0123456789"[n % 10]; - n=n/10; - } while (n); - strcat(buf, p); -} - -char *libmail_str_sizekb(unsigned long n, char *sizebuf) -{ - /* If size is less than 1K bytes, display it as 0.xK */ - - if (n < 1024) - { - strcpy(sizebuf, "0."); - cat_n(sizebuf, (int)(10 * n / 1024 )); - strcat(sizebuf, "K"); - } - /* If size is less than 1 meg, display is as xK */ - - else if (n < 1024 * 1024) - { - *sizebuf=0; - cat_n(sizebuf, (unsigned long)(n+512)/1024); - strcat(sizebuf, "K"); - } - - /* Otherwise, display in megabytes */ - - else - { - unsigned long nm=(double)n / (1024.0 * 1024.0) * 10; - - *sizebuf=0; - cat_n( sizebuf, nm / 10); - strcat(sizebuf, "."); - cat_n( sizebuf, nm % 10); - strcat(sizebuf, "M"); - } - - return (sizebuf); -} - diff --git a/contrib/notmuch-deliver/maildrop/numlib/strsizet.c b/contrib/notmuch-deliver/maildrop/numlib/strsizet.c deleted file mode 100644 index fd9d1d1a..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strsizet.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 1998 - 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_size_t(size_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strtimet.c b/contrib/notmuch-deliver/maildrop/numlib/strtimet.c deleted file mode 100644 index 63307f22..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/strtimet.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 1998 - 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_time_t(time_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/maildrop/numlib/struidt.c b/contrib/notmuch-deliver/maildrop/numlib/struidt.c deleted file mode 100644 index 5843ed24..00000000 --- a/contrib/notmuch-deliver/maildrop/numlib/struidt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** Copyright 1998 - 2000 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "numlib.h" -#include - - -char *libmail_str_uid_t(uid_t t, char *arg) -{ -char buf[NUMBUFSIZE]; -char *p=buf+sizeof(buf)-1; - - *p=0; - do - { - *--p= '0' + (t % 10); - t=t / 10; - } while(t); - return (strcpy(arg, p)); -} diff --git a/contrib/notmuch-deliver/src/Makefile.am b/contrib/notmuch-deliver/src/Makefile.am deleted file mode 100644 index e2ff7baa..00000000 --- a/contrib/notmuch-deliver/src/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -DEFS+= -DGITHEAD=\"$(GITHEAD)\" -AM_CPPFLAGS= \ - -I$(top_builddir)/maildrop/numlib \ - -I$(top_srcdir)/maildrop \ - -I$(top_srcdir)/maildrop/maildir -AM_CFLAGS= @NOTMUCH_DELIVER_CFLAGS@ $(glib_CFLAGS) - -noinst_HEADERS=\ - $(top_srcdir)/maildrop/maildir/maildircreate.h \ - $(top_srcdir)/maildrop/maildir/maildirmisc.h - -bin_PROGRAMS=\ - notmuch-deliver - -notmuch_deliver_SOURCES=\ - $(top_srcdir)/maildrop/maildir/maildircreate.c \ - $(top_srcdir)/maildrop/maildir/maildiropen.c \ - $(top_srcdir)/maildrop/maildir/maildirmkdir.c \ - main.c -notmuch_deliver_LDADD=\ - $(top_builddir)/maildrop/numlib/libnumlib.la \ - $(glib_LIBS) diff --git a/contrib/notmuch-deliver/src/main.c b/contrib/notmuch-deliver/src/main.c deleted file mode 100644 index 032b9d62..00000000 --- a/contrib/notmuch-deliver/src/main.c +++ /dev/null @@ -1,469 +0,0 @@ -/* notmuch-deliver - If you make the user a promise... make sure you deliver it! - * - * Copyright © 2010 Ali Polatel - * Based in part upon deliverquota of maildrop which is: - * Copyright 1998 - 2009 Double Precision, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/ . - * - * Author: Ali Polatel - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SPLICE -#include -#endif - -#ifdef HAVE_SYSEXITS_H -#include -#endif - -#include -#include - -#include "maildircreate.h" -#include "maildirmisc.h" - -#ifndef EX_USAGE -#define EX_USAGE 64 -#endif - -#ifndef EX_SOFTWARE -#define EX_SOFTWARE 70 -#endif - -#ifndef EX_OSERR -#define EX_OSERR 71 -#endif - -#ifndef EX_IOERR -#define EX_IOERR 74 -#endif - -#ifndef EX_TEMPFAIL -#define EX_TEMPFAIL 75 -#endif - -#ifndef EX_NOPERM -#define EX_NOPERM 77 -#endif - -#ifndef EX_CONFIG -#define EX_CONFIG 78 -#endif - -static gboolean opt_create, opt_fatal, opt_folder, opt_version; -static gboolean opt_verbose = FALSE; -static gchar **opt_tags = NULL; -static gchar **opt_rtags = NULL; - -static GOptionEntry options[] = { - {"version", 'V', 0, G_OPTION_ARG_NONE, &opt_version, - "Display version", NULL}, - {"verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, - "Be verbose (useful for debugging)", NULL}, - {"create", 'c', 0, G_OPTION_ARG_NONE, &opt_create, - "Create the maildir if it doesn't exist", NULL}, - {"folder", 'f', 0, G_OPTION_ARG_NONE, &opt_folder, - "Add a dot before FOLDER, e.g: Local => $MAILDIR/.Local", NULL}, - {"tag", 't', 0, G_OPTION_ARG_STRING_ARRAY, &opt_tags, - "Add a tag to the message, may be specified multiple times", "TAG"}, - {"remove-tag", 'r', 0, G_OPTION_ARG_STRING_ARRAY, &opt_rtags, - "Remove a tag from the message, may be specified multiple times", "TAG"}, - {"fatal-add", 0, 0, G_OPTION_ARG_NONE, &opt_fatal, - "If adding the mail to the database fails, unlink it and return non-zero", NULL}, - {NULL, 0, 0, 0, NULL, NULL, NULL}, -}; - -static void -about(void) -{ - printf(PACKAGE"-"VERSION GITHEAD "\n"); -} - -static void -log_handler(G_GNUC_UNUSED const gchar *domain, GLogLevelFlags level, - const gchar *message, G_GNUC_UNUSED gpointer user_data) -{ - g_return_if_fail(message != NULL && message[0] != '\0'); - - if (!opt_verbose && (level & G_LOG_LEVEL_DEBUG)) - return; - - g_printerr(PACKAGE": %s\n", message); -} - -static gboolean -load_keyfile(const gchar *path, gchar **db_path, gchar ***tags) -{ - GKeyFile *fd; - GError *error; - - fd = g_key_file_new(); - error = NULL; - if (!g_key_file_load_from_file(fd, path, G_KEY_FILE_NONE, &error)) { - g_printerr("Failed to parse `%s': %s", path, error->message); - g_error_free(error); - g_key_file_free(fd); - return FALSE; - } - - *db_path = g_key_file_get_string(fd, "database", "path", &error); - if (*db_path == NULL) { - g_critical("Failed to parse database.path from `%s': %s", path, error->message); - g_error_free(error); - g_key_file_free(fd); - return FALSE; - } - - *tags = g_key_file_get_string_list(fd, "new", "tags", NULL, NULL); - - g_key_file_free(fd); - return TRUE; -} - -#ifdef HAVE_SPLICE -static int -save_splice(int fdin, int fdout) -{ - int ret, written, pfd[2]; - - if (pipe(pfd) < 0) { - g_critical("Failed to create pipe: %s", g_strerror(errno)); - return EX_IOERR; - } - - for (;;) { - ret = splice(fdin, NULL, pfd[1], NULL, 4096, 0); - if (!ret) - break; - if (ret < 0) { - g_critical("Splicing data from standard input failed: %s", - g_strerror(errno)); - close(pfd[0]); - close(pfd[1]); - return EX_IOERR; - } - - do { - written = splice(pfd[0], NULL, fdout, NULL, ret, 0); - if (!written) { - g_critical("Splicing data to temporary file failed: internal error"); - close(pfd[0]); - close(pfd[1]); - return EX_IOERR; - } - if (written < 0) { - g_critical("Splicing data to temporary file failed: %s", - g_strerror(errno)); - close(pfd[0]); - close(pfd[1]); - return EX_IOERR; - } - ret -= written; - } while (ret); - } - - close(pfd[0]); - close(pfd[1]); - return 0; -} -#endif /* HAVE_SPLICE */ - -static int -save_readwrite(int fdin, int fdout) -{ - int ret, written; - char buf[4096], *p; - - for (;;) { - ret = read(fdin, buf, 4096); - if (!ret) - break; - if (ret < 0) { - if (errno == EINTR) - continue; - g_critical("Reading from standard input failed: %s", - g_strerror(errno)); - return EX_IOERR; - } - p = buf; - do { - written = write(fdout, p, ret); - if (!written) - return EX_IOERR; - if (written < 0) { - if (errno == EINTR) - continue; - g_critical("Writing to temporary file failed: %s", - g_strerror(errno)); - return EX_IOERR; - } - p += written; - ret -= written; - } while (ret); - } - - return 0; -} - -static int -save_maildir(int fdin, const char *dir, int auto_create, char **path) -{ - int fdout, ret; - struct maildir_tmpcreate_info info; - - maildir_tmpcreate_init(&info); - info.openmode = 0666; - info.maildir = dir; - info.doordie = 1; - - while ((fdout = maildir_tmpcreate_fd(&info)) < 0) - { - if (errno == ENOENT && auto_create && maildir_mkdir(dir) == 0) - { - auto_create = 0; - continue; - } - - g_critical("Failed to create temporary file `%s': %s", - info.tmpname, g_strerror(errno)); - return EX_TEMPFAIL; - } - - g_debug("Reading from standard input and writing to `%s'", info.tmpname); -#ifdef HAVE_SPLICE - ret = g_getenv("NOTMUCH_DELIVER_NO_SPLICE") - ? save_readwrite(fdin, fdout) - : save_splice(fdin, fdout); -#else - ret = save_readwrite(fdin, fdout); -#endif /* HAVE_SPLICE */ - if (ret) - goto fail; - - close(fdout); - g_debug("Moving `%s' to `%s'", info.tmpname, info.newname); - if (maildir_movetmpnew(info.tmpname, info.newname)) { - g_critical("Moving `%s' to `%s' failed: %s", - info.tmpname, info.newname, g_strerror(errno)); - unlink(info.tmpname); - return EX_IOERR; - } - - if (path) - *path = g_strdup(info.newname); - - maildir_tmpcreate_free(&info); - - return 0; - -fail: - g_debug("Unlinking `%s'", info.tmpname); - unlink(info.tmpname); - return EX_IOERR; -} - -static int -add_tags(notmuch_message_t *message, char **tags) -{ - unsigned i; - notmuch_status_t ret; - - if (!tags) - return 0; - - for (i = 0; tags[i]; i++) { - ret = notmuch_message_add_tag(message, tags[i]); - if (ret != NOTMUCH_STATUS_SUCCESS) - g_warning("Failed to add tag `%s': %s", - tags[i], notmuch_status_to_string(ret)); - } - - return i; -} - -static int -rm_tags(notmuch_message_t *message, char **tags) -{ - unsigned i; - notmuch_status_t ret; - - if (!tags) - return 0; - - for (i = 0; tags[i]; i++) { - ret = notmuch_message_remove_tag(message, tags[i]); - if (ret != NOTMUCH_STATUS_SUCCESS) - g_warning("Failed to remove tag `%s': %s", - tags[i], notmuch_status_to_string(ret)); - } - - return i; -} - -static int -save_database(notmuch_database_t *db, const char *path, char **default_tags) -{ - notmuch_status_t ret; - notmuch_message_t *message; - - g_debug("Adding `%s' to notmuch database", path); - ret = notmuch_database_add_message(db, path, &message); - switch (ret) { - case NOTMUCH_STATUS_SUCCESS: - break; - case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: - g_debug("Message is a duplicate, not adding tags"); - return 0; - default: - g_warning("Failed to add `%s' to notmuch database: %s", - path, notmuch_status_to_string(ret)); - return EX_SOFTWARE; - } - - g_debug("Message isn't a duplicate, adding tags"); - add_tags(message, default_tags); - add_tags(message, opt_tags); - rm_tags(message, opt_rtags); - - return 0; -} - -int -main(int argc, char **argv) -{ - int ret; - gchar *conf_path, *db_path, *folder, *maildir, *mail; - gchar **conf_tags; - GOptionContext *ctx; - GError *error = NULL; - notmuch_database_t *db; - notmuch_status_t status; - - ctx = g_option_context_new("[FOLDER]"); - g_option_context_add_main_entries(ctx, options, PACKAGE); - g_option_context_set_summary(ctx, PACKAGE"-"VERSION GITHEAD" - notmuch delivery tool"); - g_option_context_set_description(ctx, - "\nConfiguration:\n" - " "PACKAGE" uses notmuch's configuration file to determine database path and\n" - " initial tags to add to new messages. You may set NOTMUCH_CONFIG environment\n" - " variable to specify an alternative configuration file.\n" - "\nEnvironment:\n" - " NOTMUCH_CONFIG: Path to notmuch configuration file\n" - " NOTMUCH_DELIVER_NO_SPLICE: Don't use splice() even if it's available\n" - "\nExit codes:\n" - " 0 => Successful run\n" - " 64 => Usage error\n" - " 70 => Failed to open the database\n" - " (or to add to the database if --fatal-add is specified)\n" - " 71 => Input output errors\n" - " (failed to read from standard input)\n" - " (failed to write to temporary file)\n" - " 76 => Failed to open/create maildir\n" - " 78 => Configuration error (wrt .notmuch-config)\n"); - - g_log_set_default_handler(log_handler, NULL); - - if (!g_option_context_parse(ctx, &argc, &argv, &error)) { - g_critical("Option parsing failed: %s", error->message); - g_option_context_free(ctx); - g_error_free(error); - return EX_USAGE; - } - g_option_context_free(ctx); - - if (opt_version) { - about(); - return 0; - } - - if (g_getenv("NOTMUCH_CONFIG")) - conf_path = g_strdup(g_getenv("NOTMUCH_CONFIG")); - else if (g_getenv("HOME")) - conf_path = g_build_filename(g_getenv("HOME"), ".notmuch-config", NULL); - else { - g_critical("Neither NOTMUCH_CONFIG nor HOME set"); - return EX_USAGE; - } - - db_path = NULL; - conf_tags = NULL; - g_debug("Parsing configuration from `%s'", conf_path); - if (!load_keyfile(conf_path, &db_path, &conf_tags)) { - g_free(conf_path); - return EX_CONFIG; - } - g_free(conf_path); - - if ((argc - 1) > 1) { - g_critical("Won't deliver to %d folders", argc - 1); - return EX_USAGE; - } - - if (argc > 1) { - folder = g_strdup_printf("%s%s", opt_folder ? "." : "", argv[1]); - maildir = g_build_filename(db_path, folder, NULL); - g_free(folder); - } - else - maildir = g_strdup(db_path); - - g_debug("Opening notmuch database `%s'", db_path); - status = notmuch_database_open(db_path, NOTMUCH_DATABASE_MODE_READ_WRITE, - &db); - if (status) { - g_critical("Failed to open database `%s': %s", - db_path, notmuch_status_to_string(status)); - g_free(maildir); - return EX_SOFTWARE; - } - g_free(db_path); - if (db == NULL) - return EX_SOFTWARE; - if (notmuch_database_needs_upgrade(db)) { - g_message("Upgrading database"); - notmuch_database_upgrade(db, NULL, NULL); - } - - g_debug("Opening maildir `%s'", maildir); - if ((ret = save_maildir(STDIN_FILENO, maildir, opt_create, &mail)) != 0) { - g_free(maildir); - return ret; - } - g_free(maildir); - - if ((ret = save_database(db, mail, conf_tags)) != 0 && opt_fatal) { - g_warning("Unlinking `%s'", mail); - unlink(mail); - return ret; - } - g_strfreev(conf_tags); - g_strfreev(opt_tags); - g_strfreev(opt_rtags); - g_free(mail); - - notmuch_database_destroy(db); - - return 0; -}