diff options
Diffstat (limited to 'auth.txr')
-rw-r--r-- | auth.txr | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -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) |