]> granicus.if.org Git - pgbouncer/commitdiff
Move OS compat functions to src/system.c to keep the ifdef mess separately.
authorMarko Kreen <markokr@gmail.com>
Wed, 18 Apr 2007 08:42:31 +0000 (08:42 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 18 Apr 2007 08:42:31 +0000 (08:42 +0000)
Also remove crypt() wrapper, pointless.

Makefile
src/client.c
src/proto.c
src/system.c [new file with mode: 0644]
src/system.h
src/util.c
src/util.h

index 7a1481a27aca7a2b7d6033d649dc5944611284d2..93b35fd9d34a946436606fbee4b99c7fe147cdde 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,10 @@
 
 # sources
 SRCS = client.c loader.c objects.c pooler.c proto.c sbuf.c server.c util.c \
-       admin.c stats.c takeover.c md5.c janitor.c pktbuf.c main.c
+       admin.c stats.c takeover.c md5.c janitor.c pktbuf.c system.c main.c
 HDRS = client.h loader.h objects.h pooler.h proto.h sbuf.h server.h util.h \
-       admin.h stats.h takeover.h md5.h janitor.h pktbuf.h bouncer.h \
-       list.h mbuf.h system.h
+       admin.h stats.h takeover.h md5.h janitor.h pktbuf.h system.h bouncer.h \
+       list.h mbuf.h
 
 # data & dirs to include in tgz
 DATA = README NEWS etc/pgbouncer.ini Makefile config.mak.in config.h.in \
index 206052b7017c40f094c38c508274a9bc6917c8f8..3e72d1b2b645b77edefbc0a08c6d7dd60bca9776 100644 (file)
@@ -36,7 +36,7 @@ static bool check_client_passwd(PgSocket *client, const char *passwd)
        case AUTH_PLAIN:
                return strcmp(user->passwd, passwd) == 0;
        case AUTH_CRYPT:
-               correct = pg_crypt(user->passwd, (char *)client->salt);
+               correct = crypt(user->passwd, (char *)client->salt);
                return strcmp(correct, passwd) == 0;
        case AUTH_MD5:
                if (strlen(passwd) != MD5_PASSWD_LEN)
index fd5eef7bff0fcb1aa7022088f7cd1a8c7263475d..7f502479082267032e8f35a648dd0d32b86284f3 100644 (file)
@@ -215,7 +215,7 @@ static bool login_crypt_psw(PgSocket *server, const uint8 *salt)
 
        log_debug("P: send crypt password");
        strncpy(saltbuf, (char *)salt, 2);
-       enc = pg_crypt(user->passwd, saltbuf);
+       enc = crypt(user->passwd, saltbuf);
        return send_password(server, enc);
 }
 
diff --git a/src/system.c b/src/system.c
new file mode 100644 (file)
index 0000000..4dc1868
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * PgBouncer - Lightweight connection pooler for PostgreSQL.
+ * 
+ * Copyright (c) 2007 Marko Kreen, Skype Technologies OÜ
+ * 
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * Compat functions for OSes where libc does not provide them.
+ */
+
+#include "bouncer.h"
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_UCRED_H
+#include <sys/ucred.h>
+#endif
+
+/*
+ * Minimal spec-conforming implementations of strlcpy(), strlcat().
+ */
+
+#ifndef HAVE_STRLCPY
+size_t strlcpy(char *dst, const char *src, size_t n)
+{
+       size_t len = strlen(src);
+       if (len < n) {
+               memcpy(dst, src, len + 1);
+       } else if (n > 0) {
+               memcpy(dst, src, n - 1);
+               dst[n - 1] = 0;
+       }
+       return len;
+}
+#endif
+
+#ifndef HAVE_STRLCAT
+size_t strlcat(char *dst, const char *src, size_t n)
+{
+       size_t pos = 0;
+       while (pos < n && dst[pos])
+               pos++;
+       return pos + strlcpy(dst + pos, src, n - pos);
+}
+#endif
+
+/*
+ * Get other side's uid for UNIX socket.
+ *
+ * Standardise on getpeereid() from BSDs.
+ */
+#ifndef HAVE_GETPEEREID
+int getpeereid(int fd, uid_t *uid_p, gid_t *gid_p)
+{
+#ifdef SO_PEERCRED
+       struct ucred cred;
+       socklen_t len = sizeof(cred);
+       if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) >= 0) {
+               *uid_p = cred.uid;
+               *gid_p = cred.gid;
+               return 0;
+       }
+#else /* !SO_PEERCRED */
+#ifdef HAVE_GETPEERUCRED
+       ucred_t *cred = NULL;
+       if (getpeerucred(fd, &cred) >= 0) {
+               *uid_p = ucred_geteuid(cred);
+               *gid_p = ucred_getegid(cred);
+               ucred_free(cred);
+               if (*uid_p >= 0 && *gid_p >= 0)
+                       return 0;
+       }
+#endif /* HAVE_GETPEERUCRED */
+#endif /* !SO_PEERCRED */
+       return -1;
+}
+#endif /* !HAVE_GETPEEREID */
+
index 35123d192e9e3e918df0d644aa999b79beced890..7edb8624d1ccef3106078c44352c4b9773c48830 100644 (file)
 /* how many microseconds in a second */
 #define USEC (1000000LL)
 
+
+/*
+ * PostgreSQL types.
+ */
+
 typedef enum { false=0, true=1 } bool;
 
 typedef uint8_t uint8;
@@ -77,8 +82,25 @@ typedef uint16_t uint16;
 typedef uint32_t uint32;
 typedef uint64_t uint64;
 
+/*
+ * PostgreSQL type OIDs for resultsets.
+ */
 
 #define INT8OID 20
 #define INT4OID 23
 #define TEXTOID 25
 
+/*
+ * libc compat functions.
+ */
+
+#ifndef HAVE_STRLCPY
+size_t strlcpy(char *dst, const char *src, size_t n);
+#endif
+#ifndef HAVE_STRLCAT
+size_t strlcat(char *dst, const char *src, size_t n);
+#endif
+#ifndef HAVE_GETPEEREID
+int getpeereid(int fd, uid_t *uid_p, gid_t *gid_p);
+#endif
+
index 04116dacddf8c2b601d827a13c7595884d6bfaa3..67de7ed4952126abf3041c9ccdaf1c41f228e366 100644 (file)
 
 #include "md5.h"
 
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#ifdef HAVE_SYS_UCRED_H
-#include <sys/ucred.h>
-#endif
-
 void *zmalloc(size_t len)
 {
        void *p = malloc(len);
@@ -39,32 +32,6 @@ void *zmalloc(size_t len)
        return p;
 }
 
-/*
- * Minimal spec-conforming implementations of strlcpy(), strlcat().
- */
-#ifndef HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t n)
-{
-       size_t len = strlen(src);
-       if (len < n) {
-               memcpy(dst, src, len + 1);
-       } else if (n > 0) {
-               memcpy(dst, src, n - 1);
-               dst[n - 1] = 0;
-       }
-       return len;
-}
-#endif
-#ifndef HAVE_STRLCAT
-size_t strlcat(char *dst, const char *src, size_t n)
-{
-       size_t pos = 0;
-       while (pos < n && dst[pos])
-               pos++;
-       return pos + strlcpy(dst + pos, src, n - pos);
-}
-#endif
-
 /*
  * Generic logging
  */
@@ -359,12 +326,6 @@ bool pg_md5_encrypt(const char *part1,
        return true;
 }
 
-/* wrapper for usable crypt() */
-const char *pg_crypt(const char *passwd, const char *salt)
-{
-       return crypt(passwd, salt);
-}
-
 /* wrapped for getting random bytes */
 bool get_random_bytes(uint8 *dest, int len)
 {
@@ -402,38 +363,6 @@ void reset_time_cache(void)
        time_cache = 0;
 }
 
-/*
- * Get other side's uid for UNIX socket.
- *
- * Standardise on getpeereid() from BSDs.
- */
-#ifndef HAVE_GETPEEREID
-int getpeereid(int fd, uid_t *uid_p, gid_t *gid_p)
-{
-#ifdef SO_PEERCRED
-       struct ucred cred;
-       socklen_t len = sizeof(cred);
-       if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) >= 0) {
-               *uid_p = cred.uid;
-               *gid_p = cred.gid;
-               return 0;
-       }
-#else /* !SO_PEERCRED */
-#ifdef HAVE_GETPEERUCRED
-       ucred_t *cred = NULL;
-       if (getpeerucred(fd, &cred) >= 0) {
-               *uid_p = ucred_geteuid(cred);
-               *gid_p = ucred_getegid(cred);
-               ucred_free(cred);
-               if (*uid_p >= 0 && *gid_p >= 0)
-                       return 0;
-       }
-#endif /* HAVE_GETPEERUCRED */
-#endif /* !SO_PEERCRED */
-       return -1;
-}
-#endif /* !HAVE_GETPEEREID */
-
 void socket_set_nonblocking(int fd, int val)
 {
        int flags, res;
index dbefcf33da8be7380c9e0aa195e9accd8b6ef028..0333b317781a8431b5f61a9a472298728e0884fe 100644 (file)
@@ -89,26 +89,8 @@ int safe_sendmsg(int fd, const struct msghdr *msg, int flags);
 #define isMD5(passwd) (memcmp(passwd, "md5", 3) == 0 \
                && strlen(passwd) == MD5_PASSWD_LEN)
 bool pg_md5_encrypt(const char *part1, const char *part2, size_t p2len, char *dest);
-const char *pg_crypt(const char *passwd, const char *salt);
 bool get_random_bytes(uint8 *dest, int len);
 
-/*
- * safe string copy
- */
-#ifndef HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t n);
-#endif
-#ifndef HAVE_STRLCAT
-size_t strlcat(char *dst, const char *src, size_t n);
-#endif
-
-/*
- * socket option handling
- */
-#ifndef HAVE_GETPEEREID
-int getpeereid(int fd, uid_t *uid_p, gid_t *gid_p);
-#endif
-
 void socket_set_nonblocking(int fd, int val);
 void tune_socket(int sock, bool is_unix);