diff options
author | Heikki Linnakangas | 2009-01-30 17:24:47 +0000 |
---|---|---|
committer | Heikki Linnakangas | 2009-01-30 17:24:47 +0000 |
commit | d52e44cc0e6db1ccb3909b5ce8ce400302ed7fe4 (patch) | |
tree | dbe78ce19821a2b1d1b9ba22ca44fff227a90b3e | |
parent | 901d0beff5992f1bf3db8ebaad49b520ffc1fdf2 (diff) |
Check that connection limit is within valid range. IOW, not < -1.
It's missing in older versions too, but it doesn't seem worth
back-porting. All negative are just harmlessly treated as "no limit", and
tightening the check might even brake an application that relies on it.
-rw-r--r-- | src/backend/commands/dbcommands.c | 12 | ||||
-rw-r--r-- | src/backend/commands/user.c | 12 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 7e065762a8..d08e3d0853 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -244,7 +244,13 @@ createdb(const CreatedbStmt *stmt) dbctype = strVal(dctype->arg); if (dconnlimit && dconnlimit->arg) + { dbconnlimit = intVal(dconnlimit->arg); + if (dbconnlimit < -1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid connection limit: %d", dbconnlimit))); + } /* obtain OID of proposed owner */ if (dbowner) @@ -1319,7 +1325,13 @@ AlterDatabase(AlterDatabaseStmt *stmt, bool isTopLevel) } if (dconnlimit) + { connlimit = intVal(dconnlimit->arg); + if (connlimit < -1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid connection limit: %d", connlimit))); + } /* * Get the old tuple. We don't need a lock on the database per se, diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 783de0246a..065fce7421 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -242,7 +242,13 @@ CreateRole(CreateRoleStmt *stmt) if (dcanlogin) canlogin = intVal(dcanlogin->arg) != 0; if (dconnlimit) + { connlimit = intVal(dconnlimit->arg); + if (connlimit < -1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid connection limit: %d", connlimit))); + } if (daddroleto) addroleto = (List *) daddroleto->arg; if (drolemembers) @@ -533,7 +539,13 @@ AlterRole(AlterRoleStmt *stmt) if (dcanlogin) canlogin = intVal(dcanlogin->arg); if (dconnlimit) + { connlimit = intVal(dconnlimit->arg); + if (connlimit < -1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid connection limit: %d", connlimit))); + } if (drolemembers) rolemembers = (List *) drolemembers->arg; if (dvalidUntil) |