summaryrefslogtreecommitdiffstats
path: root/auth.txr
diff options
context:
space:
mode:
Diffstat (limited to 'auth.txr')
-rw-r--r--auth.txr31
1 files changed, 30 insertions, 1 deletions
diff --git a/auth.txr b/auth.txr
index bb8f4cf..e2b9c26 100644
--- a/auth.txr
+++ b/auth.txr
@@ -15,5 +15,34 @@
(let ((response (get-string sock)))
(equal [response 2..4] "OK")))))
@(define auth (userid password))
-@ (require (sasl-auth userid password))
+@ (if (eq auth :sasl))
+@ (require (sasl-auth userid password))
+@ (elif (eq auth :imap))
+@ (try)
+@ (bind s @(let ((sock (open-socket af-inet sock-stream "r+ib")))
+ (sock-connect sock (new sockaddr-in
+ addr inaddr-loopback
+ port 143))
+ (sock-recv-timeout sock (* 30 1000000))))
+@ (next s)
+* OK@(skip)
+@ (output s)
+A0001 LOGIN @userid @password@\r
+@ (end)
+@ (repeat :gap 0)
+* @(skip)
+@ (end)
+@ (cases)
+A0001 OK@(skip)
+@ (accept)
+@ (or)
+A0001 NO@(skip)
+@ (fail)
+@ (end)
+@ (catch timeout-error)
+@ (fail)
+@ (end)
+@ (else)
+@ (fail)
+@ (end)
@(end)