From owner-freebsd-questions@FreeBSD.ORG Wed Jun 21 18:38:17 2006 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0254B16A479 for ; Wed, 21 Jun 2006 18:38:17 +0000 (UTC) (envelope-from awswartz@acsalaska.net) Received: from mercury.acsalaska.net (mercury.acsalaska.net [209.112.173.226]) by mx1.FreeBSD.org (Postfix) with ESMTP id 51D8943D49 for ; Wed, 21 Jun 2006 18:38:16 +0000 (GMT) (envelope-from awswartz@acsalaska.net) Received: from [127.0.0.1] (209-193-10-105-cdsl-rb1.nwc.acsalaska.net [209.193.10.105]) by mercury.acsalaska.net (8.13.6/8.13.6) with ESMTP id k5LIc71V066123 for ; Wed, 21 Jun 2006 10:38:14 -0800 (AKDT) (envelope-from awswartz@acsalaska.net) Message-ID: <4499920D.8060802@acsalaska.net> Date: Wed, 21 Jun 2006 10:38:05 -0800 From: Andrew Swartz User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: freebsd-questions@freebsd.org Content-Type: multipart/mixed; boundary="------------020003030105060108060207" X-ACS-Spam-Status: no X-ACS-Spam-Score: 2 (xx) X-ACS-Spam-Tests: ACS_BOGUS_LOCALHOST X-ACS-Scanned-By: MD 2.56; SA 3.1.3; spamdefang 1.117 Subject: Sendmail + Cyrus + Procmail(?) + SpamAssassin X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: awswartz@acsalaska.net List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Jun 2006 18:38:17 -0000 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 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 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