mirror of
git://git.psyced.org/git/psyced
synced 2024-08-15 03:25:10 +00:00
175 lines
6.4 KiB
Diff
175 lines
6.4 KiB
Diff
|
=== src/mailfold.h
|
||
|
==================================================================
|
||
|
--- src/mailfold.h (revision 1073)
|
||
|
+++ src/mailfold.h (local)
|
||
|
@@ -7,7 +7,7 @@
|
||
|
const int ignwerr,const int dolock)),
|
||
|
readmail P((int rhead,const long tobesent));
|
||
|
void
|
||
|
- logabstract P((const char*const lstfolder)),
|
||
|
+ logabstract P((const char*const lstfolder,const char*psycnotify)),
|
||
|
concon P((const int ch));
|
||
|
|
||
|
extern int logopened,rawnonl;
|
||
|
=== src/procmail.c
|
||
|
==================================================================
|
||
|
--- src/procmail.c (revision 1073)
|
||
|
+++ src/procmail.c (local)
|
||
|
@@ -766,6 +766,10 @@
|
||
|
}
|
||
|
if(readparse(chp+1,getb,0,skiprc))
|
||
|
goto fail;
|
||
|
+ if (strchr(chp+1, ':') > 0) { /* notify a non-email scheme */
|
||
|
+ logabstract(tgetenv(lastfolder), chp+1);
|
||
|
+ goto setlsucc;
|
||
|
+ }
|
||
|
if(i)
|
||
|
{ if(startchar==themail.p)
|
||
|
{ startchar[filled]='\0'; /* just in case */
|
||
|
@@ -953,7 +957,7 @@
|
||
|
return rcs_DELIVERED;
|
||
|
}
|
||
|
logsetlsucc: if(succeed&&flags[CONTINUE]&&lgabstract==2)
|
||
|
- logabstract(tgetenv(lastfolder));
|
||
|
+ logabstract(tgetenv(lastfolder), 0);
|
||
|
setlsucc: rawnonl=0;lastsucc=succeed;lasttell= -1; /* for comsat */
|
||
|
resettmout(); /* clear any pending timer */
|
||
|
}
|
||
|
=== src/misc.c
|
||
|
==================================================================
|
||
|
--- src/misc.c (revision 1073)
|
||
|
+++ src/misc.c (local)
|
||
|
@@ -287,7 +287,7 @@
|
||
|
{ lstfolder=tgetenv(lastfolder);
|
||
|
sendcomsat(0);
|
||
|
}
|
||
|
- logabstract(lstfolder);
|
||
|
+ logabstract(lstfolder, 0);
|
||
|
if(!nextexit) /* these are unsafe from sighandlers */
|
||
|
{ shutdesc();
|
||
|
exectrap(traps);
|
||
|
=== src/mailfold.c
|
||
|
==================================================================
|
||
|
--- src/mailfold.c (revision 1073)
|
||
|
+++ src/mailfold.c (local)
|
||
|
@@ -331,19 +331,24 @@
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
-void logabstract(lstfolder)const char*const lstfolder;
|
||
|
+#define PROG "procmail/psyc"
|
||
|
+#include "psycmail.c"
|
||
|
+
|
||
|
+void logabstract(lstfolder,psycnotify)
|
||
|
+ const char*const lstfolder;const char*psycnotify;
|
||
|
{ if(lgabstract>0||(logopened||verbose)&&lgabstract) /* don't mail it back? */
|
||
|
- { char*chp,*chp2;int i;static const char sfolder[]=FOLDER;
|
||
|
+ { char*chp,*chp2,*chp3;int i;static const char sfolder[]=FOLDER;
|
||
|
if(mailread) /* is the mail completely read in? */
|
||
|
{ i= *thebody;*thebody='\0'; /* terminate the header, just in case */
|
||
|
if(eqFrom_(chp=themail.p)) /* any "From " header */
|
||
|
- { if(chp=strchr(themail.p,'\n'))
|
||
|
- *chp='\0';
|
||
|
+ { if(chp3=strchr(themail.p,'\n'))
|
||
|
+ *chp3='\0';
|
||
|
else
|
||
|
- chp=thebody; /* preserve mailbox format */
|
||
|
- elog(themail.p);elog(newline);*chp='\n'; /* (any length) */
|
||
|
+ chp3=thebody; /* preserve mailbox format */
|
||
|
+ if(!psycnotify) /* TODO: remove this if */
|
||
|
+ { elog(themail.p);elog(newline); /* (any length) */
|
||
|
+ }
|
||
|
}
|
||
|
- *thebody=i; /* eliminate the terminator again */
|
||
|
if(!nextexit&& /* don't reenter malloc/free */
|
||
|
(chp=egrepin(NSUBJECT,chp,(long)(thebody-chp),0)))
|
||
|
{ size_t subjlen;
|
||
|
@@ -351,15 +356,46 @@
|
||
|
if((subjlen=chp-++chp2)>MAXSUBJECTSHOW)
|
||
|
subjlen=MAXSUBJECTSHOW; /* keep it within bounds */
|
||
|
((char*)tmemmove(buf,chp2,subjlen))[subjlen]='\0';detab(buf);
|
||
|
- elog(" ");elog(buf);elog(newline);
|
||
|
- }
|
||
|
+ if(!psycnotify) /* TODO: remove this if */
|
||
|
+ { elog(" ");elog(buf);elog(newline);
|
||
|
+ }
|
||
|
}
|
||
|
+ if (psycnotify) {
|
||
|
+ /* forward as instant message to a psyc daemon --lynX 2007 */
|
||
|
+#ifdef PSYC_DEBUG
|
||
|
+ fprintf(stderr, "PROCPSYC <%s>\n", psycnotify);
|
||
|
+ fprintf(stderr, "PROCFROM <%s>\n", themail.p + sizeof("From"));
|
||
|
+ fprintf(stderr, "PROCSUBJ <%s>\n", buf + sizeof("Subject:"));
|
||
|
+#endif
|
||
|
+ /* TODO: make PSYCRELAY=4404 a procmail variable,
|
||
|
+ * default being 0 as given here below --lynX
|
||
|
+ */
|
||
|
+ psycbiff(psycrelay, psycnotify, themail.p + sizeof("From"),
|
||
|
+ buf + sizeof("Subject:"));
|
||
|
+ /*
|
||
|
+ * we could also add a PSYCLOG variable which forwards *any*
|
||
|
+ * logabstract() to a psyc entity, in case the user prefers that
|
||
|
+ * to having a !psyc: rule in procmailrc --lynX
|
||
|
+ *
|
||
|
+ * TODO: how would we do if the user decides to turn off the
|
||
|
+ * logging feature yet expects procmail to do psyc forward?
|
||
|
+ * does this code get called in that case?
|
||
|
+ */
|
||
|
+ }
|
||
|
+ *chp3='\n'; *thebody=i; /* eliminate the terminators again */
|
||
|
+ }
|
||
|
+ /* currently we call logabstract even when we only want to psycnotify -
|
||
|
+ * this should be optimized so that psycnotify is a by the way operation
|
||
|
+ * of logging, but i can't get the procmail flow right --lynX
|
||
|
+ */
|
||
|
+ if(!psycnotify) { /* TODO: remove this if */
|
||
|
elog(sfolder);strlcpy(buf,lstfolder,MAXfoldlen);detab(buf);elog(buf);
|
||
|
i=strlen(buf)+STRLEN(sfolder);i-=i%TABWIDTH; /* last dump */
|
||
|
do elog(TABCHAR);
|
||
|
while((i+=TABWIDTH)<LENoffset);
|
||
|
ultstr(7,lastdump,buf);elog(buf);elog(newline);
|
||
|
}
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
static int concnd; /* last concatenation value */
|
||
|
=== config.h
|
||
|
==================================================================
|
||
|
--- config.h (revision 1073)
|
||
|
+++ config.h (local)
|
||
|
@@ -217,6 +217,7 @@
|
||
|
#define MATCHVAR "MATCH"
|
||
|
#define AMATCHVAR "MATCH="
|
||
|
#define DEFlogabstract -1 /* abstract by default, but don't mail it back */
|
||
|
+#define DEFpsycrelay ""
|
||
|
#define COMSAThost "localhost" /* where the biff/comsat daemon lives */
|
||
|
#define COMSATservice "biff" /* the service name of the comsat daemon */
|
||
|
#define COMSATprotocol "udp" /* if you change this, comsat() needs patching */
|
||
|
=== src/procmail.h
|
||
|
==================================================================
|
||
|
--- src/procmail.h (revision 1073)
|
||
|
+++ src/procmail.h (local)
|
||
|
@@ -85,6 +85,7 @@
|
||
|
#define sendmail (strenstr[5].sval)
|
||
|
#define flagsendmail (strenstr[6].sval)
|
||
|
/* #define PM_version (strenstr[7].sval) */
|
||
|
+#define psycrelay (strenstr[8].sval)
|
||
|
|
||
|
|
||
|
extern char*buf,*buf2,*loclock,*thebody;
|
||
|
=== src/variables.c
|
||
|
==================================================================
|
||
|
--- src/variables.c (revision 1073)
|
||
|
+++ src/variables.c (local)
|
||
|
@@ -31,7 +31,8 @@
|
||
|
struct varstr strenstr[]={{"SHELLMETAS",DEFshellmetas},{"LOCKEXT",DEFlockext},
|
||
|
{"MSGPREFIX",DEFmsgprefix},{"TRAP",empty},
|
||
|
{"SHELLFLAGS",DEFshellflags},{"SENDMAIL",DEFsendmail},
|
||
|
- {"SENDMAILFLAGS",DEFflagsendmail},{"PROCMAIL_VERSION",PM_VERSION}};
|
||
|
+ {"SENDMAILFLAGS",DEFflagsendmail},{"PROCMAIL_VERSION",PM_VERSION},
|
||
|
+ {"PSYCRELAY",DEFpsycrelay}};
|
||
|
|
||
|
#define MAXvarvals maxindex(strenvvar)
|
||
|
#define MAXvarstrs maxindex(strenstr)
|
||
|
|