From 2f7d855c632a5dd507669abc90ec452635a4a248 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sun, 27 Nov 2011 20:31:36 -0500 Subject: [PATCH] libquota: remove use of PATH_MAX and replace it with QUOTA_NAME_LEN PATH_MAX is not portable (for example, it doesn't exist on the Hurd). So replace it with a new define, which defines the maximum length of the base quota name. As it turns out, this is substantially smaller than PATH_MAX. Also move the definitions relating to quotaio.c from mkquota.h to quotaio.h, as a cleanup. Addresses-Debian-Bug: #649689 Signed-off-by: "Theodore Ts'o" --- e2fsck/quota.c | 3 ++- lib/quota/mkquota.h | 5 ----- lib/quota/quotaio.c | 4 ++-- lib/quota/quotaio.h | 8 ++++++++ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/e2fsck/quota.c b/e2fsck/quota.c index 53b695b..3ae934a 100644 --- a/e2fsck/quota.c +++ b/e2fsck/quota.c @@ -16,6 +16,7 @@ #include "e2fsck.h" #include "problem.h" #include "quota/mkquota.h" +#include "quota/quotaio.h" static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino, ext2_ino_t to_ino, int qtype) @@ -24,7 +25,7 @@ static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino, ext2_ino_t ino; struct ext2_inode inode; errcode_t retval; - char qf_name[255]; + char qf_name[QUOTA_NAME_LEN]; if (ext2fs_read_inode(fs, from_ino, &inode)) return; diff --git a/lib/quota/mkquota.h b/lib/quota/mkquota.h index 4fbaedd..a5fa74b 100644 --- a/lib/quota/mkquota.h +++ b/lib/quota/mkquota.h @@ -60,9 +60,4 @@ int quota_is_on(ext2_filsys fs, int type); int quota_file_exists(ext2_filsys fs, int qtype, int fmt); void quota_set_sb_inum(ext2_filsys fs, ext2_ino_t ino, int qtype); -/* In quotaio.c */ -const char *quota_get_qf_name(int type, int fmt, char *buf); -const char *quota_get_qf_path(const char *mntpt, int qtype, int fmt, - char *path_buf, size_t path_buf_size); - #endif /* __QUOTA_QUOTAIO_H__ */ diff --git a/lib/quota/quotaio.c b/lib/quota/quotaio.c index d0b5b9d..3f434ca 100644 --- a/lib/quota/quotaio.c +++ b/lib/quota/quotaio.c @@ -56,7 +56,7 @@ const char *quota_get_qf_name(int type, int fmt, char *buf) { if (!buf) return NULL; - snprintf(buf, PATH_MAX, "%s.%s", + snprintf(buf, QUOTA_NAME_LEN, "%s.%s", basenames[fmt], extensions[type]); return buf; @@ -66,7 +66,7 @@ const char *quota_get_qf_path(const char *mntpt, int qtype, int fmt, char *path_buf, size_t path_buf_size) { struct stat qf_stat; - char qf_name[PATH_MAX] = {0}; + char qf_name[QUOTA_NAME_LEN]; if (!mntpt || !path_buf || !path_buf_size) return NULL; diff --git a/lib/quota/quotaio.h b/lib/quota/quotaio.h index f8cc1f1..91a1ff2 100644 --- a/lib/quota/quotaio.h +++ b/lib/quota/quotaio.h @@ -159,4 +159,12 @@ const char *type2name(int type); void update_grace_times(struct dquot *q); +/* size for the buffer returned by quota_get_qf_name(); must be greater + than maxlen of extensions[] and fmtnames[] (plus 2) found in quotaio.c */ +#define QUOTA_NAME_LEN 16 + +const char *quota_get_qf_name(int type, int fmt, char *buf); +const char *quota_get_qf_path(const char *mntpt, int qtype, int fmt, + char *path_buf, size_t path_buf_size); + #endif /* GUARD_QUOTAIO_H */ -- 1.8.3.1