r10155: 11 Nov 2004 Kevin Rosenberg <kevin@rosenberg.net>
[clsql.git] / db-postgresql-socket / postgresql-socket-api.lisp
index 936f6dbb3dd0696e9970acf7b8ea8f9abd3d93e7..7ad32362f2c86da708aebc53d6a83de6100c6939 100644 (file)
      (:float4 700)
      (:float8 701)))
 
-(defmethod clsql-base-sys:database-type-library-loaded ((database-type
+(defmethod clsql-sys:database-type-library-loaded ((database-type
                                          (eql :postgresql-socket)))
   "T if foreign library was able to be loaded successfully. Always true for
 socket interface"
   t)
 
-(defmethod clsql-base-sys:database-type-load-foreign ((database-type (eql :postgresql-socket)))
+(defmethod clsql-sys:database-type-load-foreign ((database-type (eql :postgresql-socket)))
   t)
 
 
@@ -214,19 +214,20 @@ socket interface"
 ;;; Support for encrypted password transmission
 
 #-scl
-(eval-when (compile eval load)
+(eval-when (:compile-toplevel :load-toplevel :execute)
   (defvar *crypt-library-loaded* nil)
 
   (unless *crypt-library-loaded*
     (uffi:load-foreign-library 
      (uffi:find-foreign-library "libcrypt"
-                          '("/usr/lib/" "/usr/local/lib/" "/lib/"))
+                          '(#+64bit "/usr/lib64/"
+                            "/usr/lib/" "/usr/local/lib/" "/lib/"))
      :supporting-libraries '("c"))
     (setq *crypt-library-loaded* t)))
 
 (in-package :postgresql-socket)
 
-(uffi:def-function "crypt" 
+(uffi:def-function ("crypt" crypt)
     ((key :cstring)
      (salt :cstring))
   :returning :cstring)
@@ -425,7 +426,7 @@ troubles."
 (defun encrypt-md5 (plaintext salt)
   (string-downcase
    (format nil "~{~2,'0X~}"
-          (coerce (md5:md5sum-sequence (concatenate 'string plaintext salt)) 'list))))
+          (coerce (md5sum-sequence (concatenate 'string plaintext salt)) 'list))))
 
 (defun reopen-postgresql-connection (connection)
   "Reopen the given PostgreSQL connection.  Closes any existing
@@ -457,14 +458,16 @@ connection, if it is still open."
                    (3
                     (send-unencrypted-password-message
                      socket
-                     (postgresql-connection-password connection)))
+                     (postgresql-connection-password connection))
+                      (force-output socket))
                    (4
                     (let ((salt (make-string 2)))
                       (read-socket-sequence salt socket)
                       (send-encrypted-password-message
                        socket
                        (crypt-password
-                        (postgresql-connection-password connection) salt))))
+                        (postgresql-connection-password connection) salt)))
+                     (force-output socket))
                    (5
                     (let ((salt (make-string 4)))
                       (read-socket-sequence salt socket)
@@ -473,7 +476,8 @@ connection, if it is still open."
                              (pwd (encrypt-md5 pwd2 salt)))
                         (send-encrypted-password-message
                          socket
-                         (concatenate 'string "md5" pwd)))))
+                         (concatenate 'string "md5" pwd))))
+                     (force-output socket))
                    (t
                     (error 'postgresql-login-error
                            :connection connection
@@ -600,8 +604,9 @@ connection, if it is still open."
                                   :connection connection :message message))))
          (#.+notice-response-message+
           (let ((message (read-socket-value-string socket)))
-            (warn 'postgresql-warning
-                  :connection connection :message message)))
+            (unless (eq :ignore clsql-sys:*backend-warning-behavior*)
+              (warn 'postgresql-warning
+                    :connection connection :message message))))
          (#.+notification-response-message+
           (let ((pid (read-socket-value-int32 socket))
                 (message (read-socket-value-string socket)))