aboutsummaryrefslogtreecommitdiff
path: root/lmtp_server.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-02 15:06:15 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-02 15:06:15 +0800
commite93df9b5bc32df01eb90e32b7f0bb1001cf18c53 (patch)
tree05e04f190f16a00db0f955dd3044dceabe2f9892 /lmtp_server.go
parentDB: Grammar (diff)
downloadforge-e93df9b5bc32df01eb90e32b7f0bb1001cf18c53.tar.gz
forge-e93df9b5bc32df01eb90e32b7f0bb1001cf18c53.tar.zst
forge-e93df9b5bc32df01eb90e32b7f0bb1001cf18c53.zip
LMTP: Fix patch handling (\r\n, mbox format, double-Wait)v0.1.10
Diffstat (limited to 'lmtp_server.go')
-rw-r--r--lmtp_server.go19
1 files changed, 16 insertions, 3 deletions
diff --git a/lmtp_server.go b/lmtp_server.go
index 44dc8d4..cdfcffb 100644
--- a/lmtp_server.go
+++ b/lmtp_server.go
@@ -158,12 +158,24 @@ func (session *lmtpSession) Data(r io.Reader) error {
goto end
}
+ mbox := bytes.Buffer{}
+ if _, err = fmt.Fprint(&mbox, "From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001\r\n"); err != nil {
+ slog.Error("error handling patch... malloc???", "error", err)
+ goto end
+ }
+ data = bytes.ReplaceAll(data, []byte("\r\n"), []byte("\n"))
+ if _, err = mbox.Write(data); err != nil {
+ slog.Error("error handling patch... malloc???", "error", err)
+ goto end
+ }
+ // TODO: Is mbox's From escaping necessary here?
+
groupPath := segments[:sepIndex]
moduleType := segments[sepIndex+1]
moduleName := segments[sepIndex+2]
switch moduleType {
case "repos":
- err = lmtpHandlePatch(session, groupPath, moduleName, email)
+ err = lmtpHandlePatch(session, groupPath, moduleName, &mbox)
if err != nil {
slog.Error("error handling patch", "error", err)
goto end
@@ -182,8 +194,9 @@ end:
return nil
default:
return &smtp.SMTPError{
- Code: 550,
- Message: err.Error(),
+ Code: 550,
+ Message: "Permanent failure: " + err.Error(),
+ EnhancedCode: [3]int{5, 7, 1},
}
}
}