|
Hi all,
On my webserver, I have saslauthd running. It has a Unix domain socket under the path name /var/run/saslauthd/mux.
Here is a quick and dirty password authentication using Unix domain sockets. This requires the new TXR 134, of course.
Firstly, why would you want to do this? It lets you validate a password without having special privileges. Passwords hashes are in a shadow file that you can't read if you aren't root. But you can ask the SASL daemon to check a password even if you aren't root.
(defun put-binary-str (str stream)
(let ((len (length str)))
(put-byte (trunc len 256) stream)
(put-byte (mod len 256) stream)
(put-string str stream)))
(defun sasl-auth (user pass)
(let ((sock (open-socket af-unix sock-stream)))
(sock-connect sock (new sockaddr-un path "/var/run/saslauthd/mux"))
(put-binary-str user sock)
(put-binary-str pass sock)
(put-binary-str "" sock)
(put-binary-str "" sock)
(let ((response (get-string sock)))
(equal [response 2..4] "OK"))))
The sasl-auth function returns t or nil based on whether the authentication was successful.
The protocol consists of strings, which are encoded as a 16 bit length (big endian a.k.a. "network byte order") followed by the data. Obviously, the above code is broken for non-ASCII characters, since (length str) doesn't give us the UTF-8 encoded length.
This message was posted to the following mailing lists: | ||||
---|---|---|---|---|
TXR Users Mailing list info | Nearby messages |
Kaz'z Mailing List Archives adminstered by Kaz | Lurker (version 2.3, substantialy hacked by Kaz). Icon artwork from VisualPharm. |