35 printf(
"usage: %s [flags] CONNINFO\n\n", argv[0]);
37 printf(
"recognized flags:\n");
38 printf(
" -h, --help show this message\n");
39 printf(
" --expected-scope SCOPE fail if received scopes do not match SCOPE\n");
40 printf(
" --expected-uri URI fail if received configuration link does not match URI\n");
41 printf(
" --misbehave=MODE have the hook fail required postconditions\n"
42 " (MODEs: no-hook, fail-async, no-token, no-socket)\n");
43 printf(
" --no-hook don't install OAuth hooks\n");
44 printf(
" --hang-forever don't ever return a token (combine with connect_timeout)\n");
45 printf(
" --token TOKEN use the provided TOKEN value\n");
46 printf(
" --stress-async busy-loop on PQconnectPoll rather than polling\n");
59main(
int argc,
char *argv[])
61 static const struct option long_options[] = {
78 while ((
c =
getopt_long(argc, argv,
"h", long_options, NULL)) != -1)
157 fprintf(stderr,
"connection to database failed: %s\n",
163 printf(
"connection succeeded\n");
246 err = WSAStartup(MAKEWORD(2, 2), &wsaData);
249 perror(
"WSAStartup failed");
253 sock =
socket(AF_INET, SOCK_DGRAM, 0);
256 perror(
"failed to create datagram socket");
#define fprintf(file, fmt, msg)
void err(int eval, const char *fmt,...)
void PQsetAuthDataHook(PQauthDataHook_type hook)
PGconn * PQconnectdb(const char *conninfo)
PostgresPollingStatusType PQconnectPoll(PGconn *conn)
ConnStatusType PQstatus(const PGconn *conn)
PGconn * PQconnectStart(const char *conninfo)
void PQfinish(PGconn *conn)
char * PQerrorMessage(const PGconn *conn)
int getopt_long(int argc, char *const argv[], const char *optstring, const struct option *longopts, int *longindex)
#define required_argument
PostgresPollingStatusType
@ PQAUTHDATA_OAUTH_BEARER_TOKEN
int main(int argc, char *argv[])
static PostgresPollingStatusType misbehave_cb(PGconn *conn, PGoauthBearerRequest *req, pgsocket *altsock)
static const char * expected_scope
static const char * expected_uri
static const char * misbehave_mode
static PostgresPollingStatusType async_cb(PGconn *conn, PGoauthBearerRequest *req, pgsocket *altsock)
static int handle_auth_data(PGauthData type, PGconn *conn, void *data)
static void usage(char *argv[])
PGDLLIMPORT char * optarg
const char * openid_configuration
PostgresPollingStatusType(* async)(PGconn *conn, struct PGoauthBearerRequest *request, SOCKTYPE *altsock)
#define socket(af, type, protocol)