PostgreSQL Source Code  git master
libpq.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * libpq.h
4  * POSTGRES LIBPQ buffer structure definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/libpq/libpq.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef LIBPQ_H
15 #define LIBPQ_H
16 
17 #include <netinet/in.h>
18 
19 #include "lib/stringinfo.h"
20 #include "libpq/libpq-be.h"
21 #include "storage/latch.h"
22 
23 
24 typedef struct
25 {
26  void (*comm_reset) (void);
27  int (*flush) (void);
28  int (*flush_if_writable) (void);
29  bool (*is_send_pending) (void);
30  int (*putmessage) (char msgtype, const char *s, size_t len);
31  void (*putmessage_noblock) (char msgtype, const char *s, size_t len);
32  void (*startcopyout) (void);
33  void (*endcopyout) (bool errorAbort);
35 
37 
38 #define pq_comm_reset() (PqCommMethods->comm_reset())
39 #define pq_flush() (PqCommMethods->flush())
40 #define pq_flush_if_writable() (PqCommMethods->flush_if_writable())
41 #define pq_is_send_pending() (PqCommMethods->is_send_pending())
42 #define pq_putmessage(msgtype, s, len) \
43  (PqCommMethods->putmessage(msgtype, s, len))
44 #define pq_putmessage_noblock(msgtype, s, len) \
45  (PqCommMethods->putmessage_noblock(msgtype, s, len))
46 #define pq_startcopyout() (PqCommMethods->startcopyout())
47 #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort))
48 
49 /*
50  * External functions.
51  */
52 
53 /*
54  * prototypes for functions in pqcomm.c
55  */
57 
58 extern int StreamServerPort(int family, char *hostName,
59  unsigned short portNumber, char *unixSocketDir,
60  pgsocket ListenSocket[], int MaxListen);
61 extern int StreamConnection(pgsocket server_fd, Port *port);
62 extern void StreamClose(pgsocket sock);
63 extern void TouchSocketFiles(void);
64 extern void RemoveSocketFiles(void);
65 extern void pq_init(void);
66 extern int pq_getbytes(char *s, size_t len);
67 extern int pq_getstring(StringInfo s);
68 extern void pq_startmsgread(void);
69 extern void pq_endmsgread(void);
70 extern bool pq_is_reading_msg(void);
71 extern int pq_getmessage(StringInfo s, int maxlen);
72 extern int pq_getbyte(void);
73 extern int pq_peekbyte(void);
74 extern int pq_getbyte_if_available(unsigned char *c);
75 extern int pq_putbytes(const char *s, size_t len);
76 
77 /*
78  * prototypes for functions in be-secure.c
79  */
80 extern char *ssl_library;
81 extern char *ssl_cert_file;
82 extern char *ssl_key_file;
83 extern char *ssl_ca_file;
84 extern char *ssl_crl_file;
85 extern char *ssl_dh_params_file;
86 extern char *ssl_passphrase_command;
88 #ifdef USE_SSL
89 extern bool ssl_loaded_verify_locations;
90 #endif
91 
92 extern int secure_initialize(bool isServerStart);
93 extern bool secure_loaded_verify_locations(void);
94 extern void secure_destroy(void);
95 extern int secure_open_server(Port *port);
96 extern void secure_close(Port *port);
97 extern ssize_t secure_read(Port *port, void *ptr, size_t len);
98 extern ssize_t secure_write(Port *port, void *ptr, size_t len);
99 extern ssize_t secure_raw_read(Port *port, void *ptr, size_t len);
100 extern ssize_t secure_raw_write(Port *port, const void *ptr, size_t len);
101 
102 /*
103  * prototypes for functions in be-secure-gssapi.c
104  */
105 #ifdef ENABLE_GSS
106 extern ssize_t secure_open_gssapi(Port *port);
107 #endif
108 
109 /* GUCs */
110 extern char *SSLCipherSuites;
111 extern char *SSLECDHCurve;
112 extern bool SSLPreferServerCiphers;
113 extern int ssl_min_protocol_version;
114 extern int ssl_max_protocol_version;
115 
117 {
123 };
124 
125 /*
126  * prototypes for functions in be-secure-common.c
127  */
128 extern int run_ssl_passphrase_command(const char *prompt, bool is_server_start,
129  char *buf, int size);
130 extern bool check_ssl_key_file_permissions(const char *ssl_key_file,
131  bool isServerStart);
132 
133 #endif /* LIBPQ_H */
char * SSLCipherSuites
Definition: be-secure.c:54
ssl_protocol_versions
Definition: libpq.h:116
char * ssl_passphrase_command
Definition: be-secure.c:46
void StreamClose(pgsocket sock)
Definition: pqcomm.c:845
ssize_t secure_raw_write(Port *port, const void *ptr, size_t len)
Definition: be-secure.c:330
char * ssl_ca_file
Definition: be-secure.c:43
WaitEventSet * FeBeWaitSet
Definition: pqcomm.c:186
char * ssl_library
Definition: be-secure.c:40
bool pq_is_reading_msg(void)
Definition: pqcomm.c:1251
Definition: libpq-be.h:120
void pq_endmsgread(void)
Definition: pqcomm.c:1235
int secure_initialize(bool isServerStart)
Definition: be-secure.c:77
char * ssl_cert_file
Definition: be-secure.c:41
ssize_t secure_read(Port *port, void *ptr, size_t len)
Definition: be-secure.c:145
void pq_startmsgread(void)
Definition: pqcomm.c:1211
#define PGDLLIMPORT
Definition: c.h:1272
int pq_putbytes(const char *s, size_t len)
Definition: pqcomm.c:1354
bool SSLPreferServerCiphers
Definition: be-secure.c:60
char * c
static char * buf
Definition: pg_test_fsync.c:67
bool secure_loaded_verify_locations(void)
Definition: be-secure.c:101
int pgsocket
Definition: port.h:31
int StreamConnection(pgsocket server_fd, Port *port)
Definition: pqcomm.c:716
static int port
Definition: pg_regress.c:91
int pq_getbyte_if_available(unsigned char *c)
Definition: pqcomm.c:1041
bool ssl_passphrase_command_supports_reload
Definition: be-secure.c:47
int run_ssl_passphrase_command(const char *prompt, bool is_server_start, char *buf, int size)
static pgsocket ListenSocket[MAXLISTEN]
Definition: postmaster.c:218
int pq_peekbyte(void)
Definition: pqcomm.c:1020
ssize_t secure_open_gssapi(Port *port)
void secure_close(Port *port)
Definition: be-secure.c:133
char * ssl_dh_params_file
Definition: be-secure.c:45
char * ssl_key_file
Definition: be-secure.c:42
void RemoveSocketFiles(void)
Definition: pqcomm.c:890
const PGDLLIMPORT PQcommMethods * PqCommMethods
Definition: pqcomm.c:184
bool check_ssl_key_file_permissions(const char *ssl_key_file, bool isServerStart)
ssize_t secure_write(Port *port, void *ptr, size_t len)
Definition: be-secure.c:258
void TouchSocketFiles(void)
Definition: pqcomm.c:860
int ssl_min_protocol_version
Definition: be-secure.c:62
void pq_init(void)
Definition: pqcomm.c:194
void secure_destroy(void)
Definition: be-secure.c:90
ssize_t secure_raw_read(Port *port, void *ptr, size_t len)
Definition: be-secure.c:234
int ssl_max_protocol_version
Definition: be-secure.c:63
int pq_getbyte(void)
Definition: pqcomm.c:1001
int pq_getbytes(char *s, size_t len)
Definition: pqcomm.c:1095
int pq_getstring(StringInfo s)
Definition: pqcomm.c:1167
char * ssl_crl_file
Definition: be-secure.c:44
int pq_getmessage(StringInfo s, int maxlen)
Definition: pqcomm.c:1273
int StreamServerPort(int family, char *hostName, unsigned short portNumber, char *unixSocketDir, pgsocket ListenSocket[], int MaxListen)
Definition: pqcomm.c:330
char * SSLECDHCurve
Definition: be-secure.c:57
unsigned char bool
Definition: c.h:309
int secure_open_server(Port *port)
Definition: be-secure.c:114