mirror of
https://github.com/SCST-project/scst.git
synced 2026-08-17 04:36:22 +00:00
scstadmin: Make argument checking more systematic
Additionally, suppress warning messages about 'length(undefined)' on RHEL 6.x. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9162 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -466,6 +466,15 @@ sub scstAttributes {
|
||||
return (\%attributes, undef);
|
||||
}
|
||||
|
||||
# Older Perl versions complain if the argument of length() is undefined. Hence
|
||||
# this function that checks whether its arguments are defined and not empty.
|
||||
sub valid {
|
||||
for my $arg (@_) {
|
||||
return FALSE if (!defined($arg) || $arg eq "");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
# Convert e.g. EINVAL into "EINVAL".
|
||||
sub my_strerror {
|
||||
my ($errorcode) = @_;
|
||||
@@ -492,7 +501,7 @@ sub setScstAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
# There is a space between the unary minus sign and ENOENT because
|
||||
# without that space older Perl versions report the following warning:
|
||||
@@ -543,7 +552,7 @@ sub targets {
|
||||
my $self = shift;
|
||||
my $driver = shift;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver));
|
||||
return (undef, "Too few arguments") if (!valid($driver));
|
||||
|
||||
my $tHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_TARGETS_DIR(), $driver);
|
||||
@@ -578,7 +587,7 @@ sub groups {
|
||||
my $driver = shift;
|
||||
my $target = shift;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver) || !length($target));
|
||||
return (undef, "Too few arguments") if (!valid($driver, $target));
|
||||
|
||||
my $gHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
@@ -620,7 +629,7 @@ sub initiators {
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments")
|
||||
if (!length($driver) || !length($target) || !length($group));
|
||||
if (!valid($driver, $target, $group));
|
||||
|
||||
my $iHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -657,11 +666,11 @@ sub luns {
|
||||
my $group = shift;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver) || !length($target));
|
||||
return (undef, "Too few arguments") if (!valid($driver, $target));
|
||||
|
||||
my $_path;
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS);
|
||||
} else {
|
||||
@@ -672,7 +681,8 @@ sub luns {
|
||||
my $lHandle = new IO::Handle;
|
||||
|
||||
if (!(opendir $lHandle, $_path)) {
|
||||
if (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
|
||||
if (valid($group) &&
|
||||
$self->groupExists($driver, $target, $group) != TRUE) {
|
||||
$errorString = "initiators(): Group '$group' does not exist";
|
||||
} elsif ($self->driverExists($driver) != TRUE) {
|
||||
$errorString = "luns(): Driver '$driver' is not available";
|
||||
@@ -800,7 +810,7 @@ sub deviceGroupDevices {
|
||||
my @devices;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($group));
|
||||
return (undef, "Too few arguments") if (!valid($group));
|
||||
|
||||
my $dHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES);
|
||||
@@ -832,7 +842,7 @@ sub targetGroups {
|
||||
my @tgroups;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($group));
|
||||
return (undef, "Too few arguments") if (!valid($group));
|
||||
|
||||
my $dHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS);
|
||||
@@ -865,7 +875,7 @@ sub targetGroupTargets {
|
||||
my @targets;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($group) || !length($tgroup));
|
||||
return (undef, "Too few arguments") if (!valid($group, $tgroup));
|
||||
|
||||
my $dHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup);
|
||||
@@ -901,7 +911,7 @@ sub driverExists {
|
||||
my $dHandle = new IO::Handle;
|
||||
my $result;
|
||||
|
||||
$result = length($driver) &&
|
||||
$result = valid($driver) &&
|
||||
opendir($dHandle, make_path(SCST_TARGETS_DIR(), $driver));
|
||||
close $dHandle if ($result);
|
||||
|
||||
@@ -915,7 +925,7 @@ sub driverDynamicAttributes {
|
||||
my $available;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver));
|
||||
return (undef, "Too few arguments") if (!valid($driver));
|
||||
|
||||
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
|
||||
SCST_MGMT_IO), O_RDONLY;
|
||||
@@ -955,7 +965,7 @@ sub checkDriverDynamicAttributes {
|
||||
my $driver = shift;
|
||||
my $check = shift;
|
||||
|
||||
return TRUE if (!length($driver));
|
||||
return TRUE if (!valid($driver));
|
||||
|
||||
my ($available, $errorString) = $self->driverDynamicAttributes($driver);
|
||||
|
||||
@@ -990,8 +1000,8 @@ sub addDriverDynamicAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return SCST_C_DRV_ADDATTR_FAIL
|
||||
if (!length($driver) || !defined($attribute) || !defined($value));
|
||||
return SCST_C_DRV_ADDATTR_FAIL if (!valid($driver, $attribute) ||
|
||||
!defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
|
||||
@@ -1028,8 +1038,8 @@ sub removeDriverDynamicAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return SCST_C_DRV_REMATTR_FAIL
|
||||
if (!length($driver) || !defined($attribute) || !defined($value));
|
||||
return SCST_C_DRV_REMATTR_FAIL if (!valid($driver, $attribute) ||
|
||||
!defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
|
||||
@@ -1065,7 +1075,7 @@ sub targetExists {
|
||||
my $driver = shift;
|
||||
my $target = shift;
|
||||
|
||||
return length($driver) && length($target) &&
|
||||
return valid($driver, $target) &&
|
||||
$target ne '.' && $target ne '..' && $target ne 'module' &&
|
||||
(-d make_path(SCST_TARGETS_DIR(), $driver, $target)) ? TRUE : FALSE;
|
||||
}
|
||||
@@ -1083,7 +1093,7 @@ sub targetType {
|
||||
my $target = shift;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver) || !length($target));
|
||||
return (undef, "Too few arguments") if (!valid($driver, $target));
|
||||
|
||||
if ($self->driverIsVirtualCapable($driver)) {
|
||||
my $attribs;
|
||||
@@ -1160,7 +1170,7 @@ sub targetDynamicAttributes {
|
||||
my $available;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver));
|
||||
return (undef, "Too few arguments") if (!valid($driver));
|
||||
|
||||
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
|
||||
SCST_MGMT_IO), O_RDONLY;
|
||||
@@ -1235,8 +1245,7 @@ sub addTargetDynamicAttribute {
|
||||
my $value = shift;
|
||||
|
||||
return SCST_C_TGT_ADDATTR_FAIL
|
||||
if (!length($driver) || !defined($target) ||
|
||||
!defined($attribute) || !defined($value));
|
||||
if (!valid($driver, $target, $attribute) || !defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
|
||||
@@ -1279,8 +1288,7 @@ sub removeTargetDynamicAttribute {
|
||||
my $value = shift;
|
||||
|
||||
return SCST_C_TGT_REMATTR_FAIL
|
||||
if (!defined($driver) || !defined($target) ||
|
||||
!defined($attribute) || !defined($value));
|
||||
if (!valid($driver, $target, $attribute) || !defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
|
||||
@@ -1389,7 +1397,7 @@ sub groupExists {
|
||||
my $target = shift;
|
||||
my $group = shift;
|
||||
|
||||
return FALSE if (!defined($driver) || !defined($target) || !defined($group));
|
||||
return FALSE if (!valid($driver, $target, $group));
|
||||
|
||||
my ($groups, $errorString) = $self->groups($driver, $target);
|
||||
|
||||
@@ -1415,8 +1423,7 @@ sub initiatorExists {
|
||||
my $group = shift;
|
||||
my $initiator = shift;
|
||||
|
||||
return FALSE if (!defined($driver) || !defined($target) ||
|
||||
!defined($group) || !defined($initiator));
|
||||
return FALSE if (!valid($driver, $target, $group, $initiator));
|
||||
|
||||
my ($initiators, $errorString) = $self->initiators($driver, $target, $group);
|
||||
|
||||
@@ -1442,8 +1449,7 @@ sub lunExists {
|
||||
my $lun = shift;
|
||||
my $group = shift;
|
||||
|
||||
return FALSE if (!defined($driver) || !defined($target) ||
|
||||
!defined($lun));
|
||||
return FALSE if (!valid($driver, $target, $lun));
|
||||
|
||||
my ($luns, $errorString) = $self->luns($driver, $target, $group);
|
||||
|
||||
@@ -1477,8 +1483,7 @@ sub addGroup {
|
||||
my $target = shift;
|
||||
my $group = shift;
|
||||
|
||||
return SCST_C_GRP_ADD_FAIL if (!length($driver) || !length($target) ||
|
||||
!length($group));
|
||||
return SCST_C_GRP_ADD_FAIL if (!valid($driver, $target, $group));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -1518,8 +1523,7 @@ sub removeGroup {
|
||||
my $target = shift;
|
||||
my $group = shift;
|
||||
|
||||
return SCST_C_GRP_REM_FAIL if (!length($driver) || !length($target) ||
|
||||
!length($group));
|
||||
return SCST_C_GRP_REM_FAIL if (!valid($driver, $target, $group));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -1557,7 +1561,7 @@ sub addDeviceGroup {
|
||||
my $self = shift;
|
||||
my $group = shift;
|
||||
|
||||
return SCST_C_DEV_GRP_ADD_FAIL if (!defined($group));
|
||||
return SCST_C_DEV_GRP_ADD_FAIL if (!valid($group));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO);
|
||||
@@ -1584,7 +1588,7 @@ sub removeDeviceGroup {
|
||||
my $self = shift;
|
||||
my $group = shift;
|
||||
|
||||
return SCST_C_DEV_GRP_REM_FAIL if (!defined($group));
|
||||
return SCST_C_DEV_GRP_REM_FAIL if (!valid($group));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO);
|
||||
@@ -1616,7 +1620,7 @@ sub addDeviceGroupDevice {
|
||||
my $dgroups;
|
||||
my $errorString;
|
||||
|
||||
return SCST_C_DGRP_ADD_DEV_FAIL if (!length($group) || !length($device));
|
||||
return SCST_C_DGRP_ADD_DEV_FAIL if (!valid($group, $device));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
|
||||
@@ -1666,7 +1670,7 @@ sub addTargetGroup {
|
||||
my $group = shift;
|
||||
my $tgroup = shift;
|
||||
|
||||
return SCST_C_DGRP_ADD_GRP_FAIL if (!length($group) || !length($tgroup));
|
||||
return SCST_C_DGRP_ADD_GRP_FAIL if (!valid($group, $tgroup));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
|
||||
@@ -1701,7 +1705,7 @@ sub addTargetGroupTarget {
|
||||
my $tgt = shift;
|
||||
|
||||
return SCST_C_TGRP_ADD_TGT_FAIL
|
||||
if (!length($group) || !length($tgroup) || !length($tgt));
|
||||
if (!valid($group, $tgroup, $tgt));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
|
||||
@@ -1737,7 +1741,7 @@ sub removeDeviceGroupDevice {
|
||||
my $group = shift;
|
||||
my $device = shift;
|
||||
|
||||
return SCST_C_DGRP_REM_DEV_FAIL if (!length($group) || !length($device));
|
||||
return SCST_C_DGRP_REM_DEV_FAIL if (!valid($group, $device));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
|
||||
@@ -1776,7 +1780,7 @@ sub removeTargetGroup {
|
||||
my $group = shift;
|
||||
my $tgroup = shift;
|
||||
|
||||
return SCST_C_DGRP_REM_GRP_FAIL if (!length($group) || !length($tgroup));
|
||||
return SCST_C_DGRP_REM_GRP_FAIL if (!valid($group, $tgroup));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
|
||||
@@ -1812,7 +1816,7 @@ sub removeTargetGroupTarget {
|
||||
my $tgroup = shift;
|
||||
my $tgt = shift;
|
||||
|
||||
return SCST_C_TGRP_REM_TGT_FAIL if (!length($group) || !length($tgroup) || !length($tgt));
|
||||
return SCST_C_TGRP_REM_TGT_FAIL if (!valid($group, $tgroup, $tgt));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
|
||||
@@ -1854,8 +1858,7 @@ sub addInitiator {
|
||||
my $initiator = shift;
|
||||
|
||||
return SCST_C_GRP_ADD_INI_FAIL
|
||||
if (!length($driver) || !length($target) ||
|
||||
!length($group) || !length($initiator));
|
||||
if (!valid($driver, $target, $group, $initiator));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -1874,9 +1877,8 @@ sub addInitiator {
|
||||
return FALSE if ($self->{'debug'} || $bytes > 0);
|
||||
}
|
||||
|
||||
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) ||
|
||||
!length($target) ||
|
||||
!length($initiator));
|
||||
return SCST_C_GRP_REM_INI_FAIL
|
||||
if (!valid($driver, $target, $initiator));
|
||||
|
||||
my $rc = $self->driverExists($driver);
|
||||
return SCST_C_DRV_NO_DRIVER if (!$rc);
|
||||
@@ -1904,7 +1906,8 @@ sub removeInitiator {
|
||||
my $group = shift;
|
||||
my $initiator = shift;
|
||||
|
||||
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || !length($target) || !length($group) || !length($initiator));
|
||||
return SCST_C_GRP_REM_INI_FAIL
|
||||
if (!valid($driver, $target, $group, $initiator));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -2041,12 +2044,10 @@ sub addLun {
|
||||
my $attributes = shift;
|
||||
my $group = shift;
|
||||
|
||||
my $err = length($group) ? SCST_C_GRP_ADD_LUN_FAIL :
|
||||
my $err = valid($group) ? SCST_C_GRP_ADD_LUN_FAIL :
|
||||
SCST_C_TGT_ADD_LUN_FAIL;
|
||||
|
||||
return $err if (!length($driver) || !length($target) ||
|
||||
!length($device) || !length($lun) ||
|
||||
!length($attributes));
|
||||
return $err if (!valid($driver, $target, $device, $lun, $attributes));
|
||||
|
||||
my $o_string = "";
|
||||
foreach my $attribute (keys %{$attributes}) {
|
||||
@@ -2057,7 +2058,7 @@ sub addLun {
|
||||
$o_string =~ s/\s$//;
|
||||
|
||||
my ($path, $cmd);
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO);
|
||||
} else {
|
||||
@@ -2079,14 +2080,14 @@ sub addLun {
|
||||
return FALSE if ($self->{'debug'} || $bytes > 0);
|
||||
}
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
my $rc = $self->groupExists($driver, $target, $group);
|
||||
return SCST_C_GRP_NO_GROUP if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
}
|
||||
|
||||
my $rc = $self->lunExists($driver, $target, $lun, $group);
|
||||
return (length($group) ? SCST_C_GRP_LUN_EXISTS :
|
||||
return (valid($group) ? SCST_C_GRP_LUN_EXISTS :
|
||||
SCST_C_TGT_LUN_EXISTS) if ($rc == TRUE);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
@@ -2116,14 +2117,13 @@ sub removeLun {
|
||||
my $lun = shift;
|
||||
my $group = shift;
|
||||
|
||||
my $err = length($group) ? SCST_C_GRP_REM_LUN_FAIL :
|
||||
my $err = valid($group) ? SCST_C_GRP_REM_LUN_FAIL :
|
||||
SCST_C_TGT_ADD_LUN_FAIL;
|
||||
|
||||
return $err if (!length($driver) || !length($target) ||
|
||||
!length($lun));
|
||||
return $err if (!valid($driver, $target, $lun));
|
||||
|
||||
my ($path, $cmd);
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS,
|
||||
SCST_MGMT_IO);
|
||||
@@ -2153,15 +2153,15 @@ sub removeLun {
|
||||
return SCST_C_TGT_NO_TARGET if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$rc = $self->groupExists($driver, $target, $group);
|
||||
return SCST_C_GRP_NO_GROUP if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
}
|
||||
|
||||
$rc = $self->lunExists($driver, $target, $lun, $group);
|
||||
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
|
||||
if (!$rc);
|
||||
return (valid($group) ? SCST_C_GRP_NO_LUN :
|
||||
SCST_C_TGT_NO_LUN) if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
return $err;
|
||||
@@ -2178,7 +2178,7 @@ sub replaceLun {
|
||||
|
||||
my $err;
|
||||
|
||||
return TRUE if (!length($lun));
|
||||
return TRUE if (!valid($lun));
|
||||
|
||||
my $rc = $self->driverExists($driver);
|
||||
return SCST_C_DRV_NO_DRIVER if (!$rc);
|
||||
@@ -2188,7 +2188,7 @@ sub replaceLun {
|
||||
return SCST_C_TGT_NO_TARGET if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$rc = $self->groupExists($driver, $target, $group);
|
||||
return SCST_C_GRP_NO_GROUP if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
@@ -2248,13 +2248,13 @@ sub clearLuns {
|
||||
my $target = shift;
|
||||
my $group = shift;
|
||||
|
||||
my $err = length($group) ? SCST_C_GRP_CLR_LUN_FAIL :
|
||||
my $err = valid($group) ? SCST_C_GRP_CLR_LUN_FAIL :
|
||||
SCST_C_TGT_CLR_LUN_FAIL;
|
||||
|
||||
return $err if (!length($driver) || !length($target));
|
||||
return $err if (!valid($driver, $target));
|
||||
|
||||
my ($path, $cmd);
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS,
|
||||
SCST_MGMT_IO);
|
||||
@@ -2284,7 +2284,7 @@ sub clearLuns {
|
||||
return SCST_C_TGT_NO_TARGET if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$rc = $self->groupExists($driver, $target, $group);
|
||||
return SCST_C_GRP_NO_GROUP if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
@@ -2297,7 +2297,7 @@ sub deviceHandler {
|
||||
my $self = shift;
|
||||
my $device = shift;
|
||||
|
||||
return undef if (!length($device));
|
||||
return undef if (!valid($device));
|
||||
|
||||
my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device,
|
||||
'handler'));
|
||||
@@ -2311,7 +2311,7 @@ sub devices {
|
||||
my @devices;
|
||||
|
||||
my $dHandle = new IO::Handle;
|
||||
my $_path = !length($handler) ? SCST_DEVICES_DIR() :
|
||||
my $_path = !valid($handler) ? SCST_DEVICES_DIR() :
|
||||
make_path(SCST_HANDLERS_DIR(), $handler);
|
||||
if (!(opendir $dHandle, $_path)) {
|
||||
return (undef, "devices(): Unable to read directory '$_path': $!");
|
||||
@@ -2321,7 +2321,7 @@ sub devices {
|
||||
next if ($device eq '.' || $device eq '..');
|
||||
|
||||
my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device));
|
||||
if ($isdev && (!length($handler) ||
|
||||
if ($isdev && (!valid($handler) ||
|
||||
$handler eq $self->deviceHandler($device))) {
|
||||
push @devices, $device;
|
||||
}
|
||||
@@ -2336,11 +2336,11 @@ sub deviceOpen {
|
||||
my $self = shift;
|
||||
my $device = shift;
|
||||
|
||||
return FALSE if (!length($device));
|
||||
return FALSE if (!valid($device));
|
||||
|
||||
my ($devices, $errorString) = $self->devices();
|
||||
|
||||
return SCST_C_FATAL_ERROR if (!length($devices));
|
||||
return SCST_C_FATAL_ERROR if (!valid($devices));
|
||||
|
||||
foreach my $_device (@{$devices}) {
|
||||
return TRUE if ($device eq $_device);
|
||||
@@ -2592,7 +2592,7 @@ sub setDriverAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my $path = make_path(SCST_TARGETS_DIR(), $driver, $attribute);
|
||||
|
||||
@@ -2625,7 +2625,7 @@ sub targetAttributes {
|
||||
my %attributes = ( );
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver) || !length($target));
|
||||
return (undef, "Too few arguments") if (!valid($driver, $target));
|
||||
|
||||
my $pHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target);
|
||||
@@ -2729,8 +2729,8 @@ sub setTargetAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($driver) || !length($target) ||
|
||||
!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($driver, $target, $attribute) ||
|
||||
!defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute);
|
||||
@@ -2856,7 +2856,7 @@ sub setGroupAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
@@ -2904,7 +2904,7 @@ sub lunAttributes {
|
||||
|
||||
my ($_path, $luncrattr);
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS, $lun);
|
||||
($luncrattr, $errorString) =
|
||||
@@ -2921,7 +2921,8 @@ sub lunAttributes {
|
||||
$errorString = "lunAttributes(): Driver '$driver' is not available";
|
||||
} elsif ($self->targetExists($driver, $target) != TRUE) {
|
||||
$errorString = "lunAttributes(): Target '$target' is not available";
|
||||
} elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
|
||||
} elsif (valid($group) &&
|
||||
$self->groupExists($driver, $target, $group) != TRUE) {
|
||||
$errorString = "lunAttributes(): Group '$group' does not exist";
|
||||
} elsif ($self->lunExists($driver, $target, $lun, $group) != TRUE) {
|
||||
$errorString = "lunAttributes(): LUN '$lun' does not exist";
|
||||
@@ -3008,12 +3009,11 @@ sub setLunAttribute {
|
||||
my $group = shift;
|
||||
|
||||
return SCST_C_LUN_SETATTR_FAIL
|
||||
if (!length($driver) || !length($target) || !length($lun) ||
|
||||
!length($attribute) || !defined($value));
|
||||
if (!valid($driver, $target, $lun, $attribute) || !defined($value));
|
||||
|
||||
my $path;
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS, $lun,
|
||||
$attribute);
|
||||
@@ -3043,15 +3043,15 @@ sub setLunAttribute {
|
||||
return SCST_C_TGT_NO_TARGET if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$rc = $self->groupExists($driver, $target, $group);
|
||||
return SCST_C_GRP_NO_GROUP if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
}
|
||||
|
||||
$rc = $self->lunExists($driver, $target, $lun, $group);
|
||||
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
|
||||
if (!$rc);
|
||||
return (valid($group) ? SCST_C_GRP_NO_LUN :
|
||||
SCST_C_TGT_NO_LUN) if (!$rc);
|
||||
return $rc if ($rc > 1);
|
||||
|
||||
my ($attributes, $errorString) = $self->lunAttributes($driver, $target, $lun, $group);
|
||||
@@ -3160,7 +3160,7 @@ sub setInitiatorAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
|
||||
$group, SCST_LUNS, $initiator, $attribute);
|
||||
@@ -3448,7 +3448,7 @@ sub setAluaAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my $bytes = - ENOENT;
|
||||
my $path = make_path(SCST_DEV_GROUP_DIR(), $attribute);
|
||||
@@ -3475,7 +3475,7 @@ sub setDeviceGroupAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my $bytes = - ENOENT;
|
||||
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, $attribute);
|
||||
@@ -3507,8 +3507,7 @@ sub setTargetGroupAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($group) || !length($tgroup) ||
|
||||
!length($attribute) || !defined($value));
|
||||
return TRUE if !valid($group, $tgroup, $attribute) || !defined($value);
|
||||
|
||||
my $bytes = - ENOENT;
|
||||
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup, $attribute);
|
||||
@@ -3545,8 +3544,7 @@ sub setTargetGroupTargetAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($group) || !length($tgroup) ||
|
||||
!length($tgt) || !length($attribute) ||
|
||||
return TRUE if (!valid($group, $tgroup, $tgt, $attribute) ||
|
||||
!defined($value));
|
||||
|
||||
my $bytes = - ENOENT;
|
||||
@@ -3610,7 +3608,7 @@ sub handlerExists {
|
||||
my $self = shift;
|
||||
my $handler = shift;
|
||||
|
||||
return FALSE if (!length($handler));
|
||||
return FALSE if (!valid($handler));
|
||||
|
||||
my ($handlers, $errorString) = $self->handlers();
|
||||
|
||||
@@ -3629,7 +3627,7 @@ sub setHandlerAttribute {
|
||||
my $attribute = shift;
|
||||
my $value = shift;
|
||||
|
||||
return TRUE if (!length($attribute) || !defined($value));
|
||||
return TRUE if (!valid($attribute) || !defined($value));
|
||||
|
||||
my $bytes = - ENOENT;
|
||||
my $path = make_path(SCST_HANDLERS_DIR(), $handler, $attribute);
|
||||
@@ -3861,7 +3859,7 @@ sub deviceCreateAttributes {
|
||||
my %attributes = ( );
|
||||
my $errorString;
|
||||
|
||||
return (undef, "missing handler argument") if (!length($handler));
|
||||
return (undef, "missing handler argument") if (!valid($handler));
|
||||
|
||||
my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler,
|
||||
SCST_MGMT_IO), O_RDONLY;
|
||||
@@ -3903,7 +3901,7 @@ sub openDevice {
|
||||
my $attributes = shift;
|
||||
|
||||
return SCST_C_DEV_OPEN_FAIL
|
||||
if (!length($handler) || !length($device) || !length($attributes));
|
||||
if (!valid($handler, $device, $attributes));
|
||||
|
||||
my $o_string = "";
|
||||
foreach my $attribute (keys %{$attributes}) {
|
||||
@@ -3953,7 +3951,7 @@ sub closeDevice {
|
||||
my $handler = shift;
|
||||
my $device = shift;
|
||||
|
||||
return SCST_C_DEV_CLOSE_FAIL if (!length($handler) || !length($device));
|
||||
return SCST_C_DEV_CLOSE_FAIL if (!valid($handler, $device));
|
||||
|
||||
my ($path, $cmd);
|
||||
$path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO);
|
||||
@@ -4237,7 +4235,7 @@ sub lunCreateAttributes {
|
||||
|
||||
my $_path;
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
SCST_GROUPS, $group, SCST_LUNS,
|
||||
SCST_MGMT_IO);
|
||||
@@ -4255,7 +4253,8 @@ sub lunCreateAttributes {
|
||||
} elsif ($self->targetExists($driver, $target) != TRUE) {
|
||||
$errorString = "lunCreateAttributes(): Target '$target' ".
|
||||
"is not available";
|
||||
} elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
|
||||
} elsif (valid($group) &&
|
||||
$self->groupExists($driver, $target, $group) != TRUE) {
|
||||
$errorString = "lunCreateAttributes(): Group '$group' ".
|
||||
"does not exist";
|
||||
} else {
|
||||
@@ -4382,7 +4381,7 @@ sub sessions {
|
||||
my %_sessions;
|
||||
my $errorString;
|
||||
|
||||
return (undef, "Too few arguments") if (!length($driver) || !length($target));
|
||||
return (undef, "Too few arguments") if (!valid($driver, $target));
|
||||
|
||||
my $sHandle = new IO::Handle;
|
||||
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
|
||||
@@ -4636,7 +4635,7 @@ sub make_path {
|
||||
if ($path && rindex($path, '/') != length($path) - 1) {
|
||||
$path .= '/';
|
||||
}
|
||||
cluck("make_path: invalid argument") if !length($element);
|
||||
cluck("make_path: invalid argument") if !valid($element);
|
||||
$path .= $element;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ sub testDriverDynAttr {
|
||||
|
||||
ok($SCST->addDriverDynamicAttribute(), $SCST->SCST_C_DRV_ADDATTR_FAIL);
|
||||
ok($SCST->addDriverDynamicAttribute('no-such-driver', '', ''),
|
||||
$SCST->SCST_C_DRV_NO_DRIVER);
|
||||
$SCST->SCST_C_DRV_ADDATTR_FAIL);
|
||||
ok($SCST->addDriverDynamicAttribute('iscsi', 'no-such-attribute', ''),
|
||||
$SCST->SCST_C_DRV_BAD_ATTRIBUTES);
|
||||
ok($SCST->addDriverDynamicAttribute('iscsi', 'IncomingUser',
|
||||
@@ -71,7 +71,7 @@ sub testDriverDynAttr {
|
||||
'static' => 0 }));
|
||||
ok($SCST->removeDriverDynamicAttribute(), $SCST->SCST_C_DRV_REMATTR_FAIL);
|
||||
ok($SCST->removeDriverDynamicAttribute('no-such-driver', '', ''),
|
||||
$SCST->SCST_C_DRV_NO_DRIVER);
|
||||
$SCST->SCST_C_DRV_REMATTR_FAIL);
|
||||
ok($SCST->removeDriverDynamicAttribute('iscsi', 'no-such-attribute', ''),
|
||||
$SCST->SCST_C_DRV_BAD_ATTRIBUTES);
|
||||
ok($SCST->removeDriverDynamicAttribute('iscsi', 'IncomingUser',
|
||||
@@ -113,9 +113,9 @@ sub testTargetDynAttr {
|
||||
|
||||
ok($SCST->addTargetDynamicAttribute(), $SCST->SCST_C_TGT_ADDATTR_FAIL);
|
||||
ok($SCST->addTargetDynamicAttribute('no-such-driver', '', '', ''),
|
||||
$SCST->SCST_C_DRV_NO_DRIVER);
|
||||
$SCST->SCST_C_TGT_ADDATTR_FAIL);
|
||||
ok($SCST->addTargetDynamicAttribute('iscsi', 'no-such-target', '', ''),
|
||||
$SCST->SCST_C_TGT_NO_TARGET);
|
||||
$SCST->SCST_C_TGT_ADDATTR_FAIL);
|
||||
ok($SCST->addTargetDynamicAttribute('iscsi', 'tgt1', 'no-such-attribute',
|
||||
'', ''),
|
||||
$SCST->SCST_C_TGT_BAD_ATTRIBUTES);
|
||||
@@ -130,9 +130,9 @@ sub testTargetDynAttr {
|
||||
'static' => 0 }));
|
||||
ok($SCST->removeTargetDynamicAttribute(), $SCST->SCST_C_TGT_REMATTR_FAIL);
|
||||
ok($SCST->removeTargetDynamicAttribute('no-such-driver', '', '', ''),
|
||||
$SCST->SCST_C_DRV_NO_DRIVER);
|
||||
$SCST->SCST_C_TGT_REMATTR_FAIL);
|
||||
ok($SCST->removeTargetDynamicAttribute('iscsi', 'no-such-target', '', ''),
|
||||
$SCST->SCST_C_TGT_NO_TARGET);
|
||||
$SCST->SCST_C_TGT_REMATTR_FAIL);
|
||||
ok($SCST->removeTargetDynamicAttribute('iscsi', 'tgt1', 'no-such-attribute',
|
||||
''),
|
||||
$SCST->SCST_C_TGT_BAD_ATTRIBUTES);
|
||||
|
||||
@@ -1464,6 +1464,12 @@ sub readWorkingConfig {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
# Older Perl versions complain if the argument of length() is undefined. Hence
|
||||
# this function that checks whether its arguments are defined and not empty.
|
||||
sub valid {
|
||||
return $SCST->valid(@_);
|
||||
}
|
||||
|
||||
# Escape metacharacters (space, backslash and hash sign).
|
||||
sub escapeMeta {
|
||||
my $value = shift;
|
||||
@@ -3079,7 +3085,7 @@ sub listHandler {
|
||||
my $handler = shift;
|
||||
my %toprint;
|
||||
|
||||
my $got_handler = defined($handler);
|
||||
my $got_handler = valid($handler);
|
||||
my ($handlers, $errorString) = $SCST->handlers();
|
||||
|
||||
my $l_device = 0;
|
||||
@@ -3142,7 +3148,7 @@ sub listDevices {
|
||||
my $device = shift;
|
||||
my $nonkey = shift;
|
||||
|
||||
return listDevice($device, $nonkey) if (length($device));
|
||||
return listDevice($device, $nonkey) if (valid($device));
|
||||
return listHandler();
|
||||
}
|
||||
|
||||
@@ -3166,7 +3172,7 @@ sub listDeviceGroups {
|
||||
my $group = shift;
|
||||
my $showall = shift;
|
||||
|
||||
return listDeviceGroup($group) if (length($group));
|
||||
return listDeviceGroup($group) if (valid($group));
|
||||
|
||||
my ($groups, $errorString) = $SCST->deviceGroups();
|
||||
|
||||
@@ -3245,8 +3251,8 @@ sub listTargetGroups {
|
||||
my $tgroup = shift;
|
||||
my $indent = shift;
|
||||
|
||||
return listDeviceGroups(undef, TRUE) if (!length($group));
|
||||
return listTargetGroup($group, $tgroup) if (length($tgroup));
|
||||
return listDeviceGroups(undef, TRUE) if (!valid($group));
|
||||
return listTargetGroup($group, $tgroup) if (valid($tgroup));
|
||||
|
||||
my ($tgroups, $errorString) = $SCST->targetGroups($group);
|
||||
|
||||
@@ -3334,7 +3340,7 @@ sub listDeviceGroupDevices {
|
||||
sub listDrivers {
|
||||
my $driver = shift;
|
||||
|
||||
return listTargets($driver, undef) if (length($driver));
|
||||
return listTargets($driver, undef) if (valid($driver));
|
||||
|
||||
my ($drivers, $errorString) = $SCST->drivers();
|
||||
|
||||
@@ -3362,10 +3368,9 @@ sub listTargets {
|
||||
my $target = shift;
|
||||
my %toprint;
|
||||
|
||||
return listGroups($driver, $target, undef)
|
||||
if (length($target) and length($driver));
|
||||
return listGroups($driver, $target, undef) if (valid($target, $driver));
|
||||
|
||||
my $got_driver = !!length($driver);
|
||||
my $got_driver = valid($driver);
|
||||
|
||||
my ($drivers, $errorString) = $SCST->drivers();
|
||||
|
||||
@@ -3472,7 +3477,7 @@ sub listGroup {
|
||||
my $errorString;
|
||||
|
||||
($luns, $errorString) = $SCST->luns($driver, $target, $group) if (!$luns);
|
||||
if (!length($initiators) && length($group)) {
|
||||
if (!valid($initiators) && valid($group)) {
|
||||
($initiators, $errorString) = $SCST->initiators($driver, $target, $group);
|
||||
return TRUE if issueWarning($errorString);
|
||||
}
|
||||
@@ -3507,7 +3512,7 @@ sub listGroup {
|
||||
print "\t(none)\n";
|
||||
}
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
print "\nAssigned Initiators:\n\n";
|
||||
|
||||
if ($#{$initiators} > -1) {
|
||||
@@ -3526,7 +3531,7 @@ sub listGroup {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
print "Group '$group' has no associated LUNs or initiators.\n";
|
||||
} else {
|
||||
print "Driver/target '$driver/$target' has no associated LUNs.\n";
|
||||
@@ -3542,7 +3547,7 @@ sub listGroups {
|
||||
my $group = shift;
|
||||
my $found = FALSE;
|
||||
|
||||
if (length($group) and length($driver) and length($target)) {
|
||||
if (valid($group, $driver, $target)) {
|
||||
return listGroup($driver, $target, $group);
|
||||
}
|
||||
|
||||
@@ -3951,7 +3956,7 @@ sub listLunAttributes {
|
||||
return TRUE if issueWarning($errorString);
|
||||
|
||||
if (!scalar(keys %{$attributes})) {
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
print "No such driver/target/group/lun '$driver/$target/$group/$lun' found.\n";
|
||||
} else {
|
||||
print "No such driver/target/lun '$driver/$target/$lun' found.\n";
|
||||
@@ -5163,7 +5168,7 @@ sub addLun {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (length($group)) {
|
||||
if (valid($group)) {
|
||||
print "\t-> Adding device '$device' at LUN $lun to driver/target/group ".
|
||||
"'$driver/$target/$group': ";
|
||||
} else {
|
||||
@@ -5354,7 +5359,7 @@ sub issueLip {
|
||||
my $warn = shift;
|
||||
my $errorString;
|
||||
|
||||
if (length($driver) && length($target)) {
|
||||
if (valid($driver, $target)) {
|
||||
return _issueLip($driver, $target, $warn);
|
||||
} else {
|
||||
my $drivers;
|
||||
|
||||
Reference in New Issue
Block a user