[Pvfs2-developers] Re: [Pvfs2-cvs] commit by slang in
pvfs2/src/common/misc: fsck-utils.c fsck-utils.h
Sam Lang
slang at mcs.anl.gov
Wed Dec 6 17:07:14 EST 2006
Hi Pete,
Thanks for the comments. Everything seems reasonable to me. I would
probably just remove the EWARNING altogether and just return 0, since
we gossip_err anyway. The special characters...would it be easier to
check for valid characters instead of invalid ones?
-sam
On Dec 6, 2006, at 11:48 AM, Pete Wyckoff wrote:
> cvs at parl.clemson.edu wrote on Wed, 06 Dec 2006 12:22 -0500:
>> Update of /projects/cvsroot/pvfs2/src/common/misc
>> In directory parlweb1:/tmp/cvs-serv15660/src/common/misc
>>
>> Added Files:
>> fsck-utils.c fsck-utils.h
>> Log Message:
>> missed adding these in recent commit of pvfs2-validate code.
> [..]
>> +/**
>> + * Performs validity checking for the PVFS_TYPE_DIRECTORY
>> directory entries
>> + * Checks the following:
>> + * - invalid characters in entry names
>> + * - entry_names <= PVFS2_SEGMENT_MAX
>> + * - warnings for characters that tend to confuse shells
>> + * .
>> + * \retval 0 on success
>> + * \retval -PVFS_EWARNING for non critical warnings
>> + * \retval -PVFS_error on failure
>> + */
>> +int PVFS_fsck_validate_dir_ent(
>> + const struct PINT_fsck_options *fsck_options, /**< generic
>> fsck options */
>> + const char *filename) /**< Filename associated
>> with handle */
>> +{
>> + int ret = 0;
>> +
>> + if (strlen(filename) > PVFS_SEGMENT_MAX)
>> + {
>> + gossip_err(
>> + "Error: directory entry [%s] length is >
>> PVFS_SEGMENT_MAX [%d]\n",
>> + filename, PVFS_SEGMENT_MAX);
>> + set_return_code(&ret, -PVFS_EINVAL);
>> + }
>> +
>> + if (strspn(filename, "/") > 0)
>> + {
>> + gossip_err("Error: directory entry [%s] contains
>> invalid / character \n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EINVAL);
>> + }
>> +
>> + if (strspn(filename, "\n") > 0)
>> + {
>> + gossip_err(
>> + "WARNING: directory entry [%s] contains invalid
>> new line character\n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EWARNING);
>> + }
>> +
>> + if (strspn(filename, "\r") > 0)
>> + {
>> + gossip_err(
>> + "WARNING: directory entry [%s] contains invalid
>> carriage return character\n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EWARNING);
>> + }
>> +
>> + if (strspn(filename, "|") > 0)
>> + {
>> + gossip_err(
>> + "WARNING: directory entry [%s] contains invalid
>> pipe character\n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EWARNING);
>> + }
>> +
>> + if (strspn(filename, "*") > 0)
>> + {
>> + gossip_err(
>> + "WARNING: directory entry [%s] contains invalid #
>> character\n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EWARNING);
>> + }
>> +
>> + if (strspn(filename, "?") > 0)
>> + {
>> + gossip_err(
>> + "WARNING: directory entry [%s] contains invalid ?
>> character\n",
>> + filename);
>> + set_return_code(&ret, -PVFS_EWARNING);
>> + }
>> +
>> + return ret;
>> +}
>
> I'm not too happy about this part. Three reasons:
>
> 1. -PVFS_EWARNING: An error that is actually a warning? There's
> lots of spots in this code that look like:
>
> err = PVFS_do_something(..)
> if (err < 0 && err != -PVFS_EWARNING)
> die()
>
> It seems icky to have to have every caller filter out the errors
> that aren't _real_ errors.
>
> 2. There's nothing illegal about any of the characters above
> except for '/' (and '\0'). Names "." and ".." have special
> meaning but you handle that separately elsewhere.
>
> 3. You're rather selective about the "bad practice" characters.
> If *?|\r\n are bad, why not \010 or \177 or ! or # or ' or any
> of the other characters that need a shell escape? Seems rather
> arbitrary.
>
> Can we get rid of these warnings and the infrastructure for
> handling the not-quite-an-error?
>
> -- Pete
>
More information about the Pvfs2-developers
mailing list