Check the `mh-tailor' man page for a list of all the available options
for this file ("masquerade" may be of particular interest).
-6) If you have enabled POP support, make sure that `pop3' (or more
- precisely the value of the define POPSERVICE in config.h) is defined
- in the /etc/services file (or its NIS/NIS+ equivalent) on the client
- machine. It should be something equivalent to "110/tcp". This might
- have already been done when the POP daemon was installed.
-
-7) Edit the file `mhn.defaults' (installed in the nmh `etc' directory).
+6) Edit the file `mhn.defaults' (installed in the nmh `etc' directory).
This file contains the default profile entries for the nmh command
`mhn' and is created by the script `mhn.defaults.sh'. This script
will search a generic path (essentially your $PATH) for programs to
"MH & xmh: Email for Users and Programmers", 3rd edition, by Jerry Peek,
on the Internet at <http://www.ics.uci.edu/~mh/book/mh/confmhn.htm>.
-9) Add an optional global mh.profile, if desired. This profile should be
+7) Add an optional global mh.profile, if desired. This profile should be
placed in the nmh `etc' directory with the name `mh.profile'. This
file will be used to construct the initial .mh_profile of a new nmh
user, but will not be consulted after that.
See the mh-tailor(5) man page for full documentation of "masquerade:".
---enable-mhe (DEFAULT)
- Add support for the Emacs front-end `mhe'.
-
--enable-pop
Enable client-side support for pop.
srcdir = @srcdir@
abs_srcdir = @abs_srcdir@
+datarootdir = @datarootdir@
VPATH = @srcdir@
# ========== USER CONFIGURATION SECTION ==========
*/
/*
- * If you have defined DOT_LOCKING, then the default is to
- * place the lock files in the same directory as the file that
- * is to be locked. Alternately, if you define LOCKDIR, you
- * can specify that all lock files go in a specific directory.
- * Don't define this unless you know you need it.
- */
-/* #define LOCKDIR "/usr/spool/locks" */
-
-/*
- * Define this if your passwords are stored in some type of
- * distributed name service, such as NIS, or NIS+.
- */
-#define DBMPWD 1
-
-/*
* Directs nmh not to try and rewrite addresses
* to their official form. You probably don't
* want to change this without good reason.
*/
/* #define REALLYDUMB 1 */
-/*
- * Starting on January 1, 2000, some MUAs like ELM and Ultrix's DXmail started
- * generated bad dates ("00" or "100" for the year). If this #define is active,
- * we use windowing to correct those dates to what we presume to be the intended
- * values. About the only time this could get us into trouble would be if a MUA
- * was generating a year of "00" in 2001 or later, due to an unrelated bug. In
- * this case we would "correct" the year to 2000, which could result in
- * inaccurate bug reports against the offending MUA. A much more esoteric case
- * in which you might not want to #define this would be if you were OCR'ing in
- * old written correspondence and saving it in email format, and you had dates
- * of 1899 or earlier.
- */
-#define FIX_NON_Y2K_COMPLIANT_MUA_DATES 1
-
-/*
- * Directs inc/slocal to extract the envelope sender from "From "
- * line. If inc/slocal is saving message to folder, then this
- * sender information is then used to create a Return-Path
- * header which is then added to the message.
- */
-#define RPATHS 1
-
-/*
- * If defined, slocal will use `mbox' format when saving to
- * your standard mail spool. If not defined, it will use
- * mmdf format.
- */
-#define SLOCAL_MBOX 1
-
-/*
- * If this is defined, nmh will recognize the ~ construct.
- */
-#define MHRC 1
-
-/*
- * Compile simple ftp client into mhn. This will be used by mhn
- * for ftp access unless you have specified another access method
- * in your .mh_profile or mhn.defaults. Use the "mhn-access-ftp"
- * profile entry to override this. Check mhn(1) man page for
- * details.
- */
-#define BUILTIN_FTP 1
-
-/*
- * If you enable POP support, this is the the port name that nmh will use. Make
- * sure this is defined in your /etc/services file (or its NIS/NIS+ equivalent).
- * If you are using KPOP, you will need to change this to "kpop" unless you want
- * to be able to use both POP3 _and_ Kerberized POP and plan to use inc and
- * msgchk's -kpop switch every time in the latter case.
- */
-#define POPSERVICE "pop3"
-
-/*
- * Define the default creation modes for folders and messages.
- */
-#define DEFAULT_FOLDER_MODE "700"
-#define DEFAULT_MESSAGE_MODE "600"
-
-/*
- * Name of link to file to which you are replying.
- */
-#define LINK "@"
-
-/*
- * Define to 1 if your vi has ATT bug, such that it returns
- * non-zero exit codes on `pseudo-errors'.
- */
-#undef ATTVIBUG
-
-
/***** END USER CONFIGURATION SECTION *****/
@TOP@
#include <h/mh.h>
#include <stdio.h>
-
-#ifdef MHRC
-# include <pwd.h>
-#endif
+#include <pwd.h>
#define nmhbindir(file) NMHBINDIR#file
#define nmhetcdir(file) NMHETCDIR#file
{
static char epath[PATH_MAX];
char *cp;
-#ifdef MHRC
char *pp;
struct passwd *pw;
-#endif
-#ifdef MHRC
context_read();
-#endif
switch (*file) {
case '/':
/* If already absolute pathname, return it */
return file;
-#ifdef MHRC
case '~':
/* Expand ~username */
if ((cp = strchr(pp = file + 1, '/')))
if (access (epath, R_OK) != NOTOK)
return epath; /* else fall */
try_it:
-#endif /* MHRC */
default:
/* Check nmh Mail directory */
* Folders (directories) are created with this protection (mode)
*/
-char *foldprot = DEFAULT_FOLDER_MODE;
+char *foldprot = "700";
/*
* Every NEW message will be created with this protection. When a
* to messages coming in through inc.
*/
-char *msgprot = DEFAULT_MESSAGE_MODE;
+char *msgprot = "600";
fi], [masquerade="draft_from mmailid username_extension"])
AC_SUBST(masquerade)dnl
-dnl Do you want mhe support?
-AC_ARG_ENABLE(mhe,
- AS_HELP_STRING([--disable-mhe],[disable mhe support]))
-
-dnl mhe support is on by default, so define it unless --disable-mhe or the
-dnl deprecated, undocumented --disable-nmh-mhe are specified.
-if test x"$enable_mhe" != x"no" -a x"$enable_nmh_mhe" != x"no"; then
- AC_DEFINE(MHE, 1,
- [Define to compile in support for the Emacs front-end mh-e.])dnl
-fi
-
dnl Do you want client-side support for pop?
AC_ARG_ENABLE(pop,
AS_HELP_STRING([--enable-pop], [enable client-side support for plain POP3]))
AC_DEFINE(DOT_LOCKING)dnl
fi
+dnl Should we use a locking directory?
+AC_ARG_ENABLE([lockdir], [
+ AS_HELP_STRING([--enable-lockdir=dir], [Store dot-lock files in "dir"])], [
+ AS_IF([test "x$enableval" = xyes],[
+ AC_MSG_ERROR([--enable-lockdir requires an argument])])
+ AS_IF([test "x$LOCKTYPE" != xdot],[
+ AC_MSG_ERROR([Can only use --enable-lockdir with dot locking])])
+ AC_DEFINE_UNQUOTED([LOCKDIR], ["$enableval"],
+ [Directory to store dot-locking lock files])
+])
+
dnl What method of posting should post use?
AC_ARG_WITH(mts,
AS_HELP_STRING([--with-mts=@<:@smtp|sendmail@:>@],
dnl ----------------
dnl CHECK STRUCTURES
dnl ----------------
-AC_CHECK_MEMBERS(struct stat.st_blksize)
AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,,
[#ifdef TIME_WITH_SYS_TIME
top_srcdir = @top_srcdir@
srcdir = @srcdir@
docdir = @docdir@
+datarootdir = @datarootdir@
VPATH = @srcdir@
# files included in distribution
- Switched to buffered output when performing TLS encryption in the SMTP
MTA to increase performance.
+- mh-e support has been changed so that it is always compiled into nmh;
+ old features that were previously enabled by the MHE option have been
+ garbage collected.
+- Old code enabled by the UCI preprocessor definition has been
+ garbage-collected.
+- LOCKDIR is now configurable via --enable-lockdir
+- All configuration options that were formerly only adjustable via editing
+ config.h have been removed.
+- Support for the built-in ftp client (used when dealing with external body
+ message parts in MIME messages) has been removed.
+++ /dev/null
-/*
- * Copyright (c) 1983, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ftp.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _FTP_H_
-#define _FTP_H_
-
-/* Definitions for FTP; see RFC-765. */
-
-/*
- * Reply codes.
- */
-#define PRELIM 1 /* positive preliminary */
-#define COMPLETE 2 /* positive completion */
-#define CONTINUE 3 /* positive intermediate */
-#define TRANSIENT 4 /* transient negative completion */
-#define ERROR 5 /* permanent negative completion */
-
-/*
- * Type codes
- */
-#define TYPE_A 1 /* ASCII */
-#define TYPE_E 2 /* EBCDIC */
-#define TYPE_I 3 /* image */
-#define TYPE_L 4 /* local byte size */
-
-#ifdef FTP_NAMES
-char *typenames[] = {"0", "ASCII", "EBCDIC", "Image", "Local" };
-#endif
-
-/*
- * Form codes
- */
-#define FORM_N 1 /* non-print */
-#define FORM_T 2 /* telnet format effectors */
-#define FORM_C 3 /* carriage control (ASA) */
-#ifdef FTP_NAMES
-char *formnames[] = {"0", "Nonprint", "Telnet", "Carriage-control" };
-#endif
-
-/*
- * Structure codes
- */
-#define STRU_F 1 /* file (no record structure) */
-#define STRU_R 2 /* record structure */
-#define STRU_P 3 /* page structure */
-#ifdef FTP_NAMES
-char *strunames[] = {"0", "File", "Record", "Page" };
-#endif
-
-/*
- * Mode types
- */
-#define MODE_S 1 /* stream */
-#define MODE_B 2 /* block */
-#define MODE_C 3 /* compressed */
-#ifdef FTP_NAMES
-char *modenames[] = {"0", "Stream", "Block", "Compressed" };
-#endif
-
-/*
- * Record Tokens
- */
-#define REC_ESC '\377' /* Record-mode Escape */
-#define REC_EOR '\001' /* Record-mode End-of-Record */
-#define REC_EOF '\002' /* Record-mode End-of-File */
-
-/*
- * Block Header
- */
-#define BLK_EOR 0x80 /* Block is End-of-Record */
-#define BLK_EOF 0x40 /* Block is End-of-File */
-#define BLK_ERRORS 0x20 /* Block is suspected of containing errors */
-#define BLK_RESTART 0x10 /* Block is Restart Marker */
-
-#define BLK_BYTECOUNT 2 /* Bytes in this block */
-
-#endif /* !_FTP_H_ */
#define OUTPUTLINELEN 72 /* default line length for headers */
+#define LINK "@" /* Name of link to file to which you are */
+ /* replying. */
+
/*
* miscellaneous macros
*/
int vfgets (FILE *, char **);
char *write_charset_8bit (void);
-#ifdef RPATHS
-int get_returnpath (char *, int, char *, int);
-#endif
-
int mh_strcasecmp (const char *s1, const char *s2);
int strncasecmp (const char *s1, const char *s2, size_t n);
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
+datarootdir = @datarootdir@
etcdir = @sysconfdir@
mandir = @mandir@
manext1 = 1
The
.B \-build
switch is intended to be used by the Emacs mh-e interface to
-.BR nmh ,
-and is only present if
-.B nmh
-was compiled with support for mh-e. It implies
+.BR nmh .
+It implies
.BR \-nowhatnowproc .
It causes a file <mh\-dir>/draft
to be created, containing the draft message that would normally be presented
to the user for editing.
-No mail is actually sent. Note that this switch is not guaranteed to
-be present or to have the same effects in future versions of
-.BR nmh :
-it is documented here only for completeness.
+No mail is actually sent.
.PP
The
.B \-file
.RE
.PP
.BR Msg\-Protect :
-644
+600
.RS 5
An octal number which defines the permission bits for new message files.
See
.BR chmod (1)
for an explanation of the octal number.
-(profile, default: 0644)
+(profile, default: 0600)
.RE
.PP
.BR Folder\-Protect :
-750
+700
.RS 5
An octal number which defines the permission bits for new folder
directories. See
(context, no default)
.RE
.PP
-.BR mhe :
-.RS 5
-If present, tells
-.B inc
-to compose an
-.I MHE
-auditfile in addition to its other tasks.
-.I MHE
-is Brian Reid's
-.B emacs
-front-end for
-.BR nmh .
-(profile, no default)
-.RE
-.PP
.BR Alternate\-Mailboxes :
mh@uci\-750a, bug-mh*
.RS 5
If
.B $SIGNATURE
is not set and this profile entry is not present, the \*(lqgcos\*(rq field of
-the \fI/etc/passwd\fP file will be used; otherwise, on hosts where
-.B nmh
-was configured with the UCI option, the file
-.I $HOME/.signature
-is consulted. Your signature will be added to the address
+the \fI/etc/passwd\fP file will be used.
+Your signature will be added to the address
.B send
puts in the \*(lqFrom:\*(rq header; do not include an address in the
signature text. (profile, no default)
a file should be created whose existence means \*(lqlocked\*(rq and
whose non-existence means \*(lqunlocked\*(rq. The name of this file is
constructed by appending \*(lq.lock\*(rq to the name of the file being
-locked. If
-.B LOCKDIR
-is not specified, lock files will be created
+locked. If \*(lq--enable-lockdir=directory\*(rq
+is not specified at build time, lock files will be created
in the directory where the file being locked resides. Otherwise, lock
files will be created in the directory specified by
-.BR LOCKDIR .
+\*(lq--enable-lockdir\*(rq.
.PP
Prior to installing
.BR nmh ,
.B \-build
switch is intended to be used by the Emacs mh-e interface
to
-.BR nmh ,
-and is only present if
-.B nmh
-was compiled with support
-for mh-e. It implies
+.BR nmh .
+It implies
.BR \-nowhatnowproc .
It causes a file
.I <mh\-dir>/reply
to be created, containing the draft message that would normally be presented
to the user for editing.
-No mail is actually sent. Note that this switch is not guaranteed to
-be present or to have the same effects in future versions of
-.BR nmh :
-it is documented here only for completeness.
+No mail is actually sent.
.PP
The
.B \-file
else
#endif /* DUMB */
-#ifndef BANG
if (mp->m_type != UUCPHOST)
snprintf (addr, sizeof(addr), mp->m_host ? "%s%s@%s" : "%s%s",
empty(mp->m_path), empty(mp->m_mbox), mp->m_host);
else
-#endif /* not BANG */
snprintf (addr, sizeof(addr), "%s!%s", mp->m_host, mp->m_mbox);
if (!extras)
if (domain == NULL)
domain = LocalName();
-#ifndef BANG
snprintf_return = snprintf (addr, sizeof(addr), "%s@%s", username, domain);
-#else /* BANG */
- snprintf_return = snprintf (addr, sizeof(addr), "%s!%s", domain, username);
-#endif /* BANG */
if (snprintf_return < 0 || snprintf_return >= sizeof(addr))
adios(NULL, "snprintf() error writing username (%d chars), domain (%d"
static void
cptrimmed(char **dest, char *str, unsigned int wid, char fill, size_t n) {
int remaining; /* remaining output width available */
- int c, ljust, w;
+ int c, ljust;
int end; /* number of input bytes remaining in str */
#ifdef MULTIBYTE_SUPPORT
int char_len; /* bytes in current character */
+ int w;
wchar_t wide_char;
#endif
char *sp; /* current position in source string */
switch (dp->d_name[0]) {
case '.':
case ',':
-#ifdef MHE
- case '+':
-#endif /* MHE */
continue;
default:
}
-#ifdef RPATHS
-static char unixbuf[BUFSIZ] = "";
-#endif /* RPATHS */
-
void
m_unknown(FILE *iob)
{
&& strncmp (text, "From ", 5) == 0) {
msg_style = MS_MBOX;
delimstr = "\nFrom ";
-#ifndef RPATHS
while ((c = getc (iob)) != '\n' && c >= 0)
;
-#else /* RPATHS */
- cp = unixbuf;
- while ((c = getc (iob)) != '\n' && cp - unixbuf < BUFSIZ - 1)
- *cp++ = c;
- *cp = 0;
-#endif /* RPATHS */
} else {
/* not a Unix style maildrop */
fseek (iob, pos, SEEK_SET);
register long pos = 0L;
register int i;
char text[10];
-#ifdef RPATHS
- register char *cp;
-#endif /* RPATHS */
pos = ftell (iob);
if ((i = fread (text, sizeof *text, edelimlen, iob)) != edelimlen
}
if (msg_style == MS_MBOX) {
-#ifndef RPATHS
while ((c = getc (iob)) != '\n')
if (c < 0)
break;
-#else /* RPATHS */
- cp = unixbuf;
- while ((c = getc (iob)) != '\n' && c >= 0 && cp - unixbuf < BUFSIZ - 1)
- *cp++ = c;
- *cp = 0;
-#endif /* RPATHS */
}
return 1;
}
-#ifdef RPATHS
-/*
- * Return the Return-Path and Delivery-Date
- * header information.
- *
- * Currently, I'm assuming that the "From " line
- * takes one of the following forms.
- *
- * From sender date remote from host (for UUCP delivery)
- * From sender@host date (for sendmail delivery)
- */
-
-int
-get_returnpath (char *rp, int rplen, char *dd, int ddlen)
-{
- char *ap, *bp, *cp, *dp;
-
- ap = unixbuf;
- if (!(bp = cp = strchr(ap, ' ')))
- return 0;
-
- /*
- * Check for "remote from" in envelope to see
- * if this message uses UUCP style addressing
- */
- while ((cp = strchr(++cp, 'r'))) {
- if (strncmp (cp, "remote from", 11) == 0) {
- cp = strrchr (cp, ' ');
- break;
- }
- }
-
- /*
- * Get the Return-Path information from
- * the "From " envelope.
- */
- if (cp) {
- /* return path for UUCP style addressing */
- dp = strchr (++cp, '\n');
- snprintf (rp, rplen, "%.*s!%.*s\n", (int)(dp - cp), cp, (int)(bp - ap), ap);
- } else {
- /* return path for standard domain addressing */
- snprintf (rp, rplen, "%.*s\n", (int)(bp - ap), ap);
- }
-
- /*
- * advance over the spaces to get to
- * delivery date on envelope
- */
- while (*bp == ' ')
- bp++;
-
- /* Now get delivery date from envelope */
- snprintf (dd, ddlen, "%.*s\n", 24, bp);
-
- unixbuf[0] = 0;
- return 1;
-}
-#endif /* RPATHS */
-
-
static unsigned char *
matchc(int patln, char *pat, int strln, char *str)
{
#include <h/signals.h>
#include <errno.h>
#include <signal.h>
+#include <sys/wait.h>
int
pidwait (pid_t id, int sigsok)
# source files
SRCS = ali.c aliasbr.c anno.c annosbr.c ap.c burst.c comp.c \
conflict.c dist.c distsbr.c dp.c dropsbr.c flist.c fmtdump.c \
- folder.c forw.c ftpsbr.c inc.c install-mh.c mark.c md5.c mhbuild.c \
+ folder.c forw.c inc.c install-mh.c mark.c md5.c mhbuild.c \
mhbuildsbr.c mhcachesbr.c mhfree.c mhl.c mhlist.c mhlistsbr.c \
mhlsbr.c mhmail.c mhmisc.c mhn.c mhoutsbr.c mhparam.c mhparse.c \
mhpath.c mhshow.c mhshowsbr.c mhstore.c mhstoresbr.c mhtest.c \
mark: mark.o $(LOCALLIBS)
$(LINK) mark.o $(LINKLIBS)
-mhbuild: mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o ftpsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhbuild: mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhbuild.o mhbuildsbr.o mhcachesbr.o mhlistsbr.o mhoutsbr.o mhmisc.o mhfree.o mhparse.o md5.o $(LINKLIBS) $(TERMLIB)
mhl: mhl.o mhlsbr.o termsbr.o $(LOCALLIBS)
$(LINK) mhl.o mhlsbr.o termsbr.o $(LINKLIBS) $(TERMLIB)
-mhlist: mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhlist: mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhlist.o mhparse.o mhcachesbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
mhmail: mhmail.o $(LOCALLIBS)
$(LINK) mhmail.o $(LINKLIBS)
-mhn: mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhn: mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhn.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
mhparam: mhparam.o $(LOCALLIBS)
$(LINK) mhparam.o $(LINKLIBS)
mhpath: mhpath.o $(LOCALLIBS)
$(LINK) mhpath.o $(LINKLIBS)
-mhshow: mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhshow: mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhshow.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
-mhstore: mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhstore: mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhstore.o mhparse.o mhcachesbr.o mhshowsbr.o mhlistsbr.o mhstoresbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
-mhtest: mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LOCALLIBS)
- $(LINK) mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o ftpsbr.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
+mhtest: mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LOCALLIBS)
+ $(LINK) mhtest.o mhparse.o mhcachesbr.o mhoutsbr.o mhmisc.o mhfree.o termsbr.o md5.o $(LINKLIBS) $(TERMLIB)
msgchk: msgchk.o $(POPLIB) $(LOCALLIBS)
$(LINK) msgchk.o $(POPLIB) $(LINKLIBS)
return 0;
}
-#ifndef DBMPWD
- if (homehead == NULL)
- init_pw ();
-#endif /* DBMPWD */
-
while ((gp = *gr->gr_mem++))
-#ifdef DBMPWD
{
struct passwd *pw;
-#endif /* DBMPWD */
for (hm = homehead; hm; hm = hm->h_next)
if (!strcmp (hm->h_name, gp)) {
add_aka (ak, hm->h_name);
break;
}
-#ifdef DBMPWD
if ((pw = getpwnam(gp)))
{
hmalloc(pw);
add_aka (ak, gp);
}
}
-#endif /* DBMPWD */
return 1;
}
return 0;
}
-#ifndef DBMPWD
- if (homehead == NULL)
-#endif /* DBMPWD */
- init_pw ();
+ init_pw ();
for (hm = homehead; hm; hm = hm->h_next)
if (hm->h_gid == gid)
int noshell = NoShell == NULL || *NoShell == 0;
register struct home *hm;
-#ifndef DBMPWD
- if (homehead == NULL)
-#endif /* DBMPWD */
- init_pw ();
+ init_pw ();
+
if (Everyone < 0)
Everyone = EVERYONE;
init_pw (void)
{
register struct passwd *pw;
-#ifdef DBMPWD
static int init;
if (!init)
{
- /* if the list has yet to be initialized */
- /* zap the list, and rebuild from scratch */
- homehead=NULL;
- hometail=NULL;
- init++;
-#endif /* DBMPWD */
+ /* if the list has yet to be initialized */
+ /* zap the list, and rebuild from scratch */
+ homehead=NULL;
+ hometail=NULL;
+ init++;
- setpwent ();
+ setpwent ();
- while ((pw = getpwent ()))
- if (!hmalloc (pw))
- break;
+ while ((pw = getpwent ()))
+ if (!hmalloc (pw))
+ break;
- endpwent ();
-#ifdef DBMPWD
+ endpwent ();
}
-#endif /* DBMPWD */
}
seek_home (char *name)
{
register struct home *hp;
-#ifdef DBMPWD
struct passwd *pw;
char lname[32];
unsigned char *c;
char *c1;
-#else /* DBMPWD */
-
- if (homehead == NULL)
- init_pw ();
-#endif /* DBMPWD */
for (hp = homehead; hp; hp = hp->h_next)
if (!mh_strcasecmp (name, hp->h_name))
return hp;
-#ifdef DBMPWD
/*
* The only place where there might be problems.
* This assumes that ALL usernames are kept in lowercase.
*c1 = '\0';
if ((pw = getpwnam(lname)))
return(hmalloc(pw));
-#endif /* DBMPWD */
-
+
return NULL;
}
return 1;
}
-#ifdef UCI
- if (strcmp(invo_name, "fanno") == 0) /* ugh! */
- datesw = 0;
-#endif /* UCI */
-
if (!context_find ("path"))
free (path ("./", TFOLDER));
if (!msgs.size)
grp_names ();
grp_members ();
grp_ids ();
-#ifdef UCI
- ldr_names ();
- ldr_ship ();
-#endif /* UCI */
maildrops ();
done (0);
}
}
}
-
-#ifdef UCI
-/*
- * UCI specific stuff for conflict
- */
-
-/* taken from <grpldr.h> */
-
-#define GLDRS "/admin/etc/GroupLeaders"
-
-struct grpldr {
- char *gl_name;
- char **gl_ldr;
-};
-
-int setglent (), endglent ();
-struct grpldr *getglent (), *getglnam ();
-
-
-/* taken from the getglent() routines */
-
-#define MAXGLS 100
-
-static FILE *glp = NULL;
-static char line[BUFSIZ+1];
-static struct grpldr grpldr;
-static char *gl_ldr[MAXGLS + 1];
-
-
-setglent() {
- if (glp == NULL)
- glp = fopen (GLDRS, "r");
- else
- rewind (glp);
-
- return (glp != NULL);
-}
-
-
-endglent() {
- if (glp != NULL) {
- fclose (glp);
- glp = NULL;
- }
-
- return 1;
-}
-
-struct grpldr *getglent () {
- register char *cp,
- **q;
-
- if (glp == NULL && !setglent ())
- return NULL;
- if ((cp = fgets (line, BUFSIZ, glp)) == NULL)
- return NULL;
-
- grpldr.gl_name = cp;
- grpldr.gl_ldr = q = gl_ldr;
-
- while (*cp) {
- while (*cp && !isspace (*cp))
- cp++;
- while (*cp && isspace (*cp))
- *cp++ = '\0';
- if (*cp == '\0')
- break;
- if (q < gl_ldr + MAXGLS)
- *q++ = cp;
- else
- break;
- }
- *q = NULL;
-
- return (&grpldr);
-}
-
-struct grpldr *getglnam (name)
-char *name;
-{
- register struct grpldr *gl = NULL;
-
- setglent ();
- while (gl = getglent ())
- if (strcmp (name, gl->gl_name) == 0)
- break;
- endglent ();
-
- return gl;
-}
-
-ldr_names () {
- register int gp,
- hit = 0;
- char *gldrs[NGRPS];
- register struct grpldr *gl;
-
- gldrs[0] = NULL;
- setglent ();
- while (gl = getglent ()) {
- if (getgrnam (gl->gl_name) == NULL) {
- setup ();
- fprintf (out, "unknown group %s in group leaders file\n",
- gl->gl_name);
- hit++;
- }
- for (gp = 0; gldrs[gp]; gp++)
- if (strcmp (gldrs[gp], gl->gl_name) == 0) {
- setup ();
- fprintf (out, "duplicate group %s in group leaders file\n",
- gl->gl_name);
- hit++;
- break;
- }
- if (gldrs[gp] == NULL)
- if (gp < NGRPS) {
- gldrs[gp++] = getcpy (gl->gl_name);
- gldrs[gp] = NULL;
- }
- else {
- setup ();
- fprintf (out, "more than %d groups in group leaders file%s\n",
- " (time to recompile)", NGRPS - 1);
- hit++;
- }
- }
- endglent ();
-
- for (gp = 0; gldrs[gp]; gp++)
- free (gldrs[gp]);
-
- if (!hit && out && !mail)
- fprintf (out, "all groups in group leaders file accounted for\n");
-}
-
-
-ldr_ship () {
- register int hit = 0;
- register char **cp,
- **dp;
- register struct grpldr *gl;
-
- setglent ();
- while (gl = getglent ())
- for (cp = gl->gl_ldr; *cp; cp++) {
- if (!check (*cp)) {
- setup ();
- fprintf (out, "group %s has unknown leader %s\n",
- gl->gl_name, *cp);
- hit++;
- }
-
- for (dp = cp + 1; *dp; dp++)
- if (strcmp (*cp, *dp) == 0) {
- setup ();
- fprintf (out, "group %s had duplicate leader %s\n",
- gl->gl_name, *cp);
- hit++;
- }
- }
- endglent ();
-
- if (!hit && out && !mail)
- fprintf (out, "all group leaders accounted for\n");
-}
-#endif /* UCI */
{ "help", 0 },
#define FILESW 24
{ "file file", 4 }, /* interface from msh */
-
-#ifdef MHE
#define BILDSW 25
{ "build", 5 }, /* interface from mhe */
-#endif /* MHE */
{ NULL, 0 }
};
char **argp, **arguments, *msgs[MAXARGS];
struct stat st;
-#ifdef MHE
int buildsw = 0;
-#endif /* MHE */
#ifdef LOCALE
setlocale(LC_ALL, "");
adios (NULL, "missing argument to %s", argp[-2]);
nwhat = 0;
continue;
-#ifdef MHE
case BILDSW:
buildsw++; /* fall... */
-#endif /* MHE */
case NWHATSW:
nwhat++;
continue;
try_it_again:
-#ifdef MHE
strncpy (drft, buildsw ? m_maildir ("draft")
: m_draft (dfolder, NULL, NOUSE, &isdf), sizeof(drft));
/* Check if a draft already exists */
if (!buildsw && stat (drft, &st) != NOTOK) {
-#else
- strncpy (drft, m_draft (dfolder, dmsg, NOUSE, &isdf), sizeof(drft));
-
- /* Check if a draft already exists */
- if (stat (drft, &st) != NOTOK) {
-#endif /* MHE */
printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
for (i = LISTDSW; i != YESW;) {
if (!(argp = getans ("\nDisposition? ", isdf ? aqrnl : aqrl)))
+++ /dev/null
-/*
- * ftpsbr.c -- simple FTP client library
- *
- * This code is Copyright (c) 2002, by the authors of nmh. See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
-
-#include <h/mh.h>
-#include <h/mime.h>
-
-#include "h/arpa_ftp.h"
-
-#define v_debug debugsw
-#define v_verbose verbosw
-
-static int ftp_fd = NOTOK;
-static int data_fd = NOTOK;
-
-static int v_noise;
-
-extern int v_debug;
-extern int v_verbose;
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <errno.h>
-
-#define start_tcp_client(res) \
- socket (res->ai_family, res->ai_socktype, res->ai_protocol)
-
-#define join_tcp_server(fd, sock, len) \
- connect ((fd), (struct sockaddr *) (sock), len)
-
-/*
- * prototypes
- */
-int ftp_get (char *, char *, char *, char *, char *, char *, int, int);
-int ftp_trans (char *, char *, char *, char *, char *, char *, char *, int, int);
-
-/*
- * static prototypes
- */
-static int start_tcp_server (struct sockaddr_in *, int, int, int);
-static void _asnprintf (char *, int, char *, va_list);
-static int ftp_quit (void);
-static int ftp_read (char *, char *, char *, int);
-static int initconn (void);
-static int dataconn (void);
-static int command (int arg1, ...);
-static int vcommand (int, va_list);
-static int getreply (int, int);
-
-
-static int
-start_tcp_server (struct sockaddr_in *sock, int backlog, int opt1, int opt2)
-{
- int eindex, sd;
-
- if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == NOTOK)
- return NOTOK;
-
- if (bind (sd, (struct sockaddr *) sock, sizeof *sock) == NOTOK) {
- eindex = errno;
- close (sd);
- errno = eindex;
- } else {
- listen (sd, backlog);
- }
-
- return sd;
-}
-
-
-static int __len__;
-
-#define join_tcp_client(fd,sock) \
- accept ((fd), (struct sockaddr *) (sock), \
- (__len__ = sizeof *(sock), &__len__))
-
-#define read_tcp_socket read
-#define write_tcp_socket write
-#define close_tcp_socket close
-
-static void
-_asnprintf (char *bp, int len_bp, char *what, va_list ap)
-{
- int eindex, len;
- char *fmt;
-
- eindex = errno;
-
- *bp = '\0';
- fmt = va_arg (ap, char *);
-
- if (fmt) {
- vsnprintf(bp, len_bp, fmt, ap);
- len = strlen(bp);
- bp += len;
- len_bp -= len;
- }
-
- if (what) {
- char *s;
-
- if (*what) {
- snprintf (bp, len_bp, " %s: ", what);
- len = strlen (bp);
- bp += len;
- len_bp -= len;
- }
- if ((s = strerror(eindex)))
- strncpy (bp, s, len_bp);
- else
- snprintf (bp, len_bp, "Error %d", eindex);
- bp += strlen (bp);
- }
-
- errno = eindex;
-}
-
-
-int
-ftp_get (char *host, char *user, char *password, char *cwd,
- char *remote, char *local, int ascii, int stayopen)
-{
- return ftp_trans (host, user, password, cwd, remote, local,
- "RETR", ascii, stayopen);
-}
-
-
-int
-ftp_trans (char *host, char *user, char *password, char *cwd, char *remote,
- char *local, char *cmd, int ascii, int stayopen)
-{
- int result;
-
- if (stayopen <= 0) {
- result = ftp_quit ();
- if (host == NULL)
- return result;
- }
-
- if (ftp_fd == NOTOK) {
- struct addrinfo hints, *res;
-
- memset(&hints, 0, sizeof(hints));
-#ifdef AI_ADDRCONFIG
- hints.ai_flags = AI_ADDRCONFIG;
-#endif
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
-
- result = getaddrinfo(host, "ftp", &hints, &res);
-
- if (result) {
- fprintf(stderr, "%s/ftp: %s\n", host, gai_strerror(result));
- return NOTOK;
- }
-
- if ((ftp_fd = start_tcp_client (res)) == NOTOK) {
- perror (host);
- freeaddrinfo(res);
- return NOTOK;
- }
- if (join_tcp_server (ftp_fd, res->ai_addr, res->ai_addrlen) == NOTOK) {
- perror (host);
- freeaddrinfo(res);
- close_tcp_socket (ftp_fd), ftp_fd = NOTOK;
- return NOTOK;
- }
- freeaddrinfo(res);
- getreply (1, 0);
-
- if (v_verbose) {
- fprintf (stdout, "Connected to %s\n", host);
- fflush (stdout);
- }
-
- if (user) {
- if ((result = command (0, "USER %s", user)) == CONTINUE)
- result = command (1, "PASS %s", password);
- if (result != COMPLETE) {
- result = NOTOK;
- goto out;
- }
- }
-
- if (remote == NULL)
- return OK;
- }
-
- if (cwd && ((result = command (0, "CWD %s", cwd)) != COMPLETE
- && result != CONTINUE)) {
- result = NOTOK;
- goto out;
- }
-
- if (command (1, ascii ? "TYPE A" : "TYPE I") != COMPLETE) {
- result = NOTOK;
- goto out;
- }
-
- result = ftp_read (remote, local, cmd, ascii);
-
-out: ;
- if (result != OK || !stayopen)
- ftp_quit ();
-
- return result;
-}
-
-
-static int
-ftp_quit (void)
-{
- int n;
-
- if (ftp_fd == NOTOK)
- return OK;
-
- n = command (1, "QUIT");
- close_tcp_socket (ftp_fd), ftp_fd = NOTOK;
- return (n == 0 || n == COMPLETE ? OK : NOTOK);
-}
-
-static int
-ftp_read (char *remote, char *local, char *cmd, int ascii)
-{
- int istdio = 0, istore;
- register int cc;
- int expectingreply = 0;
- char buffer[BUFSIZ];
- FILE *fp = NULL;
-
- if (initconn () == NOTOK)
- goto bad;
-
- v_noise = v_verbose;
- if (command (-1, *remote ? "%s %s" : "%s", cmd, remote) != PRELIM)
- goto bad;
-
- expectingreply++;
- if (dataconn () == NOTOK) {
-bad: ;
- if (fp && !istdio)
- fclose (fp);
- if (data_fd != NOTOK)
- close_tcp_socket (data_fd), data_fd = NOTOK;
- if (expectingreply)
- getreply (-2, 0);
-
- return NOTOK;
- }
-
- istore = !strcmp (cmd, "STOR");
-
- if ((istdio = !strcmp (local, "-")))
- fp = istore ? stdin : stdout;
- else
- if ((fp = fopen (local, istore ? "r" : "w")) == NULL) {
- perror (local);
- goto bad;
- }
-
- if (istore) {
- if (ascii) {
- int c;
- FILE *out;
-
- if (!(out = fdopen (data_fd, "w"))) {
- perror ("fdopen");
- goto bad;
- }
-
- while ((c = getc (fp)) != EOF) {
- if (c == '\n')
- putc ('\r', out);
- if (putc (c, out) == EOF) {
- perror ("putc");
- fclose (out);
- data_fd = NOTOK;
- goto bad;
- }
- }
-
- fclose (out);
- data_fd = NOTOK;
- }
- else {
- while ((cc = fread (buffer, sizeof *buffer, sizeof buffer, fp)) > 0)
- if (write_tcp_socket (data_fd, buffer, cc) != cc) {
- perror ("write_tcp_socket");
- goto bad;
- }
-
- close_tcp_socket (data_fd), data_fd = NOTOK;
- }
- }
- else {
- if (ascii) {
- int c;
- FILE *in;
-
- if (!(in = fdopen (data_fd, "r"))) {
- perror ("fdopen");
- goto bad;
- }
-
- while ((c = getc (in)) != EOF) {
- if (c == '\r')
- switch (c = getc (in)) {
- case EOF:
- case '\0':
- c = '\r';
- break;
-
- case '\n':
- break;
-
- default:
- putc ('\r', fp);
- break;
- }
-
- if (putc (c, fp) == EOF) {
- perror ("putc");
- fclose (in);
- data_fd = NOTOK;
- goto bad;
- }
- }
-
- fclose (in);
- data_fd = NOTOK;
- }
- else {
- while ((cc = read_tcp_socket (data_fd, buffer, sizeof buffer)) > 0)
- if (fwrite (buffer, sizeof *buffer, cc, fp) == 0) {
- perror ("fwrite");
- goto bad;
- }
- if (cc < 0) {
- perror ("read_tcp_socket");
- goto bad;
- }
-
- close_tcp_socket (data_fd), data_fd = NOTOK;
- }
- }
-
- if (!istdio)
- fclose (fp);
-
- v_noise = v_verbose;
- return (getreply (1, 0) == COMPLETE ? OK : NOTOK);
-}
-
-
-#define UC(b) (((int) b) & 0xff)
-
-static int
-initconn (void)
-{
- int len;
- register char *a, *p;
- struct sockaddr_in in_socket;
-
- if (getsockname (ftp_fd, (struct sockaddr *) &in_socket,
- (len = sizeof(in_socket), &len)) == NOTOK) {
- perror ("getsockname");
- return NOTOK;
- }
- in_socket.sin_port = 0;
- if ((data_fd = start_tcp_server (&in_socket, 1, 0, 0)) == NOTOK) {
- perror ("start_tcp_server");
- return NOTOK;
- }
-
- if (getsockname (data_fd, (struct sockaddr *) &in_socket,
- (len = sizeof in_socket, &len)) == NOTOK) {
- perror ("getsockname");
- return NOTOK;
- }
-
- a = (char *) &in_socket.sin_addr;
- p = (char *) &in_socket.sin_port;
-
- if (command (1, "PORT %d,%d,%d,%d,%d,%d",
- UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),
- UC(p[0]), UC(p[1])) == COMPLETE)
- return OK;
-
- return NOTOK;
-}
-
-static int
-dataconn (void)
-{
- int fd;
- struct sockaddr_in in_socket;
-
- if ((fd = join_tcp_client (data_fd, &in_socket)) == NOTOK) {
- perror ("join_tcp_client");
- return NOTOK;
- }
- close_tcp_socket (data_fd);
- data_fd = fd;
-
- return OK;
-}
-
-
-static int
-command (int arg1, ...)
-{
- int val;
- va_list ap;
-
- va_start (ap, arg1);
- val = vcommand (arg1, ap);
- va_end (ap);
-
- return val;
-}
-
-static int
-vcommand (int complete, va_list ap)
-{
- int len;
- char buffer[BUFSIZ];
-
- if (ftp_fd == NOTOK)
- return NOTOK;
-
- _asnprintf (buffer, sizeof(buffer), NULL, ap);
- if (v_debug)
- fprintf (stderr, "<--- %s\n", buffer);
-
- strcat (buffer, "\r\n");
- len = strlen (buffer);
-
- if (write_tcp_socket (ftp_fd, buffer, len) != len) {
- perror ("write_tcp_socket");
- return NOTOK;
- }
-
- return (getreply (complete, !strcmp (buffer, "QUIT")));
-}
-
-
-static int
-getreply (int complete, int expecteof)
-{
- for (;;) {
- register int code, dig, n;
- int continuation;
- register char *bp;
- char buffer[BUFSIZ];
-
- code = dig = n = continuation = 0;
- bp = buffer;
-
- for (;;) {
- unsigned char c;
-
- if (read_tcp_socket (ftp_fd, &c, 1) < 1) {
- if (expecteof)
- return OK;
-
- perror ("read_tcp_socket");
- return DONE;
- }
- if (c == '\n')
- break;
- *bp++ = c != '\r' ? c : '\0';
-
- dig++;
- if (dig < 4) {
- if (isdigit(c))
- code = code * 10 + (c - '0');
- else /* XXX: naughty FTP... */
- if (isspace (c))
- continuation++;
- }
- else
- if (dig == 4 && c == '-')
- continuation++;
- if (n == 0)
- n = c;
- }
-
- if (v_debug)
- fprintf (stderr, "---> %s\n", buffer);
- if (continuation)
- continue;
-
- n -= '0';
-
- if (v_noise) {
- fprintf (stdout, "%s\n", buffer);
- fflush (stdout);
- v_noise = 0;
- }
- else
- if ((complete == -1 && n != PRELIM)
- || (complete == 0 && n != CONTINUE && n != COMPLETE)
- || (complete == 1 && n != COMPLETE))
- fprintf (stderr, "%s\n", buffer);
-
- return n;
- }
-}
char *MAILHOST_env_variable;
#endif
-#ifdef MHE
- FILE *mhe = NULL;
-#endif
-
done=inc_done;
/* absolutely the first thing we do is save our privileges,
#endif /* POP */
}
-#ifdef MHE
- if (context_find ("mhe")) {
- int i;
- cp = concat (maildir, "/++", NULL);
- i = stat (cp, &st);
- if ((mhe = fopen (cp, "a")) == NULL)
- admonish (cp, "unable to append to");
- else
- if (i == NOTOK)
- chmod (cp, m_gmprot ());
- free (cp);
- }
-#endif /* MHE */
-
/* Get new format string */
nfs = new_fs (form, format, FORMAT);
default:
if (aud)
fputs (scanl, aud);
-# ifdef MHE
- if (mhe)
- fputs (scanl, mhe);
-# endif /* MHE */
if (noisy)
fflush (stdout);
if (!packfile) {
if (aud)
fputs (scanl, aud);
-#ifdef MHE
- if (mhe)
- fputs (scanl, mhe);
-#endif /* MHE */
if (noisy)
fflush (stdout);
if (aud)
fputs (scanl, aud);
-# ifdef MHE
- if (mhe)
- fputs (scanl, mhe);
-# endif /* MHE */
if (noisy)
fflush (stdout);
if (!packfile) {
if (aud)
fclose (aud);
-#ifdef MHE
- if (mhe)
- fclose (mhe);
-#endif /* MHE */
-
if (noisy)
fflush (stdout);
/* mhcachesbr.c */
int find_cache (CT, int, int *, char *, char *, int);
-/* ftpsbr.c */
-int ftp_get (char *, char *, char *, char *, char *, char *, int, int);
-
/* mhfree.c */
void free_content (CT);
void free_ctinfo (CT);
if ((ftp = context_find (nmhaccessftp)) && !*ftp)
ftp = NULL;
-#ifndef BUILTIN_FTP
if (!ftp)
return NOTOK;
-#endif
switch (openExternal (e->eb_parent, e->eb_content, ce, file, &fd)) {
case NOTOK:
return NOTOK;
}
-#ifdef BUILTIN_FTP
- if (ftp)
-#endif
{
int child_id, i, vecp;
char *vec[9];
default:
if (pidXwait (child_id, NULL)) {
-#ifdef BUILTIN_FTP
-losing_ftp:
-#endif
username = password = NULL;
ce->ce_unlink = 1;
return NOTOK;
break;
}
}
-#ifdef BUILTIN_FTP
- else
- if (ftp_get (e->eb_site, user, pass, e->eb_dir, e->eb_name,
- ce->ce_file,
- e->eb_mode && !mh_strcasecmp (e->eb_mode, "ascii"), 0)
- == NOTOK)
- goto losing_ftp;
-#endif
if (cachefile[0]) {
if (caching)
#include <h/mime.h>
#include <h/mhparse.h>
#include <h/utils.h>
+#include <sys/wait.h>
extern int debugsw;
{ "help", 0 },
#define FILESW 27
{ "file file", 4 }, /* interface from msh */
-
-#ifdef MHE
#define BILDSW 28
{ "build", 5 }, /* interface from mhe */
-#endif
{ NULL, 0 }
};
struct stat st;
FILE *in;
-#ifdef MHE
int buildsw = 0;
-#endif /* MHE */
#ifdef LOCALE
setlocale(LC_ALL, "");
adios (NULL, "missing argument to %s", argp[-2]);
nwhat = 0;
continue;
-#ifdef MHE
case BILDSW:
buildsw++; /* fall... */
-#endif /* MHE */
case NWHATSW:
nwhat++;
continue;
try_it_again:
-#ifdef MHE
strncpy (drft, buildsw ? m_maildir ("reply")
: m_draft (dfolder, NULL, NOUSE, &isdf), sizeof(drft));
/* Check if a draft exists */
if (!buildsw && stat (drft, &st) != NOTOK) {
-#else
- strncpy (drft, m_draft (dfolder, dmsg, NOUSE, &isdf), sizeof(drft));
-
- /* Check if a draft exists */
- if (stat (drft, &st) != NOTOK) {
-#endif /* MHE */
printf ("Draft \"%s\" exists (%ld bytes).", drft, (long) st.st_size);
for (i = LISTDSW; i != YESW;) {
if (!(argp = getans ("\nDisposition? ", isdf ? aqrnl : aqrl)))
continue; /* else fall */
case ',':
-#ifdef MHE
- case '+':
-#endif /* MHE */
-#ifdef UCI
- case '_':
- case '#':
-#endif /* UCI */
break;
default:
char name[NAMESZ];
static int rlwidth, slwidth;
-#ifdef RPATHS
- char returnpath[BUFSIZ];
- char deliverydate[BUFSIZ];
-#endif
-
/* first-time only initialization */
if (!scanl) {
if (width == 0) {
}
if ((scnout = fopen (scnmsg, "w")) == NULL)
adios (scnmsg, "unable to write");
-#ifdef RPATHS
- /*
- * Add the Return-Path and Delivery-Date
- * header fields to message.
- */
- if (get_returnpath (returnpath, sizeof(returnpath),
- deliverydate, sizeof(deliverydate))) {
- FPUTS ("Return-Path: ");
- FPUTS (returnpath);
- FPUTS ("Delivery-Date: ");
- FPUTS (deliverydate);
- }
-#endif /* RPATHS */
}
/* scan - main loop */
struct stat st;
char *attach = (char *)0; /* header field name for attachments */
int attachformat = 0; /* mhbuild format specifier for attachments */
-#ifdef UCI
- FILE *fp;
-#endif /* UCI */
#ifdef LOCALE
setlocale(LC_ALL, "");
if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0)
if ((cp = context_find ("signature")) && *cp)
m_putenv ("SIGNATURE", cp);
-#ifdef UCI
- else {
- snprintf (buf, sizeof(buf), "%s/.signature", mypath);
- if ((fp = fopen (buf, "r")) != NULL
- && fgets (buf, sizeof buf, fp) != NULL) {
- fclose (fp);
- if (cp = strchr (buf, '\n'))
- *cp = 0;
- m_putenv ("SIGNATURE", buf);
- }
- }
-#endif /* UCI */
for (msgnum = 0; msgnum < msgp; msgnum++)
if (stat (msgs[msgnum], &st) == NOTOK)
verbose_printf ("(delivering to standard mail spool)\n");
/* last resort - deliver to standard mail spool */
-#ifdef SLOCAL_MBOX
return usr_file (fd, mbox, MBOX_FORMAT);
-#else
- return usr_file (fd, mbox, MMDF_FORMAT);
-#endif
}
if (first) {
first = 0;
if (!strncmp (buffer, "From ", i)) {
-#ifdef RPATHS
- char *fp, *cp, *hp, *ep;
-#endif
/* get copy of envelope information ("From " line) */
envelope = getcpy (buffer);
goto fputs_error;
#endif
-#ifdef RPATHS
- /*
- * Now create a "Return-Path:" line
- * from the "From " line.
- */
- hp = cp = strchr(fp = envelope + i, ' ');
- while ((hp = strchr(++hp, 'r')))
- if (uprf (hp, "remote from")) {
- hp = strrchr(hp, ' ');
- break;
- }
- if (hp) {
- /* return path for UUCP style addressing */
- ep = strchr(++hp, '\n');
- snprintf (buffer, sizeof(buffer), "Return-Path: %.*s!%.*s\n",
- (int)(ep - hp), hp, (int)(cp - fp), fp);
- } else {
- /* return path for standard domain addressing */
- snprintf (buffer, sizeof(buffer), "Return-Path: %.*s\n",
- (int)(cp - fp), fp);
- }
-
- /* Add Return-Path header to message */
- fputs (buffer, ffp);
- if (ferror (ffp))
- goto fputs_error;
-#endif
/* Put the delivery date in message */
fputs (ddate, ffp);
if (ferror (ffp))
char PC;
# endif
-#endif notdef_lyndon_posix
+#endif /* notdef_lyndon_posix */
static long speedcode;
default:
if ((status = pidwait (pid, NOTOK))) {
-#ifdef ATTVIBUG
- if ((cp = r1bindex (*ed, '/'))
- && strcmp (cp, "vi") == 0
- && (status & 0x00ff) == 0)
- status = 0;
- else {
-#endif
if (((status & 0xff00) != 0xff00)
&& (!reedit || (status & 0x00ff))) {
if (!use && (status & 0xff00) &&
}
status = -2; /* maybe "reedit ? -2 : -1"? */
break;
-#ifdef ATTVIBUG
- }
-#endif
}
reedit++;
#ifndef lint
int distsw = 0;
#endif
-#ifdef UCI
- FILE *fp;
-#endif
/*
* Make sure these are defined. In particular, we need
if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0)
if ((cp = context_find ("signature")) && *cp)
m_putenv ("SIGNATURE", cp);
-#ifdef UCI
- else {
- snprintf (buf, sizeof(buf), "%s/.signature", mypath);
- if ((fp = fopen (buf, "r")) != NULL
- && fgets (buf, sizeof(buf), fp) != NULL) {
- fclose (fp);
- if (cp = strchr (buf, '\n'))
- *cp = 0;
- m_putenv ("SIGNATURE", buf);
- }
- }
-#endif /* UCI */
if ((annotext = getenv ("mhannotate")) == NULL || *annotext == 0)
annotext = NULL;