MsgType fe_getauthsvc(char *PQerrormsg) { if (pg_authsvc < 0 || pg_authsvc >= n_authsvcs) { fe_setauthsvc(DEFAULT_CLIENT_AUTHSVC, PQerrormsg); if (pg_authsvc < 0 || pg_authsvc >= n_authsvcs) { /* Can only get here if DEFAULT_CLIENT_AUTHSVC is misdefined */ return 0; } } return authsvcs[pg_authsvc].msgtype; }
void main(int argc, char **argv) { int c; int errflag = 0; char *progname; char *debug_file; char *dbname; char *command; int exit_status = 0; char errbuf[ERROR_MSG_LENGTH]; char *username, usernamebuf[NAMEDATALEN + 1]; char *pghost = NULL; char *pgtty = NULL; char *pgoptions = NULL; char *pgport = NULL; int pgtracep = 0; /* * Processing command line arguments. * * h : sets the hostname. * p : sets the coom. port * t : sets the tty. * o : sets the other options. (see doc/libpq) * d : enable debugging mode. * q : run in quiet mode * Q : run in VERY quiet mode (no output except on errors) * c : monitor will run one POSTQUEL command and exit * * s : step mode (pauses after each command) * S : don't use semi colon as \g * * T : terse mode - no formatting * N : no attribute names - only columns of data * (these two options are useful in conjunction with the "-c" option * in scripts.) */ progname = *argv; Debugging = false; Verbose = true; Silent = false; /* prepend PGOPTION, if any */ argsetup(&argc, &argv); while ((c = getopt(argc, argv, "a:h:f:p:t:d:qsSTNQc:")) != EOF) { switch (c) { case 'a': fe_setauthsvc(optarg, errbuf); break; case 'h' : pghost = optarg; break; case 'f' : RunOneFile = optarg; break; case 'p' : pgport = optarg; break; case 't' : pgtty = optarg; break; case 'T' : TerseOutput = true; break; case 'N' : PrintAttNames = false; break; case 'd' : /* * When debugging is turned on, the debugging messages * will be sent to the specified debug file, which * can be a tty .. */ Debugging = true; debug_file = optarg; debug_port = fopen(debug_file,"w+"); if (debug_port == NULL) { fprintf(stderr,"Unable to open debug file %s \n", debug_file); exit(1); } pgtracep = 1; break; case 'q' : Verbose = false; break; case 's' : SingleStepMode = true; SemicolonIsGo = true; break; case 'S' : SemicolonIsGo = false; break; case 'Q' : Verbose = false; Silent = true; break; case 'c' : Verbose = false; Silent = true; RunOneCommand = true; command = optarg; break; case '?' : default : errflag++; break; } } if (errflag ) { fprintf(stderr, "usage: %s [options...] [dbname]\n", progname); fprintf(stderr, "\t-a authsvc\tset authentication service\n"); fprintf(stderr, "\t-c command\t\texecute one command\n"); fprintf(stderr, "\t-d debugfile\t\tdebugging output file\n"); fprintf(stderr, "\t-h host\t\t\tserver host name\n"); fprintf(stderr, "\t-f file\t\t\trun query from file\n"); fprintf(stderr, "\t-p port\t\t\tserver port number\n"); fprintf(stderr, "\t-q\t\t\tquiet output\n"); fprintf(stderr, "\t-t logfile\t\terror-logging tty\n"); fprintf(stderr, "\t-N\t\t\toutput without attribute names\n"); fprintf(stderr, "\t-Q\t\t\tREALLY quiet output\n"); fprintf(stderr, "\t-T\t\t\tterse output\n"); exit(2); } /* Determine our username (according to the authentication system, if * there is one). */ if ((username = fe_getauthname(errbuf)) == (char *) NULL) { fprintf(stderr, "%s: could not find a valid user name\n", progname); exit(2); } memset(usernamebuf, 0, sizeof(usernamebuf)); (void) strncpy(usernamebuf, username, NAMEDATALEN); username = usernamebuf; /* find database */ if (!(dbname = argv[optind]) && !(dbname = getenv("DATABASE")) && !(dbname = username)) { fprintf(stderr, "%s: no database name specified\n", progname); exit (2); } conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbname); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr,"Connection to database '%s' failed.\n", dbname); fprintf(stderr,"%s",PQerrorMessage(conn)); exit(1); } if (pgtracep) PQtrace(conn,debug_port); /* print out welcome message and start up */ welcome(); init_tmon(); /* parse input */ if (RunOneCommand) { exit_status = handle_execution(command); } else if (RunOneFile) { bool oldVerbose; FILE *ifp; if ((ifp = fopen(RunOneFile, "r")) == NULL) { fprintf(stderr, "Cannot open %s\n", RunOneFile); } if (SingleStepMode) { oldVerbose = Verbose; Verbose = false; } do_input(ifp); fclose(ifp); if (SingleStepMode) Verbose = oldVerbose; } else { do_input(stdin); } handle_exit(exit_status); }