Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jun 2006 10:38:05 -0800
From:      Andrew Swartz <awswartz@acsalaska.net>
To:        freebsd-questions@freebsd.org
Subject:   Sendmail + Cyrus + Procmail(?) + SpamAssassin
Message-ID:  <4499920D.8060802@acsalaska.net>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------020003030105060108060207
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

I don't know if anyone is still interested, but I found a solution to 
this problem.  My mail goes Sendmail-->Procmail-->CyrusIMAP.

There are numerous discussions of how to configure the 
Sendmail-->Procmail portion, so I'll skip that.

The problem lies in the Procmail-->Cyrus part.  Sendmail and/or Procmail 
insists on adding a "From" line to the top of the message, and this 
causes an error when trying to pass the message from the procmailrc file 
to /usr/lib/cyrus-imapd/deliver.  So I wrote a little C-program that the 
email can be piped through (removing the "From" line); the resulting 
message is passed to /usr/lib/cyrus-imapd/deliver.

Here is my ~/.promailrc file.  Note that all mail is first delivered to 
the user's CyrusIMAP box, then it goes through the procmail checks.  
This is because if I don't do this, then all mail that fails all the 
conditions (recipes) gets shoved into /usr/local/mail/~, which is 
basically a black hole if you are using Cyrus.

#     This file is: ~/.procmailrc
#
#     REQUIREMENTS:
#        1) cyrus-imap (specifically, "/usr/lib/cyrus-imapd/deliver").
#        2) the C-program "rmfromln" in a reachable place (like 
/usr/local/bin).
#            rmfromln:  the email argument is piped in; if the email 
message
#            has been appended with starting "From" line, then this line is
#               removed, otherwise the message remains unchanged.

LOGFILE=/home/r2/procmail.log

###############################################################################
#     This is the default action; it delivers the email to the imap mailbox,
#     and thus this happens regardless of the success|failure of the 
recipes.
#     RATIONAL: every email MUST have a "To" field, otherwise sendmail would
#    not have passed it to us!?
:0 c
* ^To:.
| rmfromln | /usr/lib/cyrus-imapd/deliver $LOGNAME     
###############################################################################

:0
* ^Subject:.*(callalert|CALLALERT)
* ^Subject:.*(on|ON)
| /root/scripts/callalert on

:0
* ^Subject:.*(callalert|CALLALERT)
* ^Subject:.*(off|OFF)
| /root/scripts/callalert off


ALSO:  I've attached the C-program "rmfromln" (and it's source code) 
which removes the "From" line (if it is present).

-Andy Swartz


--------------020003030105060108060207
Content-Type: application/octet-stream;
 name="rmfromln"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="rmfromln"

f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAsIQECDQAAAAkIQAAAAAAADQAIAAGACgAIgAfAAYA
AAA0AAAANIAECDSABAjAAAAAwAAAAAUAAAAEAAAAAwAAAPQAAAD0gAQI9IAECBMAAAATAAAA
BAAAAAEAAAABAAAAAAAAAACABAgAgAQI2AcAANgHAAAFAAAAABAAAAEAAADYBwAA2JcECNiX
BAgkAQAAMAEAAAYAAAAAEAAAAgAAAOQHAADklwQI5JcECMgAAADIAAAABgAAAAQAAAAEAAAA
CAEAAAiBBAgIgQQIIAAAACAAAAAEAAAABAAAAC9saWIvbGQtbGludXguc28uMgAABAAAABAA
AAABAAAAR05VAAAAAAACAAAAAgAAAAUAAAADAAAAEAAAAA8AAAAMAAAADgAAAAAAAAAAAAAA
AQAAAAIAAAADAAAAAAAAAAAAAAAGAAAABwAAAAUAAAAJAAAACgAAAAsAAAAIAAAABAAAAA0A
AAAAAAAAAAAAAAAAAAAAAAAAMwAAAACEBAjmAAAAEgAAADsAAAAQhAQI4QAAABIAAAAaAAAA
IIQECG0AAAASAAAAEgAAADCEBAioAAAAEgAAAEcAAABAhAQI4QAAABIAAAALAAAA/JgECAQA
AAARABYALAAAAFCEBAjUAAAAEgAAAEEAAABghAQI8QAAABIAAABiAAAAcIQECPsAAAASAAAA
TgAAAICEBAjZAAAAEgAAAB8AAACQhAQI3wIAABIAAAB0AAAAoIQECLkAAAASAAAAJgAAAACZ
BAgEAAAAEQAWAFMAAADIhwQIBAAAABEADgB5AAAAAAAAAAAAAAAgAAAAAGxpYmMuc28uNgBz
dGRvdXQAdG1wZmlsZQBmZW9mAGNhbGxvYwBzdGRpbgBzdHJzdHIAZ2V0Y2hhcgBmZ2V0YwBm
cHV0YwByZXdpbmQAZXhpdABfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbgBmcmVl
AF9fZ21vbl9zdGFydF9fAEdMSUJDXzIuMQBHTElCQ18yLjAAAAACAAIAAgADAAIAAgACAAIA
AgACAAIAAgACAAEAAAABAAIAAQAAABAAAAAAAAAAEWlpDQAAAwCIAAAAEAAAABBpaQ0AAAIA
kgAAAAAAAAD4mAQIBg8AAPyYBAgFBgAAAJkECAUNAADMmAQIBwEAANCYBAgHAgAA1JgECAcD
AADYmAQIBwQAANyYBAgHBQAA4JgECAcHAADkmAQIBwgAAOiYBAgHCQAA7JgECAcKAADwmAQI
BwsAAPSYBAgHDAAAVYnlg+wI6PEAAADoTAEAAOiXAwAAycMA/zXEmAQI/yXImAQIAAAAAP8l
zJgECGgAAAAA6eD/////JdCYBAhoCAAAAOnQ/////yXUmAQIaBAAAADpwP////8l2JgECGgY
AAAA6bD/////JdyYBAhoIAAAAOmg/////yXgmAQIaCgAAADpkP////8l5JgECGgwAAAA6YD/
////JeiYBAhoOAAAAOlw/////yXsmAQIaEAAAADpYP////8l8JgECGhIAAAA6VD/////JfSY
BAhoUAAAAOlA////Me1eieGD5PBQVFJoUIcECGgghwQIUVZoYIUECOif////9JCQVYnlU1Do
AAAAAFuBw+ITAACLgzgAAACFwHQC/9CLXfzJw5CQVYnlg+wIgD0EmQQIAHUpoeCXBAiLEIXS
dBeJ9oPABKPglwQI/9Kh4JcECIsQhdJ168YFBJkECAHJw4n2VYnlg+wIobyYBAiFwHQZuAAA
AACFwHQQg+wMaLyYBAjop3r794PEEMnDkJBVieVTg+wUg+TwuAAAAAApxOi6/v//iUXsx0X0
AAAAAIPsDP917Oi1/v//g8QQg+wM/zUAmQQI6HT+//+DxBCIRfuKRfuEwHQigH37CnUC6xqD
7Aj/dewPvkX7UOif/v//g8QQjUX0/wDrw4N99AB1CoPsDGoA6KX+//+D7Aj/dexqCuh4/v//
g8QQjUX0/wCD7AhqAf919OiT/v//g8QQiUXog+wM/3Xs6DL+//+DxBDHRfAAAAAAi0XwO0X0
fALrH4tF8Itd6AHDg+wM/3Xs6Nv9//+DxBCIA41F8P8A69eD7Az/NQCZBAjo0f3//4PEEIXA
dD3HRfAAAAAAi0XwO0X0fALrIoPsCP81/JgECItF8ANF6A++AFDo4f3//4PEEI1F8P8A69SD
7AxqAOjt/f//g+wIaMyHBAj/dejorf3//4PEEIXAdTPHRfAAAAAAi0XwO0X0fALrIoPsCP81
/JgECItF8ANF6A++AFDojf3//4PEEI1F8P8A69ToHv3//4hF+4B9+/91Ausgg+wI/zX8mAQI
D75F+1DoYP3//4PEEOj4/P//iEX769iD7Az/dejoiP3//4PEEItd/MnDVYnlVlPorvz//7jY
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
jSUAAAALBwUAAAKOAwEAAAtNBAAAAo+xBQAAC10AAAACkB4GAAALHgIAAAKRhQAAAAsLAAAA
ApIDAQAAC7EAAAACk4UAAAALZwQAAAKUAwEAAAstAAAAApZTAAAAC7YFAAAClwMBAAAL4wIA
AAKYUwAAAAvrBQAAAptTAAAAC8MCAAACnlMAAAALZQEAAAKhAwEAAAtaAQAAAqYDAQAAC5cE
AAACpzoBAAALkwUAAAKqsQUAAAukBAAAAqseBgAACzYBAAACrrEFAAALSwEAAAKvHgYAAAsc
AQAAArRTAAAAC6sGAAACtRIBAAALvAQAAAK2kAcAAA8EJQYAAAuVBgAAArdsBAAAC1wEAAAC
ulMAAAALOwUAAAK9hQAAAAl/BAAABEUBAwEAAAt1BQAABR7IAAAAC3EBAAAFIwoBAAALIwUA
AAZh5AcAAA8E6gcAABAECAAAAVMAAAARYQQAABEECAAAEQ0EAAAADwQKCAAADwRhBAAAC9QD
AAAGZBsIAAAPBCEIAAAQNggAAAFTAAAAETYIAAARYQQAAAAPBOcDAAALfQEAAAaxRwgAAA8E
9AQAAAtSAAAABTVfBQAAC+UAAAAFN+AFAAALAAAAAAU4UwAAAAufBgAABTmUBQAAC6AFAAAF
OoUAAAAX3AQAAAEZlggAAAEFA8iHBAgTUwAAAAC2AAAAAgAYAQAABAE6AQAAL3Vzci9zcmMv
YnVpbGQvMzI0OTU0LWkzODYvQlVJTEQvZ2xpYmMtMi4zLjItMjAwMzA0MDIwNDMyL2J1aWxk
LWkzODYtbGludXgvY3N1L2NydGkuUwAvdXNyL3NyYy9idWlsZC8zMjQ5NTQtaTM4Ni9CVUlM
RC9nbGliYy0yLjMuMi0yMDAzMDQwMjA0MzIvY3N1AEdOVSBBUyAyLjEzLjkwLjAuMTgAAYC2
AAAAAgAoAQAABAHwAQAAL3Vzci9zcmMvYnVpbGQvMzI0OTU0LWkzODYvQlVJTEQvZ2xpYmMt
Mi4zLjItMjAwMzA0MDIwNDMyL2J1aWxkLWkzODYtbGludXgvY3N1L2NydG4uUwAvdXNyL3Ny
Yy9idWlsZC8zMjQ5NTQtaTM4Ni9CVUlMRC9nbGliYy0yLjMuMi0yMDAzMDQwMjA0MzIvY3N1
AEdOVSBBUyAyLjEzLjkwLjAuMTgAAYABEQAQBhEBEgEDCBsIJQgTBQAAAAERARAGEgERAQMO
Gw4lDhMLAAACEwEBEwsLOgs7CwAAAw0AAw46CzsLSRM4CgAABAEBARNJEwAABSEASRMvCwAA
BiQAAw4LCz4LAAAHJAADCAsLPgsAAAgXAQETCws6CzsLAAAJFgADDjoLOwVJEwAACg0AAw46
CzsLSRMAAAsWAAMOOgs7C0kTAAAMBAEBEwsLOgs7CwAADSgAAw4cCwAADhMBARMDDgsLOgs7
CwAADw8ACwtJEwAAEBUBARMnDEkTAAARBQBJEwAAEg8ACwsAABMmAEkTAAAUFQEBEycMAAAV
EwADDjwMAAAWIQBJEwAAFzQAAw46CzsLSRM/DAIKAAAAAREAEAYDCBsIJQgTBQAAAAERABAG
AwgbCCUIEwUAAABRAAAAAgAvAAAAAQH7DgoAAQEBAQAAAAEuLi9zeXNkZXBzL2kzODYvZWxm
AABzdGFydC5TAAEAAAAABQKwhAQIAy4BMB4xOiIfIVZXHh9ZVwIDAAEBFgAAAAIAEAAAAAEB
+w4KAAEBAQEAAAABAADHAAAAAgDBAAAAAQH7DgoAAQEBAQAAAAEuLi9zeXNkZXBzL2dlbmVy
aWMvYml0cwAuLi93Y3NtYnMAL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8z
LjIuMi9pbmNsdWRlAC4uL3N5c2RlcHMvZ251AC4uL2ljb252AABpbml0LmMAAAAAdHlwZXMu
aAABAAB3Y2hhci5oAAIAAHN0ZGRlZi5oAAMAAF9HX2NvbmZpZy5oAAQAAGdjb252LmgABQAA
ALIAAAACAGkAAAABAfsOCgABAQEBAAAAAS91c3Ivc3JjL2J1aWxkLzMyNDk1NC1pMzg2L0JV
SUxEL2dsaWJjLTIuMy4yLTIwMDMwNDAyMDQzMi9idWlsZC1pMzg2LWxpbnV4L2NzdQAAY3J0
aS5TAAEAAAAABQKohwQIAzIBHiweHlceAgkAAQEABQLYgwQIAyIBHiw6AgYAAQEABQLUhAQI
AwsBHiweHlceZGQsLC06HgICAAEBkAAAAAIAaQAAAAEB+w4KAAEBAQEAAAABL3Vzci9zcmMv
YnVpbGQvMzI0OTU0LWkzODYvQlVJTEQvZ2xpYmMtMi4zLjItMjAwMzA0MDIwNDMyL2J1aWxk
LWkzODYtbGludXgvY3N1AABjcnRuLlMAAQAAAAAFAr6HBAgDEgE6HgIBAAEBAAUC7YMECAMJ
AR4CAQABAQAAABAAAAD/////AQABfAgMBASIAQAAX0dfaW50MzJfdABfX3RpbWVfdABfX0dD
T05WX0lOQ09NUExFVEVfSU5QVVQAX19kYWRkcl90AF9faW50MzJfdABfX2djb252X2luaXRf
ZmN0AF9HX2ljb252X3QAX19ybGltNjRfdABfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUgBf
X2djb252X2luZm8Ac2hvcnQgdW5zaWduZWQgaW50AHVuc2lnbmVkIGNoYXIAX191c2Vjb25k
c190AF9fY291bnRlcgBfX2ZjdABfX3ZhbABfX3ZhbHVlAF9fbnN0ZXBzAF9HX2ludDE2X3QA
X19tYXhfbmVlZGVkX2Zyb20AX19nY29udl9idG93Y19mY3QAX19vZmZfdABfX3NzaXplX3QA
X19zdGF0ZXAAaW5pdC5jAF9fZnNmaWxjbnRfdABfX3N0ZXBzAF9fZnNmaWxjbnQ2NF90AF9f
YmxrY250X3QAX19ibGtzaXplX3QAX0dfZnBvczY0X3QAX19nY29udl90AF9fdHJhbnNfZW5k
X2ZjdABfX3VfaW50AC91c3Ivc3JjL2J1aWxkLzMyNDk1NC1pMzg2L0JVSUxEL2dsaWJjLTIu
My4yLTIwMDMwNDAyMDQzMi9jc3UAX19HQ09OVl9JTExFR0FMX0lOUFVUAF9fZ2NvbnZfbG9h
ZGVkX29iamVjdABfX3RvX25hbWUAX191aW50NjRfdABfX2lkX3QAX19HQ09OVl9FTVBUWV9J
TlBVVABfX2NkAF9faW5vX3QAX19HQ09OVl9OT0NPTlYAX19pbnZvY2F0aW9uX2NvdW50ZXIA
X19waWRfdABfX3Vfc2hvcnQAX19jb3VudABfX3F1YWRfdABfX3VfbG9uZwBfX2ZzaWRfdABf
X0dDT05WX0ZVTExfT1VUUFVUAF9fbWF4X25lZWRlZF90bwBfX3RpbWVyX3QAX19zdGF0ZWZ1
bABfX3VpbnQzMl90AF9fa2V5X3QAX191X2NoYXIAX19nY29udl9zdGVwAF9fc2hsaWJfaGFu
ZGxlAF9fbWluX25lZWRlZF90bwBzaG9ydCBpbnQAX19kZXZfdABsb25nIGxvbmcgaW50AF9f
Z2NvbnZfdHJhbnNfZGF0YQBfX291dGJ1ZgBsb25nIGxvbmcgdW5zaWduZWQgaW50AF9fdWlk
X3QAX193Y2hiAF9fdWludDE2X3QAd2ludF90AF9fdV9xdWFkX3QAX19nY29udl90cmFuc19l
bmRfZmN0AF9fZmxhZ3MAX19vdXRidWZlbmQAX19jb21iaW5lZABfX2djb252X3RyYW5zX2lu
aXRfZmN0AF9faW5pdF9mY3QAX19tb2RuYW1lAF9fdHJhbnNfY29udGV4dF9mY3QAR05VIEMg
My4yLjIgMjAwMzAyMjIgKFJlZCBIYXQgTGludXggMy4yLjItNSkAX190cmFuc19mY3QAX19y
bGltX3QAX193Y2gAX19pbnRwdHJfdABfX3N1c2Vjb25kc190AF9faW5vNjRfdAB3Y2hhcl90
AF9fR0NPTlZfSVNfTEFTVABfX2Jsa2NudDY0X3QAX19mc2Jsa2NudDY0X3QAX19tb2RlX3QA
X19xYWRkcl90AF9fcG9zAF9fZ2NvbnZfZW5kX2ZjdABfSU9fc3RkaW5fdXNlZABfX2ludGVy
bmFsX3VzZQBfX0dDT05WX05PREIAX19jbG9ja190AF9fZ2NvbnZfc3RlcF9kYXRhAF9fZ2Nv
bnZfdHJhbnNfcXVlcnlfZmN0AF9fc29ja2xlbl90AF9faW50NjRfdABfX0dDT05WX05PTUVN
AF9fb2ZmNjRfdABfX2J0b3djX2ZjdABfR19mcG9zX3QAX19pbnQ4X3QAX19HQ09OVl9PSwBf
X2ZzYmxrY250X3QAX0dfdWludDMyX3QAX19ubGlua190AF9fc3dibGtfdABfX0dDT05WX0lO
VEVSTkFMX0VSUk9SAF9fbWJzdGF0ZV90AF9fZ2lkX3QAX19jbG9ja2lkX3QAX19zdGF0ZQBf
X2djb252X3RyYW5zX2NvbnRleHRfZmN0AF9fbmV4dABfX0dDT05WX0lHTk9SRV9FUlJPUlMA
X19lbmRfZmN0AF9fdHJhbnMAX191aW50OF90AF9fZ2NvbnZfZmN0AF9fZnJvbV9uYW1lAF9f
bWluX25lZWRlZF9mcm9tAF9fZ2NvbnZfdHJhbnNfZmN0AF9fZGF0YQBfX2NhZGRyX3QAX0df
dWludDE2X3QAX19sb2ZmX3QAX19pbnQxNl90AAAuc3ltdGFiAC5zdHJ0YWIALnNoc3RydGFi
AC5pbnRlcnAALm5vdGUuQUJJLXRhZwAuaGFzaAAuZHluc3ltAC5keW5zdHIALmdudS52ZXJz
aW9uAC5nbnUudmVyc2lvbl9yAC5yZWwuZHluAC5yZWwucGx0AC5pbml0AC50ZXh0AC5maW5p
AC5yb2RhdGEALmVoX2ZyYW1lAC5kYXRhAC5keW5hbWljAC5jdG9ycwAuZHRvcnMALmpjcgAu
Z290AC5ic3MALmNvbW1lbnQALmRlYnVnX2FyYW5nZXMALmRlYnVnX3B1Ym5hbWVzAC5kZWJ1
Z19pbmZvAC5kZWJ1Z19hYmJyZXYALmRlYnVnX2xpbmUALmRlYnVnX2ZyYW1lAC5kZWJ1Z19z
dHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAABAAAA
AgAAAPSABAj0AAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAjAAAABwAAAAIAAAAIgQQICAEAACAA
AAAAAAAAAAAAAAQAAAAAAAAAMQAAAAUAAAACAAAAKIEECCgBAABUAAAABAAAAAAAAAAEAAAA
BAAAADcAAAALAAAAAgAAAHyBBAh8AQAAAAEAAAUAAAABAAAABAAAABAAAAA/AAAAAwAAAAIA
AAB8ggQIfAIAAJwAAAAAAAAAAAAAAAEAAAAAAAAARwAAAP///28CAAAAGIMECBgDAAAgAAAA
BAAAAAAAAAACAAAAAgAAAFQAAAD+//9vAgAAADiDBAg4AwAAMAAAAAUAAAABAAAABAAAAAAA
AABjAAAACQAAAAIAAABogwQIaAMAABgAAAAEAAAAAAAAAAQAAAAIAAAAbAAAAAkAAAACAAAA
gIMECIADAABYAAAABAAAAAsAAAAEAAAACAAAAHUAAAABAAAABgAAANiDBAjYAwAAFwAAAAAA
AAAAAAAABAAAAAAAAABwAAAAAQAAAAYAAADwgwQI8AMAAMAAAAAAAAAAAAAAAAQAAAAEAAAA
ewAAAAEAAAAGAAAAsIQECLAEAAD4AgAAAAAAAAAAAAAEAAAAAAAAAIEAAAABAAAABgAAAKiH
BAioBwAAGwAAAAAAAAAAAAAABAAAAAAAAACHAAAAAQAAAAIAAADEhwQIxAcAAA0AAAAAAAAA
AAAAAAQAAAAAAAAAjwAAAAEAAAACAAAA1IcECNQHAAAEAAAAAAAAAAAAAAAEAAAAAAAAAJkA
AAABAAAAAwAAANiXBAjYBwAADAAAAAAAAAAAAAAABAAAAAAAAACfAAAABgAAAAMAAADklwQI
5AcAAMgAAAAFAAAAAAAAAAQAAAAIAAAAqAAAAAEAAAADAAAArJgECKwIAAAIAAAAAAAAAAAA
AAAEAAAAAAAAAK8AAAABAAAAAwAAALSYBAi0CAAACAAAAAAAAAAAAAAABAAAAAAAAAC2AAAA
AQAAAAMAAAC8mAQIvAgAAAQAAAAAAAAAAAAAAAQAAAAAAAAAuwAAAAEAAAADAAAAwJgECMAI
AAA8AAAAAAAAAAAAAAAEAAAABAAAAMAAAAAIAAAAAwAAAPyYBAj8CAAADAAAAAAAAAAAAAAA
BAAAAAAAAADFAAAAAQAAAAAAAAAAAAAA/AgAADIBAAAAAAAAAAAAAAEAAAAAAAAAzgAAAAEA
AAAAAAAAAAAAADAKAAB4AAAAAAAAAAAAAAAIAAAAAAAAAN0AAAABAAAAAAAAAAAAAACoCgAA
JQAAAAAAAAAAAAAAAQAAAAAAAADtAAAAAQAAAAAAAAAAAAAAzQoAAJgKAAAAAAAAAAAAAAEA
AAAAAAAA+QAAAAEAAAAAAAAAAAAAAGUVAAA4AQAAAAAAAAAAAAABAAAAAAAAAAcBAAABAAAA
AAAAAAAAAACdFgAAhAIAAAAAAAAAAAAAAQAAAAAAAAATAQAAAQAAAAAAAAAAAAAAJBkAABQA
AAAAAAAAAAAAAAQAAAAAAAAAIAEAAAEAAAAwAAAAAAAAADgZAAC+BgAAAAAAAAAAAAABAAAA
AQAAABEAAAADAAAAAAAAAAAAAAD2HwAAKwEAAAAAAAAAAAAAAQAAAAAAAAABAAAAAgAAAAAA
AAAAAAAAdCYAAHAHAAAhAAAAVAAAAAQAAAAQAAAACQAAAAMAAAAAAAAAAAAAAOQtAADLBAAA
AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9IAECAAAAAADAAEAAAAAAAiB
BAgAAAAAAwACAAAAAAAogQQIAAAAAAMAAwAAAAAAfIEECAAAAAADAAQAAAAAAHyCBAgAAAAA
AwAFAAAAAAAYgwQIAAAAAAMABgAAAAAAOIMECAAAAAADAAcAAAAAAGiDBAgAAAAAAwAIAAAA
AACAgwQIAAAAAAMACQAAAAAA2IMECAAAAAADAAoAAAAAAPCDBAgAAAAAAwALAAAAAACwhAQI
AAAAAAMADAAAAAAAqIcECAAAAAADAA0AAAAAAMSHBAgAAAAAAwAOAAAAAADUhwQIAAAAAAMA
DwAAAAAA2JcECAAAAAADABAAAAAAAOSXBAgAAAAAAwARAAAAAACsmAQIAAAAAAMAEgAAAAAA
tJgECAAAAAADABMAAAAAALyYBAgAAAAAAwAUAAAAAADAmAQIAAAAAAMAFQAAAAAA/JgECAAA
AAADABYAAAAAAAAAAAAAAAAAAwAXAAAAAAAAAAAAAAAAAAMAGAAAAAAAAAAAAAAAAAADABkA
AAAAAAAAAAAAAAAAAwAaAAAAAAAAAAAAAAAAAAMAGwAAAAAAAAAAAAAAAAADABwAAAAAAAAA
AAAAAAAAAwAdAAAAAAAAAAAAAAAAAAMAHgAAAAAAAAAAAAAAAAADAB8AAAAAAAAAAAAAAAAA
AwAgAAAAAAAAAAAAAAAAAAMAIQABAAAAAAAAAAAAAAAEAPH/EAAAAAAAAAAAAAAABADx/wEA
AAAAAAAAAAAAAAQA8f9kAAAAAAAAAAAAAAAEAPH/bwAAAAAAAAAAAAAABADx/3oAAAAAAAAA
AAAAAAQA8f9vAAAAAAAAAAAAAAAEAPH/EAAAAAAAAAAAAAAABADx/28AAAAAAAAAAAAAAAQA
8f8BAAAAAAAAAAAAAAAEAPH/EAAAAAAAAAAAAAAABADx/wEAAAAAAAAAAAAAAAQA8f9kAAAA
AAAAAAAAAAAEAPH/bwAAAAAAAAAAAAAABADx/9MAAAAAAAAAAAAAAAQA8f/aAAAAAAAAAAAA
AAAEAPH/MAEAAAAAAAAAAAAABADx/4YBAAAAAAAAAAAAAAQA8f/aAAAAAAAAAAAAAAAEAPH/
AQAAAAAAAAAAAAAABADx/xAAAAAAAAAAAAAAAAQA8f8BAAAAAAAAAAAAAAAEAPH/ZAAAAAAA
AAAAAAAABADx/9oAAAAAAAAAAAAAAAQA8f+RAQAA1IQECAAAAAACAAwAoQEAAAAAAAAAAAAA
BADx/6wBAACsmAQIAAAAAAEAEgC6AQAAtJgECAAAAAABABMAyAEAANSHBAgAAAAAAQAPANsB
AAC8mAQIAAAAAAEAFADoAQAA4JcECAAAAAABABAA7AEAAASZBAgBAAAAAQAWAPgBAAD4hAQI
AAAAAAIADAAOAgAANIUECAAAAAACAAwAoQEAAAAAAAAAAAAABADx/xoCAACwmAQIAAAAAAEA
EgAnAgAAuJgECAAAAAABABMANAIAANSHBAgAAAAAAQAPAEICAAC8mAQIAAAAAAEAFABOAgAA
hIcECAAAAAACAAwAZAIAAAAAAAAAAAAABADx/zABAAAAAAAAAAAAAAQA8f+GAQAAAAAAAAAA
AAAEAPH/ZAIAAAAAAAAAAAAABADx/wEAAAAAAAAAAAAAAAQA8f8QAAAAAAAAAAAAAAAEAPH/
AQAAAAAAAAAAAAAABADx/2QAAAAAAAAAAAAAAAQA8f9kAgAAAAAAAAAAAAAEAPH/ugIAAAAA
AAAAAAAABADx/8gCAAAAhAQI5gAAABIAAADbAgAAEIQECOEAAAASAAAA7AIAACCEBAhtAAAA
EgAAAPwCAADklwQIAAAAABEAEQAFAwAAxIcECAQAAAARAA4ADAMAADCEBAioAAAAEgAAAB8D
AADYlwQIAAAAABAA8f8wAwAA3JcECAAAAAARAhAAPQMAAFCHBAg0AAAAEgAMAE0DAABAhAQI
4QAAABIAAABfAwAA2IMECAAAAAASAAoAZQMAAPyYBAgEAAAAEQAWAHcDAACwhAQIAAAAABIA
DAB+AwAAUIQECNQAAAASAAAAkAMAANiXBAgAAAAAEADx/6MDAABghAQI8QAAABIAAAC0AwAA
IIcECDAAAAASAAwAxAMAAPyYBAgAAAAAEADx/9ADAABghQQIwAEAABIADADVAwAAcIQECPsA
AAASAAAA8gMAANiXBAgAAAAAEADx/wMEAADYlwQIAAAAACAAEAAOBAAAqIcECAAAAAASAA0A
FAQAAICEBAjZAAAAEgAAACQEAACQhAQI3wIAABIAAAA2BAAA/JgECAAAAAAQAPH/PQQAAMCY
BAgAAAAAEQAVAFMEAACghAQIuQAAABIAAABjBAAACJkECAAAAAAQAPH/aAQAAACZBAgEAAAA
EQAWAHkEAADYlwQIAAAAABAA8f+MBAAAyIcECAQAAAARAA4AmwQAANiXBAgAAAAAEAAQAKgE
AAAAAAAAAAAAACAAAAC8BAAAAAAAAAAAAAAgAAAAADxjb21tYW5kIGxpbmU+AC91c3Ivc3Jj
L2J1aWxkLzMyNDk1NC1pMzg2L0JVSUxEL2dsaWJjLTIuMy4yLTIwMDMwNDAyMDQzMi9idWls
ZC1pMzg2LWxpbnV4L2NvbmZpZy5oADxidWlsdC1pbj4AYWJpLW5vdGUuUwAvdXNyL3NyYy9i
dWlsZC8zMjQ5NTQtaTM4Ni9CVUlMRC9nbGliYy0yLjMuMi0yMDAzMDQwMjA0MzIvYnVpbGQt
aTM4Ni1saW51eC9jc3UvYWJpLXRhZy5oAGluaXQuYwAvdXNyL3NyYy9idWlsZC8zMjQ5NTQt
aTM4Ni9CVUlMRC9nbGliYy0yLjMuMi0yMDAzMDQwMjA0MzIvYnVpbGQtaTM4Ni1saW51eC9j
c3UvY3J0aS5TAC91c3Ivc3JjL2J1aWxkLzMyNDk1NC1pMzg2L0JVSUxEL2dsaWJjLTIuMy4y
LTIwMDMwNDAyMDQzMi9idWlsZC1pMzg2LWxpbnV4L2NzdS9kZWZzLmgAaW5pdGZpbmkuYwBj
YWxsX2dtb25fc3RhcnQAY3J0c3R1ZmYuYwBfX0NUT1JfTElTVF9fAF9fRFRPUl9MSVNUX18A
X19FSF9GUkFNRV9CRUdJTl9fAF9fSkNSX0xJU1RfXwBwLjAAY29tcGxldGVkLjEAX19kb19n
bG9iYWxfZHRvcnNfYXV4AGZyYW1lX2R1bW15AF9fQ1RPUl9FTkRfXwBfX0RUT1JfRU5EX18A
X19GUkFNRV9FTkRfXwBfX0pDUl9FTkRfXwBfX2RvX2dsb2JhbF9jdG9yc19hdXgAL3Vzci9z
cmMvYnVpbGQvMzI0OTU0LWkzODYvQlVJTEQvZ2xpYmMtMi4zLjItMjAwMzA0MDIwNDMyL2J1
aWxkLWkzODYtbGludXgvY3N1L2NydG4uUwBybWZyb21sbl92My5jAGdldGNoYXJAQEdMSUJD
XzIuMABmZ2V0Y0BAR0xJQkNfMi4wAGZlb2ZAQEdMSUJDXzIuMABfRFlOQU1JQwBfZnBfaHcA
dG1wZmlsZUBAR0xJQkNfMi4xAF9fZmluaV9hcnJheV9lbmQAX19kc29faGFuZGxlAF9fbGli
Y19jc3VfZmluaQByZXdpbmRAQEdMSUJDXzIuMABfaW5pdABzdGRvdXRAQEdMSUJDXzIuMABf
c3RhcnQAc3Ryc3RyQEBHTElCQ18yLjAAX19maW5pX2FycmF5X3N0YXJ0AGZwdXRjQEBHTElC
Q18yLjAAX19saWJjX2NzdV9pbml0AF9fYnNzX3N0YXJ0AG1haW4AX19saWJjX3N0YXJ0X21h
aW5AQEdMSUJDXzIuMABfX2luaXRfYXJyYXlfZW5kAGRhdGFfc3RhcnQAX2ZpbmkAZXhpdEBA
R0xJQkNfMi4wAGNhbGxvY0BAR0xJQkNfMi4wAF9lZGF0YQBfR0xPQkFMX09GRlNFVF9UQUJM
RV8AZnJlZUBAR0xJQkNfMi4wAF9lbmQAc3RkaW5AQEdMSUJDXzIuMABfX2luaXRfYXJyYXlf
c3RhcnQAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AF9Kdl9SZWdpc3RlckNsYXNzZXMA
X19nbW9uX3N0YXJ0X18A
--------------020003030105060108060207
Content-Type: text/plain;
 name="rmfromln_v3.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="rmfromln_v3.c"


