- (progn
- (setf (postgresql-connection-socket connection) socket)
- (send-startup-message socket
- (postgresql-connection-database connection)
- (postgresql-connection-user connection)
- (postgresql-connection-options connection)
- (postgresql-connection-tty connection))
- (force-output socket)
- (loop
- (case (read-socket-value 'int8 socket)
- (#.+authentication-message+
- (case (read-socket-value 'int32 socket)
- (0 (return))
- ((1 2)
- (error 'postgresql-login-error
- :connection connection
- :message
- "Postmaster expects unsupported Kerberos authentication."))
- (3
- (send-unencrypted-password-message
- socket
- (postgresql-connection-password connection)))
- (4
- (let ((salt (make-string 2)))
- (read-socket-sequence salt socket)
- (send-encrypted-password-message
- socket
- (crypt-password
- (postgresql-connection-password connection) salt))))
- (t
- (error 'postgresql-login-error
- :connection connection
- :message
- "Postmaster expects unknown authentication method."))))
- (#.+error-response-message+
- (let ((message (read-socket-value 'string socket)))
- (error 'postgresql-login-error
- :connection connection :message message)))
- (t
- (error 'postgresql-login-error
- :connection connection
- :message
- "Received garbled message from Postmaster"))))
- ;; Start backend communication
- (force-output socket)
- (loop
- (case (read-socket-value 'int8 socket)
- (#.+backend-key-message+
- (setf (postgresql-connection-pid connection)
- (read-socket-value 'int32 socket)
- (postgresql-connection-key connection)
- (read-socket-value 'int32 socket)))
- (#.+ready-for-query-message+
- (setq socket nil)
- (return connection))
- (#.+error-response-message+
- (let ((message (read-socket-value 'string socket)))
- (error 'postgresql-login-error
- :connection connection
- :message message)))
- (#.+notice-response-message+
- (let ((message (read-socket-value 'string socket)))
- (warn 'postgresql-warning :connection connection
- :message message)))
- (t
- (error 'postgresql-login-error
- :connection connection
- :message
- "Received garbled message from Postmaster")))))
+ (progn
+ (setf (postgresql-connection-socket connection) socket)
+ (send-startup-message socket
+ (postgresql-connection-database connection)
+ (postgresql-connection-user connection)
+ (postgresql-connection-options connection)
+ (postgresql-connection-tty connection))
+ (force-output socket)
+ (loop
+ (case (read-socket-value-int8 socket)
+ (#.+authentication-message+
+ (case (read-socket-value-int32 socket)
+ (0 (return))
+ ((1 2)
+ (error 'postgresql-login-error
+ :connection connection
+ :message
+ "Postmaster expects unsupported Kerberos authentication."))
+ (3
+ (send-unencrypted-password-message
+ socket
+ (postgresql-connection-password connection))
+ (force-output socket))
+ (4
+ (let ((salt (read-socket-sequence socket 2 nil)))
+ (send-encrypted-password-message
+ socket
+ (crypt-password
+ (postgresql-connection-password connection) salt)))
+ (force-output socket))
+ (5
+ (let ((salt (read-socket-sequence socket 4 nil)))
+ (let* ((pwd2 (encrypt-md5 (postgresql-connection-password connection)
+ (postgresql-connection-user connection)))
+ (pwd (encrypt-md5 pwd2 salt)))
+ (send-encrypted-password-message
+ socket
+ (concatenate 'string "md5" pwd))))
+ (force-output socket))
+ (t
+ (error 'postgresql-login-error
+ :connection connection
+ :message
+ "Postmaster expects unknown authentication method."))))
+ (#.+error-response-message+
+ (let ((message (read-socket-value-string socket)))
+ (error 'postgresql-login-error
+ :connection connection :message message)))
+ (t
+ (error 'postgresql-login-error
+ :connection connection
+ :message
+ "Received garbled message from Postmaster"))))
+ ;; Start backend communication
+ (force-output socket)
+ (loop
+ (case (read-socket-value-int8 socket)
+ (#.+backend-key-message+
+ (setf (postgresql-connection-pid connection)
+ (read-socket-value-int32 socket)
+ (postgresql-connection-key connection)
+ (read-socket-value-int32 socket)))
+ (#.+ready-for-query-message+
+ (setq socket nil)
+ (return connection))
+ (#.+error-response-message+
+ (let ((message (read-socket-value-string socket)))
+ (error 'postgresql-login-error
+ :connection connection
+ :message message)))
+ (#.+notice-response-message+
+ (let ((message (read-socket-value-string socket)))
+ (warn 'postgresql-warning :connection connection
+ :message message)))
+ (t
+ (error 'postgresql-login-error
+ :connection connection
+ :message
+ "Received garbled message from Postmaster")))))