pg_password utility. Cleanup for psql passwords. New datetime contrib stuff for new version. Fix for strutils needing config.h.
This commit is contained in:
parent
8d0e658d06
commit
f8fda03d12
69
README
69
README
|
@ -1,3 +1,72 @@
|
||||||
|
The pathces and a prototype tool to manipulate the ``flat password file
|
||||||
|
'' functionality of PostgreSQL6.1
|
||||||
|
1. File
|
||||||
|
Makefile
|
||||||
|
pg_passwd.c the source file of the tool.
|
||||||
|
2. How to specify pasword files and their format.
|
||||||
|
Specify the password file in the same style of Ident authentication in
|
||||||
|
$PGDATA/pg_hba.conf
|
||||||
|
host unv 133.65.96.250 255.255.255.255 password passwd
|
||||||
|
The above line allows access from 133.65.96.250 using the passwords listed
|
||||||
|
in $PGDATA/passwd.
|
||||||
|
The format of the password files follows those of /etc/passwd and
|
||||||
|
/etc/shadow: the first field is the user name, and the second field
|
||||||
|
is the encrypted password. The rest is completely ignored. Thus
|
||||||
|
the following three sample lines specify the same user and password pair:.
|
||||||
|
pg_guest:/nB7.w5Auq.BY:10031::::::
|
||||||
|
pg_guest:/nB7.w5Auq.BY:93001:930::/home/guest:/bin/tcsh
|
||||||
|
pg_guest:/nB7.w5Auq.BY:93001
|
||||||
|
Note that the original src/backend/libpq/password.c has a bug, which
|
||||||
|
disallows the first and the second format. If you want to use these
|
||||||
|
formats, please make sure you've applied the patch accompanied with
|
||||||
|
this tool.
|
||||||
|
3. Usage of pg_passwd
|
||||||
|
Supply the password file to the pg_passwd command. In the case described
|
||||||
|
above, after ``cd'ing to $PGDATA, the following command execution specify
|
||||||
|
the new password for pg_guest:
|
||||||
|
% pg_passwd passwd
|
||||||
|
Username: pg_guest
|
||||||
|
Password:
|
||||||
|
Re-enter password:
|
||||||
|
where the Password: and Re-enter password: prompts require the same
|
||||||
|
password input which are not displayed on the terminal.
|
||||||
|
The original password file is renamed to ``passwd.bk''.
|
||||||
|
4. How to specify pasasword authentication
|
||||||
|
You can use the password authentication fro psq, perl, or pg{tcl,tk}sh.
|
||||||
|
4.1 psql
|
||||||
|
Use the -u option. Note that the original distribution includes a bug.
|
||||||
|
Please make sure you've applied the patch distributed with this tool.
|
||||||
|
The following lines show the sample usage of the option:
|
||||||
|
% psql -h hyalos -u unv
|
||||||
|
Username: pg_guest
|
||||||
|
Password:
|
||||||
|
Welcome to the POSTGRESQL interactive sql monitor:
|
||||||
|
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
|
||||||
|
type \? for help on slash commands
|
||||||
|
type \q to quit
|
||||||
|
type \g or terminate with semicolon to execute query
|
||||||
|
You are currently connected to the database: unv
|
||||||
|
unv=>
|
||||||
|
4.2 perl5
|
||||||
|
Use the new style of the Pg.pm like this
|
||||||
|
$conn = Pg::connectdb("host=hyalos authtype=password dbname=unv
|
||||||
|
user=pg_guest password=xxxxxxx");
|
||||||
|
For more details, the users refer to to ``src/pgsql_perl5/Pg.pm''.
|
||||||
|
4.3 pg{tcl,tk}sh
|
||||||
|
Use the pg_connect comamnd with -conninfo option thus
|
||||||
|
% set conn [pg_connect -conninfo \
|
||||||
|
"host=hyalos authtype=password dbname=unv \
|
||||||
|
user=pg_guest password=xxxxxxx "]
|
||||||
|
Use can list all of the keys for the option by executing the following
|
||||||
|
command:
|
||||||
|
% puts [ pg_conndefaults]
|
||||||
|
5. Acknowledgment
|
||||||
|
Mr. Ishii, SRA, pointed out the original bugs in the tool. He also
|
||||||
|
supplied the Makefile for this distribution.
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
July 2, 1997
|
||||||
|
Yoshihiko Ichikawa, Dept of Info Sci, Fac of Sci, Ochanomizu University
|
||||||
|
E-mail: ichikawa@is.ocha.ac.jp
|
||||||
|
|
||||||
PostgreSQL Data Base Management System (formerly known as Postgres, then
|
PostgreSQL Data Base Management System (formerly known as Postgres, then
|
||||||
as Postgres95).
|
as Postgres95).
|
||||||
|
|
|
@ -9,139 +9,90 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include "pg_type.h"
|
|
||||||
#include "utils/palloc.h"
|
#include "utils/palloc.h"
|
||||||
|
#include "utils/datetime.h"
|
||||||
|
|
||||||
typedef struct DateADT {
|
|
||||||
char day;
|
|
||||||
char month;
|
|
||||||
short year;
|
|
||||||
} DateADT;
|
|
||||||
|
|
||||||
typedef struct TimeADT {
|
TimeADT *time_difference(TimeADT * time1, TimeADT * time2)
|
||||||
short hr;
|
|
||||||
short min;
|
|
||||||
float sec;
|
|
||||||
} TimeADT;
|
|
||||||
|
|
||||||
TimeADT *
|
|
||||||
time_difference(TimeADT *time1, TimeADT *time2)
|
|
||||||
{
|
{
|
||||||
TimeADT *time = (TimeADT*)palloc(sizeof(TimeADT));
|
TimeADT *result = (TimeADT *) palloc(sizeof(TimeADT));
|
||||||
|
*result = *time1 - *time2;
|
||||||
time->sec = time1->sec - time2->sec;
|
|
||||||
time->min = time1->min - time2->min;
|
|
||||||
time->hr = time1->hr - time2->hr;
|
|
||||||
|
|
||||||
if (time->sec < 0) {
|
|
||||||
time->sec += 60.0;
|
|
||||||
time->min--;
|
|
||||||
} else if (time->sec >= 60.0) {
|
|
||||||
time->sec -= 60.0;
|
|
||||||
time->min++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time->min < 0) {
|
|
||||||
time->min += 60;
|
|
||||||
time->hr--;
|
|
||||||
} else if (time->min >= 60) {
|
|
||||||
time->min -= 60;
|
|
||||||
time->hr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time->hr < 0) {
|
|
||||||
time->hr += 24;
|
|
||||||
} else if (time->hr >= 24) {
|
|
||||||
time->hr -= 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (time);
|
|
||||||
}
|
|
||||||
|
|
||||||
TimeADT *
|
|
||||||
currentTime()
|
|
||||||
{
|
|
||||||
time_t current_time;
|
|
||||||
struct tm *tm;
|
|
||||||
TimeADT *result = (TimeADT*)palloc(sizeof(TimeADT));
|
|
||||||
|
|
||||||
current_time = time(NULL);
|
|
||||||
tm = localtime(¤t_time);
|
|
||||||
result->sec = tm->tm_sec;
|
|
||||||
result->min = tm->tm_min;
|
|
||||||
result->hr = tm->tm_hour;
|
|
||||||
|
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
int4
|
TimeADT *currenttime()
|
||||||
currentDate()
|
|
||||||
{
|
{
|
||||||
time_t current_time;
|
time_t current_time;
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
int4 result;
|
TimeADT *result = (TimeADT *) palloc(sizeof(TimeADT));
|
||||||
DateADT *date = (DateADT*)&result;
|
|
||||||
|
|
||||||
current_time = time(NULL);
|
current_time = time(NULL);
|
||||||
tm = localtime(¤t_time);
|
tm = localtime(¤t_time);
|
||||||
date->day = tm->tm_mday;
|
*result = ((((tm->tm_hour*60)+tm->tm_min)*60)+tm->tm_sec);
|
||||||
date->month = tm->tm_mon+1;
|
|
||||||
date->year = tm->tm_year+1900;
|
|
||||||
|
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
DateADT currentdate()
|
||||||
int4
|
|
||||||
hours(TimeADT *time)
|
|
||||||
{
|
{
|
||||||
return (time->hr);
|
time_t current_time;
|
||||||
|
struct tm *tm;
|
||||||
|
DateADT result;
|
||||||
|
current_time = time(NULL);
|
||||||
|
tm = localtime(¤t_time);
|
||||||
|
|
||||||
|
result = date2j(tm->tm_year,tm->tm_mon + 1,tm->tm_mday) -
|
||||||
|
date2j(100,1,1);
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
int4 hours(TimeADT * time)
|
||||||
|
{
|
||||||
|
return(*time / (60*60));
|
||||||
}
|
}
|
||||||
|
|
||||||
int4
|
int4 minutes(TimeADT * time)
|
||||||
minutes(TimeADT *time)
|
|
||||||
{
|
{
|
||||||
return (time->min);
|
return(((int) (*time / 60)) % 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
int4
|
int4 seconds(TimeADT * time)
|
||||||
seconds(TimeADT *time)
|
|
||||||
{
|
{
|
||||||
int seconds = (int)time->sec;
|
return(((int) *time) % 60);
|
||||||
|
}
|
||||||
|
int4 day(DateADT *date)
|
||||||
|
{
|
||||||
|
struct tm tm;
|
||||||
|
|
||||||
|
j2date( (*date + date2j(2000,1,1)),
|
||||||
|
&tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||||
|
|
||||||
|
return (tm.tm_mday);
|
||||||
|
}
|
||||||
|
int4 month(DateADT *date)
|
||||||
|
{
|
||||||
|
struct tm tm;
|
||||||
|
|
||||||
|
j2date( (*date + date2j(2000,1,1)),
|
||||||
|
&tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||||
|
|
||||||
|
return (tm.tm_mon);
|
||||||
|
}
|
||||||
|
int4 year(DateADT *date)
|
||||||
|
{
|
||||||
|
struct tm tm;
|
||||||
|
|
||||||
|
j2date( (*date + date2j(2000,1,1)),
|
||||||
|
&tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||||
|
|
||||||
|
return (tm.tm_year);
|
||||||
|
}
|
||||||
|
int4 asminutes(TimeADT * time)
|
||||||
|
{
|
||||||
|
int seconds = (int) *time;
|
||||||
|
|
||||||
|
return (seconds / 60);
|
||||||
|
}
|
||||||
|
int4 asseconds(TimeADT * time)
|
||||||
|
{
|
||||||
|
int seconds = (int) *time;
|
||||||
|
|
||||||
return (seconds);
|
return (seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
int4
|
|
||||||
day(int4 val)
|
|
||||||
{
|
|
||||||
DateADT *date = (DateADT*)&val;
|
|
||||||
return (date->day);
|
|
||||||
}
|
|
||||||
|
|
||||||
int4
|
|
||||||
month(int4 val)
|
|
||||||
{
|
|
||||||
DateADT *date = (DateADT*)&val;
|
|
||||||
return (date->month);
|
|
||||||
}
|
|
||||||
|
|
||||||
int4
|
|
||||||
year(int4 val)
|
|
||||||
{
|
|
||||||
DateADT *date = (DateADT*)&val;
|
|
||||||
return (date->year);
|
|
||||||
}
|
|
||||||
|
|
||||||
int4
|
|
||||||
asMinutes(TimeADT *time)
|
|
||||||
{
|
|
||||||
int seconds = (int)time->sec;
|
|
||||||
return (time->min + 60*time->hr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int4
|
|
||||||
asSeconds(TimeADT *time)
|
|
||||||
{
|
|
||||||
int seconds = (int)time->sec;
|
|
||||||
return (seconds + 60*time->min + 3600*time->hr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,16 @@
|
||||||
From: Massimo Dal Zotto <dz@cs.unitn.it>
|
Date & time functions for use in Postgres version 6.1 & up
|
||||||
Date: Tue, 14 May 1996 14:31:18 +0200 (MET DST)
|
|
||||||
Subject: [PG95]: new postgres functions
|
|
||||||
|
|
||||||
- -----BEGIN PGP SIGNED MESSAGE-----
|
This functions replaces the original ones from the postgresql.org
|
||||||
|
because the date & time structures has changed.
|
||||||
|
|
||||||
Some time ago I read in the mailing list requests of people looking
|
There is a Makefile that should be "ajusted"
|
||||||
for more time and date functions. I have now written some of them:
|
for directories where postgres home after install.
|
||||||
|
|
||||||
time_difference(time1, time2) ,also defined as operator '-'
|
In this case: /usr/postgres.
|
||||||
hour(time)
|
|
||||||
minutes(time)
|
|
||||||
seconds(time)
|
|
||||||
asMinutes(time)
|
|
||||||
asSeconds(time)
|
|
||||||
currentTime()
|
|
||||||
currentDate()
|
|
||||||
|
|
||||||
The file can be compiled as shared library and loaded as dynamic module
|
Hope this can help,
|
||||||
without need to recompile the backend. This can also be taken as an example
|
|
||||||
of the extensibility of postgres (user-defined functions, operators, etc).
|
|
||||||
I would be nice to see more of these user contributed modules posted to this
|
Sergio Lenzi (lenzi@bsi.com.br)
|
||||||
list and hopefully accessible from the Postgres home page.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,69 +1,75 @@
|
||||||
|
func=$1
|
||||||
-- SQL code to load and define 'datetime' functions
|
cat <<% > datetime_functions.sql
|
||||||
|
drop function time_difference(time,time);
|
||||||
-- load the new functions
|
drop function currentdate();
|
||||||
|
drop function currenttime();
|
||||||
load '/home/dz/lib/postgres/datetime_functions.so';
|
drop function hours(time);
|
||||||
|
drop function minutes(time);
|
||||||
-- define the new functions in postgres
|
drop function seconds(time);
|
||||||
|
drop function day(date);
|
||||||
|
drop function month(date);
|
||||||
|
drop function year(date);
|
||||||
|
drop function asminutes(time);
|
||||||
|
drop function asseconds(time);
|
||||||
|
drop operator - (time,time);
|
||||||
|
|
||||||
create function time_difference(time,time)
|
create function time_difference(time,time)
|
||||||
returns time
|
returns time
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function currentDate()
|
create function currentdate()
|
||||||
returns date
|
returns date
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function currentTime()
|
create function currenttime()
|
||||||
returns time
|
returns time
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function hours(time)
|
create function hours(time)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function minutes(time)
|
create function minutes(time)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function seconds(time)
|
create function seconds(time)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function day(date)
|
create function day(date)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function month(date)
|
create function month(date)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function year(date)
|
create function year(date)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function asMinutes(time)
|
create function asminutes(time)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create function asSeconds(time)
|
create function asseconds(time)
|
||||||
returns int4
|
returns int4
|
||||||
as '/home/dz/lib/postgres/datetime_functions.so'
|
as '$func'
|
||||||
language 'c';
|
language 'c';
|
||||||
|
|
||||||
create operator - (
|
create operator - (
|
||||||
leftarg=time,
|
leftarg=time,
|
||||||
rightarg=time,
|
rightarg=time,
|
||||||
procedure=time_difference);
|
procedure=time_difference);
|
||||||
|
%
|
||||||
|
|
|
@ -79,7 +79,8 @@ verify_password(char *user, char *password, Port *port,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* kill the newline */
|
/* kill the newline */
|
||||||
test_pw[strlen(test_pw)-1] = '\0';
|
if (test_pw[strlen(test_pw)-1] == '\n')
|
||||||
|
test_pw[strlen(test_pw)-1] = '\0';
|
||||||
|
|
||||||
strNcpy(salt, test_pw, 2);
|
strNcpy(salt, test_pw, 2);
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# IDENTIFICATION
|
# IDENTIFICATION
|
||||||
# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.7 1997/04/26 05:04:21 scrappy Exp $
|
# $Header: /cvsroot/pgsql/src/bin/Makefile,v 1.8 1997/08/25 19:41:39 momjian Exp $
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
$(MAKE) -C pg_version $@
|
$(MAKE) -C pg_version $@
|
||||||
$(MAKE) -C psql $@
|
$(MAKE) -C psql $@
|
||||||
$(MAKE) -C pg_dump $@
|
$(MAKE) -C pg_dump $@
|
||||||
|
$(MAKE) -C pg_passwd $@
|
||||||
#
|
#
|
||||||
# Shell scripts
|
# Shell scripts
|
||||||
#
|
#
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.86 1997/08/22 04:13:18 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.87 1997/08/25 19:41:48 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -1239,8 +1239,8 @@ HandleSlashCmds(PsqlSettings * settings,
|
||||||
} else if (!optarg) { /* show tables, sequences and indices */
|
} else if (!optarg) { /* show tables, sequences and indices */
|
||||||
tableList(settings, 0, 'b');
|
tableList(settings, 0, 'b');
|
||||||
} else if (strcmp(optarg, "*") == 0) { /* show everything */
|
} else if (strcmp(optarg, "*") == 0) { /* show everything */
|
||||||
tableList(settings, 0, 'b');
|
if (tableList(settings, 0, 'b') == 0)
|
||||||
tableList(settings, 1, 'b');
|
tableList(settings, 1, 'b');
|
||||||
} else { /* describe the specified table */
|
} else { /* describe the specified table */
|
||||||
tableDesc(settings, optarg);
|
tableDesc(settings, optarg);
|
||||||
}
|
}
|
||||||
|
@ -1945,6 +1945,13 @@ static void prompt_for_password(char *username, char *password)
|
||||||
printf("Username: ");
|
printf("Username: ");
|
||||||
fgets(username, 9, stdin);
|
fgets(username, 9, stdin);
|
||||||
length = strlen(username);
|
length = strlen(username);
|
||||||
|
/* skip rest of the line */
|
||||||
|
if (length > 0 && username[length-1] != '\n') {
|
||||||
|
static char buf[512];
|
||||||
|
do {
|
||||||
|
fgets(buf, 512, stdin);
|
||||||
|
} while (buf[strlen(buf)-1] != '\n');
|
||||||
|
}
|
||||||
if(length > 0 && username[length-1] == '\n') username[length-1] = '\0';
|
if(length > 0 && username[length-1] == '\n') username[length-1] = '\0';
|
||||||
|
|
||||||
printf("Password: ");
|
printf("Password: ");
|
||||||
|
@ -1960,6 +1967,13 @@ static void prompt_for_password(char *username, char *password)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
length = strlen(password);
|
length = strlen(password);
|
||||||
|
/* skip rest of the line */
|
||||||
|
if (length > 0 && password[length-1] != '\n') {
|
||||||
|
static char buf[512];
|
||||||
|
do {
|
||||||
|
fgets(buf, 512, stdin);
|
||||||
|
} while (buf[strlen(buf)-1] != '\n');
|
||||||
|
}
|
||||||
if(length > 0 && password[length-1] == '\n') password[length-1] = '\0';
|
if(length > 0 && password[length-1] == '\n') password[length-1] = '\0';
|
||||||
|
|
||||||
printf("\n\n");
|
printf("\n\n");
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/bin/psql/stringutils.c,v 1.9 1997/08/19 21:36:56 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/bin/psql/stringutils.c,v 1.10 1997/08/25 19:41:52 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -16,6 +16,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "postgres.h"
|
||||||
#ifndef HAVE_STRDUP
|
#ifndef HAVE_STRDUP
|
||||||
#include "strdup.h"
|
#include "strdup.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue