Also remove crypt() wrapper, pointless.
# 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 \
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)
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);
}
--- /dev/null
+/*
+ * 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 */
+
/* how many microseconds in a second */
#define USEC (1000000LL)
+
+/*
+ * PostgreSQL types.
+ */
+
typedef enum { false=0, true=1 } bool;
typedef uint8_t uint8;
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
+
#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);
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
*/
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)
{
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;
#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);