/*  NEW plan:
			1) create a temp io-stream with tempfile()
			2) read in from stdin and out to temp until EOL (or EOF)
			3) dynamically create a string of the appropriate length 
				 (i.e. the number of characters written to temp-stream)
			4) copy temp-stream to the new string
			5) search the string for "From"
			6) if found, copy the string to stdout
			7) copy the remaining stdin to stdout until EOF reached.  
			*/

#include "stdio.h"
#include "string.h"
#include "stddef.h"
#include "stdlib.h"


// ###############################################

#define EOL '\n'

// ###############################################

main () {

char 		c;
int			length;
int			j;
FILE		*tempstream;
char		*tempstring;


// Create the temp-stream
tempstream = tmpfile();

// Read from stdin into tempstream until EOF or EOL is encountered. 
length = 0;
rewind(tempstream);
while ((c=fgetc(stdin)) && (c != EOL)) {
	fputc(c,tempstream);
	length++;
	}

// if no input, then just exit and do nothing.
if (length == 0)
	exit(0);
	
// the above code did not put the EOL in the temp-stream, so add it.
fputc(EOL,tempstream);
length++;

// create the tempSTRING and copy the tempstream into it.
// tempstring = new string[length];
tempstring = (char *) calloc(length,sizeof(char));
rewind(tempstream);
for(j=0;j<length;j++)
	tempstring[j] = fgetc(tempstream);

/* If we are at EOF, then there was no EOL, and thus no search for "From" is indicated;
 	 so simply write the temp-string to stdout and exit.  */
if (feof(stdin)) {
	for (j=0;j<length;j++)
			fputc(tempstring[j],stdout);
	exit(0);
	}
	
// If we got to here, we need to search temp-string for "From".
if (strstr(tempstring,"From") == NULL) {
		/* i.e. "From" was NOT in the 1st line, so this line needs to 
			 be output before the remaining stdin is transferred to stdout  */
	  for (j=0;j<length;j++)                                                      
				fputc(tempstring[j],stdout);
		}
// dynamically allocated string is done, so free up the memory.
free (tempstring);
		
// now just transfer the remaining stdin to stdout.
 c = getchar();
 while (c != EOF) {
 	  fputc(c,stdout);
 	  c = getchar();
    }


}  /* End of Main */

--------------020003030105060108060207--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4499920D.8060802>