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:
Bruce Momjian 1997-08-25 19:41:52 +00:00
parent 8d0e658d06
commit f8fda03d12
8 changed files with 195 additions and 161 deletions

69
README
View File

@ -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
as Postgres95).

View File

@ -9,139 +9,90 @@
#include <time.h>
#include "postgres.h"
#include "pg_type.h"
#include "utils/palloc.h"
#include "utils/datetime.h"
typedef struct DateADT {
char day;
char month;
short year;
} DateADT;
typedef struct TimeADT {
short hr;
short min;
float sec;
} TimeADT;
TimeADT *
time_difference(TimeADT *time1, TimeADT *time2)
TimeADT *time_difference(TimeADT * time1, TimeADT * time2)
{
TimeADT *time = (TimeADT*)palloc(sizeof(TimeADT));
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(&current_time);
result->sec = tm->tm_sec;
result->min = tm->tm_min;
result->hr = tm->tm_hour;
TimeADT *result = (TimeADT *) palloc(sizeof(TimeADT));
*result = *time1 - *time2;
return (result);
}
int4
currentDate()
TimeADT *currenttime()
{
time_t current_time;
struct tm *tm;
int4 result;
DateADT *date = (DateADT*)&result;
TimeADT *result = (TimeADT *) palloc(sizeof(TimeADT));
current_time = time(NULL);
tm = localtime(&current_time);
date->day = tm->tm_mday;
date->month = tm->tm_mon+1;
date->year = tm->tm_year+1900;
*result = ((((tm->tm_hour*60)+tm->tm_min)*60)+tm->tm_sec);
return (result);
}
int4
hours(TimeADT *time)
DateADT currentdate()
{
return (time->hr);
time_t current_time;
struct tm *tm;
DateADT result;
current_time = time(NULL);
tm = localtime(&current_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
minutes(TimeADT *time)
int4 minutes(TimeADT * time)
{
return (time->min);
return(((int) (*time / 60)) % 60);
}
int4
seconds(TimeADT *time)
int4 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);
}
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);
}

View File

@ -1,25 +1,16 @@
From: Massimo Dal Zotto <dz@cs.unitn.it>
Date: Tue, 14 May 1996 14:31:18 +0200 (MET DST)
Subject: [PG95]: new postgres functions
Date & time functions for use in Postgres version 6.1 & up
- -----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
for more time and date functions. I have now written some of them:
There is a Makefile that should be "ajusted"
for directories where postgres home after install.
time_difference(time1, time2) ,also defined as operator '-'
hour(time)
minutes(time)
seconds(time)
asMinutes(time)
asSeconds(time)
currentTime()
currentDate()
In this case: /usr/postgres.
The file can be compiled as shared library and loaded as dynamic module
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
list and hopefully accessible from the Postgres home page.
Hope this can help,
Sergio Lenzi (lenzi@bsi.com.br)

View File

@ -1,69 +1,75 @@
-- SQL code to load and define 'datetime' functions
-- load the new functions
load '/home/dz/lib/postgres/datetime_functions.so';
-- define the new functions in postgres
func=$1
cat <<% > datetime_functions.sql
drop function time_difference(time,time);
drop function currentdate();
drop function currenttime();
drop function hours(time);
drop function minutes(time);
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)
returns time
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function currentDate()
create function currentdate()
returns date
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function currentTime()
create function currenttime()
returns time
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function hours(time)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function minutes(time)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function seconds(time)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function day(date)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function month(date)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function year(date)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function asMinutes(time)
create function asminutes(time)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create function asSeconds(time)
create function asseconds(time)
returns int4
as '/home/dz/lib/postgres/datetime_functions.so'
as '$func'
language 'c';
create operator - (
leftarg=time,
rightarg=time,
procedure=time_difference);
%

View File

@ -79,7 +79,8 @@ verify_password(char *user, char *password, Port *port,
}
/* 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);

View File

@ -7,7 +7,7 @@
#
#
# 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 psql $@
$(MAKE) -C pg_dump $@
$(MAKE) -C pg_passwd $@
#
# Shell scripts
#

View File

@ -7,7 +7,7 @@
*
*
* 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 */
tableList(settings, 0, 'b');
} else if (strcmp(optarg, "*") == 0) { /* show everything */
tableList(settings, 0, 'b');
tableList(settings, 1, 'b');
if (tableList(settings, 0, 'b') == 0)
tableList(settings, 1, 'b');
} else { /* describe the specified table */
tableDesc(settings, optarg);
}
@ -1945,6 +1945,13 @@ static void prompt_for_password(char *username, char *password)
printf("Username: ");
fgets(username, 9, stdin);
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';
printf("Password: ");
@ -1960,6 +1967,13 @@ static void prompt_for_password(char *username, char *password)
#endif
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';
printf("\n\n");

View File

@ -7,7 +7,7 @@
*
*
* 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 <stdlib.h>
#include "postgres.h"
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif