Karel Zakr's revised patch to fix psql prompt for local host connections.
This commit is contained in:
parent
73f5b0847b
commit
1d75298176
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.27 2000/03/01 21:09:56 petere Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.28 2000/03/11 13:56:23 petere Exp $
|
||||||
Postgres documentation
|
Postgres documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -1966,8 +1966,8 @@ testdb=> <userinput>\set content `sed -e "s/'/\\\\\\'/g" < my_file.txt`</userinp
|
|||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><literal>%M</literal></term>
|
<term><literal>%M</literal></term>
|
||||||
<listitem><para>The hostname of the database server (or <quote>.</quote>
|
<listitem><para>The full hostname (with domainname) of the database server (or
|
||||||
if Unix domain socket).</para></listitem>
|
<quote>localhost</quote> if hostname information is not available).</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2000 by PostgreSQL Global Development Group
|
* Copyright 2000 by PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.10 2000/03/08 01:38:59 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.11 2000/03/11 13:56:24 petere Exp $
|
||||||
*/
|
*/
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include "prompt.h"
|
#include "prompt.h"
|
||||||
@ -19,7 +19,10 @@
|
|||||||
#include <win32.h>
|
#include <win32.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/utsname.h>
|
#if !defined(WIN32) && !defined(__CYGWIN32__) && !defined(__QNX__)
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
* get_prompt
|
* get_prompt
|
||||||
@ -29,9 +32,10 @@
|
|||||||
* (might not be completely multibyte safe)
|
* (might not be completely multibyte safe)
|
||||||
*
|
*
|
||||||
* Defined interpolations are:
|
* Defined interpolations are:
|
||||||
* %M - database server hostname (or "." if not TCP/IP)
|
* %M - database server "hostname.domainname" (or "localhost" if this
|
||||||
* %m - like %M but hostname truncated after first dot
|
* information is not available)
|
||||||
* %> - database server port number (or "." if not TCP/IP)
|
* %m - like %M, but hostname only (before first dot)
|
||||||
|
* %> - database server port number
|
||||||
* %n - database user name
|
* %n - database user name
|
||||||
* %/ - current database
|
* %/ - current database
|
||||||
* %~ - like %/ but "~" when database name equals user name
|
* %~ - like %/ but "~" when database name equals user name
|
||||||
@ -56,6 +60,51 @@
|
|||||||
* will be empty (not NULL!).
|
* will be empty (not NULL!).
|
||||||
*--------------------------
|
*--------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need hostname information, only if connection is via UNIX socket
|
||||||
|
*/
|
||||||
|
#if !defined(WIN32) && !defined(__CYGWIN32__) && !defined(__QNX__)
|
||||||
|
|
||||||
|
#define DOMAINNAME 1
|
||||||
|
#define HOSTNAME 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return full hostname for localhost.
|
||||||
|
* - informations are init only in firts time - not queries DNS or NIS
|
||||||
|
* for every localhost() call
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
localhost(int type, char *buf, int siz)
|
||||||
|
{
|
||||||
|
static struct hostent *hp = NULL;
|
||||||
|
static int err = 0;
|
||||||
|
|
||||||
|
if (hp==NULL && err==0)
|
||||||
|
{
|
||||||
|
char hname[256];
|
||||||
|
|
||||||
|
if (gethostname(hname, 256) == 0)
|
||||||
|
{
|
||||||
|
if (!(hp = gethostbyname(hname)))
|
||||||
|
err = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
err = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hp==NULL)
|
||||||
|
return strncpy(buf, "localhost", siz);
|
||||||
|
|
||||||
|
strncpy(buf, hp->h_name, siz); /* full aaa.bbb.ccc */
|
||||||
|
|
||||||
|
if (type==HOSTNAME)
|
||||||
|
buf[strcspn(buf, ".")] = '\0';
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char *
|
char *
|
||||||
get_prompt(promptStatus_t status)
|
get_prompt(promptStatus_t status)
|
||||||
{
|
{
|
||||||
@ -115,23 +164,22 @@ get_prompt(promptStatus_t status)
|
|||||||
case 'm':
|
case 'm':
|
||||||
if (pset.db)
|
if (pset.db)
|
||||||
{
|
{
|
||||||
|
/* INET socket */
|
||||||
if (PQhost(pset.db))
|
if (PQhost(pset.db))
|
||||||
{
|
{
|
||||||
strncpy(buf, PQhost(pset.db), MAX_PROMPT_SIZE);
|
strncpy(buf, PQhost(pset.db), MAX_PROMPT_SIZE);
|
||||||
if (*p == 'm')
|
if (*p == 'm')
|
||||||
buf[strcspn(buf, ".")] = '\0';
|
buf[strcspn(buf, ".")] = '\0';
|
||||||
}
|
}
|
||||||
else if (*p == 'M')
|
/* UNIX socket */
|
||||||
buf[0] = '.';
|
#if !defined(WIN32) && !defined(__CYGWIN32__) && !defined(__QNX__)
|
||||||
|
else {
|
||||||
|
if (*p == 'm')
|
||||||
|
localhost(HOSTNAME, buf, MAX_PROMPT_SIZE);
|
||||||
else
|
else
|
||||||
{
|
localhost(DOMAINNAME, buf, MAX_PROMPT_SIZE);
|
||||||
struct utsname ubuf;
|
|
||||||
|
|
||||||
if (uname(&ubuf) < 0)
|
|
||||||
buf[0] = '.';
|
|
||||||
else
|
|
||||||
strncpy(buf, ubuf.nodename, MAX_PROMPT_SIZE);
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* DB server port number */
|
/* DB server port number */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user