Ejemplo n.º 1
0
static int default_quota_get_quota(vfs_handle_struct *handle, const char *path,
				   enum SMB_QUOTA_TYPE qtype, unid_t id,
				   SMB_DISK_QUOTA *dq)
{
	int ret = -1;

	if ((ret = SMB_VFS_NEXT_GET_QUOTA(handle, path, qtype, id, dq)) != 0) {
		return ret;
	}

	switch (qtype) {
		case SMB_USER_QUOTA_TYPE:
			/* we use id.uid == 0 for default quotas */
			if ((id.uid==DEFAULT_QUOTA_UID(handle)) &&
				DEFAULT_QUOTA_UID_NOLIMIT(handle)) {
				SMB_QUOTAS_SET_NO_LIMIT(dq);
			}
			break;
#ifdef HAVE_GROUP_QUOTA
		case SMB_GROUP_QUOTA_TYPE:
			/* we use id.gid == 0 for default quotas */
			if ((id.gid==DEFAULT_QUOTA_GID(handle)) &&
				DEFAULT_QUOTA_GID_NOLIMIT(handle)) {
				SMB_QUOTAS_SET_NO_LIMIT(dq);
			}
			break;
#endif /* HAVE_GROUP_QUOTA */
		case SMB_USER_FS_QUOTA_TYPE:
			{
				unid_t qid;
				uint32_t qflags = dq->qflags;
				qid.uid = DEFAULT_QUOTA_UID(handle);
				SMB_VFS_NEXT_GET_QUOTA(
				    handle, path, SMB_USER_QUOTA_TYPE, qid, dq);
				dq->qflags = qflags;
			}
			break;
#ifdef HAVE_GROUP_QUOTA
		case SMB_GROUP_FS_QUOTA_TYPE:
			{
				unid_t qid;
				uint32_t qflags = dq->qflags;
				qid.gid = DEFAULT_QUOTA_GID(handle);
				SMB_VFS_NEXT_GET_QUOTA(handle, path,
						       SMB_GROUP_QUOTA_TYPE,
						       qid, dq);
				dq->qflags = qflags;
			}
			break;
#endif /* HAVE_GROUP_QUOTA */
		default:
			errno = ENOSYS;
			return -1;
			break;
	}

	return ret;
}
Ejemplo n.º 2
0
static int skel_get_quota(vfs_handle_struct *handle,
				const struct smb_filename *smb_fname,
				enum SMB_QUOTA_TYPE qtype,
				unid_t id,
				SMB_DISK_QUOTA *dq)
{
	return SMB_VFS_NEXT_GET_QUOTA(handle, smb_fname, qtype, id, dq);
}
Ejemplo n.º 3
0
static int skel_get_quota(vfs_handle_struct *handle, const char *path,
			  enum SMB_QUOTA_TYPE qtype, unid_t id,
			  SMB_DISK_QUOTA *dq)
{
	return SMB_VFS_NEXT_GET_QUOTA(handle, path, qtype, id, dq);
}