Re: Database names with spaces - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: Database names with spaces |
Date | |
Msg-id | 200005312107.RAA29977@candle.pha.pa.us Whole thread Raw |
In response to | Re: [HACKERS] Database names with spaces (sszabo@bigpanda.com) |
Responses |
Re: Database names with spaces
|
List | pgsql-hackers |
Can someone comment on this? > > Bruce Momjian <maillist@candle.pha.pa.us> writes: > >> > Looks like a bug. Added to TODO list. > >> > >> >> I see a todo item > >> >> * Views with spaces in view name fail when referenced > >> >> > >> >> I have another one for you: > >> >> * Databases with spaces in name fail to be created and destroyed despite > >> >> responses to the contrary. > > > >> IIRC, createdb and destroydb use "cp -r" and "rm -r" respectively. > >> Lack of careful quoting in the system calls is probably what's > >> causing the problem here. > >> > >> However, I wonder if it wouldn't be a better idea to forbid funny > >> characters in things that will become Unix filenames. In particular, > >> something like CREATE DATABASE "../../../something" could have real > >> bad consequences... > > > >I just tried it: > > > > test=> create database "../../pg_hba.conf" > > test-> \g > > ERROR: Unable to locate path '../../pg_hba.conf' > > This may be due to a missing environment variable in the server > > > >Seems we are safe. > > (This is my first time going through the code, so I could be getting alot of > things wrong, but here's what I see...) > > The function createdb in backend/commands/dbcommands.c (I assume this is right > because it seems to do the correct thing and actually define the above error > message) tries to get the path to the database using ExpandDatabasePath on > either dbpath/dbname or just dbname depending on whether dbpath is null (or > same as dbname). > > ExpandDatabasePath in backend/utils/misc/database.c seems to assume that anything > that has the separator character ('/' i would assume) is of the form > environmentvariable/<rest> which seems to be rewritten into > <value of environment variable>/base/<rest> > So with your example it fails because it can't find the environment variable > '..' (although if you had one, it might actually attempt to put it wherever > that would point) > > It then makes a command and systems: > COPY_CMD DataDir/base/template1/ <return from ExpandDatabasePath> > > When i tried to do a: > create database "`a.sh`" on a little shell script in the PATH, it decided > to copy the stuff from template1 into my data/base directory. The shell > script touches a file in tmp, which was touched. > > It seems like the current implementation would let someone run a command in > backticks that is in the postgres user's path as long as there are no > directory name separators in the command. > > Stephan Szabo > > ************ > -- Bruce Momjian | http://www.op.net/~candle pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
pgsql-hackers by date: