added -bv detection
parent
98a2e9aef0
commit
c4973961d8
113
kuvert_submit.c
113
kuvert_submit.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $Id: kuvert_submit.c,v 1.9 2007/08/12 03:18:39 az Exp $
|
* $Id: kuvert_submit.c,v 2.0 2008/06/01 05:15:35 az Exp az $
|
||||||
*
|
*
|
||||||
* this file is part of kuvert, a wrapper around your mta that
|
* this file is part of kuvert, a wrapper around your mta that
|
||||||
* does pgp/gpg signing/signing+encrypting transparently, based
|
* does pgp/gpg signing/signing+encrypting transparently, based
|
||||||
|
@ -51,63 +51,76 @@ int main(int argc,char **argv)
|
||||||
FILE *out;
|
FILE *out;
|
||||||
FILE *cf;
|
FILE *cf;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
int direct=1,norecips=0;
|
int direct=1,norecips=0,testmode=0,i;
|
||||||
|
|
||||||
/* determine whether to queue stuff or to call sendmail
|
/* determine whether to queue stuff or to call sendmail
|
||||||
directly: if there is no proper config file for kuvert in $HOME
|
directly: if there is no proper config file for kuvert in $HOME
|
||||||
go direct, otherwise we enqueue. */
|
or if given -bv go direct, otherwise we enqueue. */
|
||||||
openlog(argv[0],LOG_NDELAY|LOG_PID,LOG_MAIL);
|
openlog(argv[0],LOG_NDELAY|LOG_PID,LOG_MAIL);
|
||||||
|
|
||||||
/* look for config file in $HOME */
|
for(i=1;i<argc;++i)
|
||||||
pwentry=getpwuid(getuid());
|
|
||||||
if (!pwentry)
|
|
||||||
BAILOUT("getpwuid failed: %s",strerror(errno));
|
|
||||||
|
|
||||||
/* open and scan the conffile for an queue-file definition
|
|
||||||
if there is no conffile, kuvert wont work ever */
|
|
||||||
if (snprintf(filen,sizeof(filen),"%s%s",pwentry->pw_dir,CONFFILE)==-1)
|
|
||||||
BAILOUT("overlong filename, suspicious",NULL);
|
|
||||||
if (!(cf=fopen(filen,"r")))
|
|
||||||
{
|
{
|
||||||
/* no config file -> exec sendmail */
|
if (!strncmp(argv[i],"-bv",3))
|
||||||
syslog(LOG_INFO,"user has no "CONFFILE" config file, running sendmail");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
direct=0;
|
|
||||||
/* scan the lines for ^QUEUEDIR\s+ */
|
|
||||||
dirnp=NULL;
|
|
||||||
while(!feof(cf))
|
|
||||||
{
|
{
|
||||||
p=fgets(buffer,sizeof(buffer)-1,cf);
|
testmode=1;
|
||||||
/* empty file? ok, we'll ignore it */
|
syslog(LOG_INFO,"-bv argument present, running sendmail.");
|
||||||
if (!p)
|
break;
|
||||||
break;
|
}
|
||||||
|
}
|
||||||
if (!strncasecmp(buffer,"QUEUEDIR",sizeof("QUEUEDIR")-1))
|
|
||||||
{
|
if (!testmode)
|
||||||
p=buffer+sizeof("QUEUEDIR")-1;
|
{
|
||||||
for(;*p && isspace(*p);++p)
|
/* look for config file in $HOME */
|
||||||
;
|
pwentry=getpwuid(getuid());
|
||||||
if (*p)
|
if (!pwentry)
|
||||||
{
|
BAILOUT("getpwuid failed: %s",strerror(errno));
|
||||||
dirnp=p;
|
|
||||||
/* strip the newline from the string */
|
/* open and scan the conffile for an queue-file definition
|
||||||
for(;*p && *p != '\n';++p)
|
if there is no conffile, kuvert wont work ever */
|
||||||
;
|
if (snprintf(filen,sizeof(filen),"%s%s",pwentry->pw_dir,CONFFILE)==-1)
|
||||||
if (*p == '\n')
|
BAILOUT("overlong filename, suspicious",NULL);
|
||||||
*p=0;
|
if (!(cf=fopen(filen,"r")))
|
||||||
/* strip eventual trailing whitespace */
|
{
|
||||||
for(--p;p>dirnp && isspace(*p);--p)
|
/* no config file -> exec sendmail */
|
||||||
*p=0;
|
syslog(LOG_INFO,"user has no "CONFFILE" config file, running sendmail");
|
||||||
}
|
}
|
||||||
/* empty dir? ignore it */
|
else
|
||||||
if (strlen(dirnp)<2)
|
{
|
||||||
dirnp=NULL;
|
direct=0;
|
||||||
break;
|
/* scan the lines for ^QUEUEDIR\s+ */
|
||||||
}
|
dirnp=NULL;
|
||||||
|
while(!feof(cf))
|
||||||
|
{
|
||||||
|
p=fgets(buffer,sizeof(buffer)-1,cf);
|
||||||
|
/* empty file? ok, we'll ignore it */
|
||||||
|
if (!p)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!strncasecmp(buffer,"QUEUEDIR",sizeof("QUEUEDIR")-1))
|
||||||
|
{
|
||||||
|
p=buffer+sizeof("QUEUEDIR")-1;
|
||||||
|
for(;*p && isspace(*p);++p)
|
||||||
|
;
|
||||||
|
if (*p)
|
||||||
|
{
|
||||||
|
dirnp=p;
|
||||||
|
/* strip the newline from the string */
|
||||||
|
for(;*p && *p != '\n';++p)
|
||||||
|
;
|
||||||
|
if (*p == '\n')
|
||||||
|
*p=0;
|
||||||
|
/* strip eventual trailing whitespace */
|
||||||
|
for(--p;p>dirnp && isspace(*p);--p)
|
||||||
|
*p=0;
|
||||||
|
}
|
||||||
|
/* empty dir? ignore it */
|
||||||
|
if (strlen(dirnp)<2)
|
||||||
|
dirnp=NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(cf);
|
||||||
}
|
}
|
||||||
fclose(cf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* direct to sendmail requested? */
|
/* direct to sendmail requested? */
|
||||||
|
|
|
@ -18,7 +18,8 @@ kuvert to intercept and process the outgoing mails. Please see your MUA's
|
||||||
documentation about how to override the MTA to be used.
|
documentation about how to override the MTA to be used.
|
||||||
|
|
||||||
Kuvert_submit transparently invokes C</usr/sbin/sendmail> directly
|
Kuvert_submit transparently invokes C</usr/sbin/sendmail> directly
|
||||||
if it cannot find a ~/.kuvert configuration file. Otherwise, it enqueues
|
if it cannot find a ~/.kuvert configuration file, or if the -bv option
|
||||||
|
is given. Otherwise, it enqueues
|
||||||
the email in the queue directory specified in the configuration file.
|
the email in the queue directory specified in the configuration file.
|
||||||
If that fails or if the configuration file is invalid, kuvert_submit prints an
|
If that fails or if the configuration file is invalid, kuvert_submit prints an
|
||||||
error message to STDERR and terminates with exit code 1.
|
error message to STDERR and terminates with exit code 1.
|
||||||
|
@ -30,7 +31,7 @@ Kuvert_submit also logs messages to syslog with the facility "mail".
|
||||||
|
|
||||||
If it runs the MTA directly then kuvert_submit passes all options through
|
If it runs the MTA directly then kuvert_submit passes all options through
|
||||||
to /usr/sbin/sendmail. Otherwise, it ignores all options except
|
to /usr/sbin/sendmail. Otherwise, it ignores all options except
|
||||||
-f and -t.
|
-f and -t (and -bv which triggers a direct sendmail pass-through).
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue