Skip to content

Commit

Permalink
Improve OS DSNAME validation. Valid characters are A-Z, 0-9, #, $, @,…
Browse files Browse the repository at this point in the history
… -, { and '.'

git-svn-id: file:///home/jj/hercules.svn/trunk@7367 956126f8-22a0-4046-8f4a-272fa8102e63
  • Loading branch information
Paul Gorlinsky authored and rbowler committed Aug 1, 2013
1 parent 9642ed4 commit 0b3e8c5
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 5 deletions.
2 changes: 1 addition & 1 deletion dasdblks.h
Expand Up @@ -386,5 +386,5 @@ int create_compressed_fba (char *fname, U16 devtype, U32 sectsz,
int get_verbose_util(void);
DUT_DLL_IMPORT void set_verbose_util(int v);


DUT_DLL_IMPORT int valid_dsname( const char *pszdsname );
#define DEFAULT_FBA_TYPE 0x3370
14 changes: 10 additions & 4 deletions dasdls.c
Expand Up @@ -51,15 +51,21 @@ int list_contents(CIFBLK *cif, char *volser, DSXTENT *extent)

ptr = cif->trkbuf + CKDDASD_TRKHDR_SIZE;

while (!end_of_track(ptr)) {
while (!end_of_track(ptr))
{
char dsname[45];

CKDDASD_RECHDR *rechdr = (CKDDASD_RECHDR*)ptr;
int kl = rechdr->klen;
int dl = (rechdr->dlen[0] << 8) | rechdr->dlen[1];

make_asciiz(dsname, sizeof(dsname), ptr + CKDDASD_RECHDR_SIZE, kl);
/* XXXX Is this a suitable sanity check for a legal dsname? */
if (isalnum(*dsname))
printf("%s\n", dsname);

dsname[44] = '\0';

if ( valid_dsname( dsname ) )
printf("%s\n", dsname);

ptr += CKDDASD_RECHDR_SIZE + kl + dl;
}

Expand Down
32 changes: 32 additions & 0 deletions dasdutil.c
Expand Up @@ -2205,3 +2205,35 @@ DLL_EXPORT void set_verbose_util(int v)
{
verbose = v;
}

DLL_EXPORT int valid_dsname( const char *pszdsname )
{
int i;
int iLen = (int)strlen(pszdsname);

if ( iLen > 44 || iLen == 0 ) return FALSE;

for ( i = 0; i < iLen; i++ )
{
BYTE c = pszdsname[i];
if ( isalnum( c ) )
continue;
else if ( c == '$' )
continue;
else if ( c == '@' )
continue;
else if ( c == '#' )
continue;
else if ( c == '-' )
continue;
else if ( c == '.' )
continue;
else if ( c == '{' )
continue;
else if ( i > 1 && c == '\0' )
break;
else
return FALSE;
}
return TRUE;
}

0 comments on commit 0b3e8c5

Please sign in to comment.