[db-create] we should always ask db user that should be used when special privileges are required
--- a/server/serverctl.py Thu Jan 20 15:51:58 2011 +0100
+++ b/server/serverctl.py Thu Jan 20 15:52:59 2011 +0100
@@ -56,16 +56,14 @@
else:
print dbname,
if dbhelper.users_support:
- if not verbose or (not special_privs and source.get('db-user')):
+ if not special_privs and source.get('db-user'):
user = source['db-user']
if verbose:
print 'as', user
- if source.get('db-password'):
- password = source['db-password']
- else:
- password = getpass('password: ')
+ password = source.get('db-password')
else:
- print
+ if verbose:
+ print
if special_privs:
print 'WARNING'
print ('the user will need the following special access rights '
@@ -74,8 +72,8 @@
print
default_user = source.get('db-user', os.environ.get('USER', ''))
user = raw_input('Connect as user ? [%r]: ' % default_user)
- user = user or default_user
- if user == source.get('db-user') and source.get('db-password'):
+ user = user.strip() or default_user
+ if user == source.get('db-user'):
password = source['db-password']
else:
password = getpass('password: ')
@@ -108,22 +106,18 @@
return source_cnx(source, system_db, special_privs=special_privs, verbose=verbose)
return source_cnx(source, special_privs=special_privs, verbose=verbose)
-def _db_sys_cnx(source, what, db=None, user=None, verbose=True):
- """return a connection on the RDMS system table (to create/drop a user
- or a database
+def _db_sys_cnx(source, special_privs, verbose=True):
+ """return a connection on the RDMS system table (to create/drop a user or a
+ database)
"""
import logilab.common as lgp
from logilab.database import get_db_helper
lgp.USE_MX_DATETIME = False
- special_privs = ''
driver = source['db-driver']
helper = get_db_helper(driver)
- if user is not None and helper.users_support:
- special_privs += '%s USER' % what
- if db is not None:
- special_privs += ' %s DATABASE' % what
# connect on the dbms system base to create our base
- cnx = system_source_cnx(source, True, special_privs=special_privs, verbose=verbose)
+ cnx = system_source_cnx(source, True, special_privs=special_privs,
+ verbose=verbose)
# disable autocommit (isolation_level(1)) because DROP and
# CREATE DATABASE can't be executed in a transaction
try:
@@ -313,7 +307,7 @@
elif self.config.create_db:
print '\n'+underline_title('Creating the system database')
# connect on the dbms system base to create our base
- dbcnx = _db_sys_cnx(source, 'CREATE DATABASE and / or USER', verbose=verbose)
+ dbcnx = _db_sys_cnx(source, 'CREATE/DROP DATABASE and / or USER', verbose=verbose)
cursor = dbcnx.cursor()
try:
if helper.users_support:
@@ -333,7 +327,8 @@
except:
dbcnx.rollback()
raise
- cnx = system_source_cnx(source, special_privs='LANGUAGE C', verbose=verbose)
+ cnx = system_source_cnx(source, special_privs='CREATE LANGUAGE',
+ verbose=verbose)
cursor = cnx.cursor()
helper.init_fti_extensions(cursor)
# postgres specific stuff