1 /*
2  * PgBouncer - Lightweight connection pooler for PostgreSQL.
3  *
4  * Copyright (c) 2007-2009  Marko Kreen, Skype Technologies OÜ
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  * logging about specific socket
21  */
22 int log_socket_prefix(enum LogLevel lev, void *ctx, char *dst, unsigned int dstlen);
23 
24 #define slog_error(sk, args...) log_generic(LG_ERROR, sk, ## args)
25 #define slog_warning(sk, args...) log_generic(LG_WARNING, sk, ## args)
26 #define slog_info(sk, args...) log_generic(LG_INFO, sk, ## args)
27 #define slog_debug(sk, args...) do { \
28 		if (unlikely(cf_verbose > 0)) \
29 			log_generic(LG_DEBUG, sk, ## args); \
30 	} while (0)
31 #define slog_noise(sk, args...) do { \
32 		if (unlikely(cf_verbose > 1)) \
33 			log_generic(LG_NOISE, sk, ## args); \
34 	} while (0)
35 
36 /*
37  * password tools
38  */
39 #define MD5_PASSWD_LEN  35
40 void pg_md5_encrypt(const char *part1, const char *part2, size_t p2len, char *dest);
41 void get_random_bytes(uint8_t *dest, int len);
42 
43 const char *bin2hex(const uint8_t *src, unsigned srclen, char *dst, unsigned dstlen);
44 
45 bool tune_socket(int sock, bool is_unix) _MUSTCHECK;
46 
47 bool strlist_contains(const char *liststr, const char *str);
48 
49 void fill_remote_addr(PgSocket *sk, int fd, bool is_unix);
50 void fill_local_addr(PgSocket *sk, int fd, bool is_unix);
51 
52 
53 void rescue_timers(void);
54 void safe_evtimer_add(struct event *ev, struct timeval *tv);
55 
56 /* log truncated strings */
57 #define safe_strcpy(dst, src, dstlen) do { \
58 	size_t needed = strlcpy(dst, src, dstlen); \
59 	if (unlikely(needed >= (dstlen))) \
60 		log_warning("bug in %s:%d - string truncated", __FILE__, __LINE__); \
61 } while (0)
62