* Copyright (c) 2002-2007, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.13 2007/08/27 01:19:14 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.14 2007/08/29 17:24:29 tgl Exp $
*
*/
struct dirent *direntry;
char dirpath[MAXPGPATH];
char pathname[MAXPGPATH];
+ AclResult aclresult;
+
+ /* User must have connect privilege for target database */
+ aclresult = pg_database_aclcheck(dbOid, GetUserId(), ACL_CONNECT);
+ if (aclresult != ACLCHECK_OK)
+ aclcheck_error(aclresult, ACL_KIND_DATABASE,
+ get_database_name(dbOid));
/* Shared storage in pg_global is not counted */
{
Oid dbOid = PG_GETARG_OID(0);
- if (!pg_database_ownercheck(dbOid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE,
- get_database_name(dbOid));
-
PG_RETURN_INT64(calculate_database_size(dbOid));
}
errmsg("database \"%s\" does not exist",
NameStr(*dbName))));
- if (!pg_database_ownercheck(dbOid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_DATABASE,
- NameStr(*dbName));
-
PG_RETURN_INT64(calculate_database_size(dbOid));
}
int64 totalsize = 0;
DIR *dirdesc;
struct dirent *direntry;
+ AclResult aclresult;
+
+ /*
+ * User must have CREATE privilege for target tablespace, either explicitly
+ * granted or implicitly because it is default for current database.
+ */
+ if (tblspcOid != MyDatabaseTableSpace)
+ {
+ aclresult = pg_tablespace_aclcheck(tblspcOid, GetUserId(), ACL_CREATE);
+ if (aclresult != ACLCHECK_OK)
+ aclcheck_error(aclresult, ACL_KIND_TABLESPACE,
+ get_tablespace_name(tblspcOid));
+ }
if (tblspcOid == DEFAULTTABLESPACE_OID)
snprintf(tblspcPath, MAXPGPATH, "base");
{
Oid tblspcOid = PG_GETARG_OID(0);
- if (!superuser())
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- (errmsg("must be superuser to use pg_tablespace_size"))));
-
PG_RETURN_INT64(calculate_tablespace_size(tblspcOid));
}
Name tblspcName = PG_GETARG_NAME(0);
Oid tblspcOid = get_tablespace_oid(NameStr(*tblspcName));
- if (!superuser())
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- (errmsg("must be superuser to use pg_tablespace_size"))));
-
if (!OidIsValid(tblspcOid))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
rel = relation_open(relOid, AccessShareLock);
- if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
- RelationGetRelationName(rel));
-
size = calculate_relation_size(&(rel->rd_node));
relation_close(rel, AccessShareLock);
relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname));
rel = relation_openrv(relrv, AccessShareLock);
- if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
- RelationGetRelationName(rel));
-
size = calculate_relation_size(&(rel->rd_node));
relation_close(rel, AccessShareLock);
ListCell *cell;
heapRel = relation_open(Relid, AccessShareLock);
-
- if (!pg_class_ownercheck(RelationGetRelid(heapRel), GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
- RelationGetRelationName(heapRel));
-
toastOid = heapRel->rd_rel->reltoastrelid;
/* Get the heap size */
{
Oid relid = PG_GETARG_OID(0);
- /* permission check is inside calculate_total_relation_size */
-
PG_RETURN_INT64(calculate_total_relation_size(relid));
}
relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname));
relid = RangeVarGetRelid(relrv, false);
- /* permission check is inside calculate_total_relation_size */
-
PG_RETURN_INT64(calculate_total_relation_size(relid));
}