scstadmin: Use length($var) to test whether an argument has been specified

This patch fixes a bug by making it again possible to use "0" as e.g. the
name of an SCST device group. See also commit 858f50e4d3 ("scstadmin:
Improve robustness").

Reported-by: Pavel Klevtsov


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9152 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2020-09-13 03:20:47 +00:00
parent a3266ca8f2
commit 8d3c1cf3a2
2 changed files with 112 additions and 106 deletions
@@ -477,7 +477,7 @@ sub setScstAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_ROOT_DIR(), $attribute);
@@ -523,7 +523,7 @@ sub targets {
my $self = shift;
my $driver = shift;
return (undef, "Too few arguments") if (!defined($driver));
return (undef, "Too few arguments") if (!length($driver));
my $tHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver);
@@ -558,7 +558,7 @@ sub groups {
my $driver = shift;
my $target = shift;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target));
return (undef, "Too few arguments") if (!length($driver) || !length($target));
my $gHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
@@ -599,8 +599,8 @@ sub initiators {
my @initiators;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target) ||
!defined($group));
return (undef, "Too few arguments")
if (!length($driver) || !length($target) || !length($group));
my $iHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -637,11 +637,11 @@ sub luns {
my $group = shift;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target));
return (undef, "Too few arguments") if (!length($driver) || !length($target));
my $_path;
if (defined($group)) {
if (length($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS);
} else {
@@ -652,7 +652,7 @@ sub luns {
my $lHandle = new IO::Handle;
if (!(opendir $lHandle, $_path)) {
if (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) {
if (length($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";
@@ -780,7 +780,7 @@ sub deviceGroupDevices {
my @devices;
my $errorString;
return (undef, "Too few arguments") if (!defined($group));
return (undef, "Too few arguments") if (!length($group));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES);
@@ -812,7 +812,7 @@ sub targetGroups {
my @tgroups;
my $errorString;
return (undef, "Too few arguments") if (!defined($group));
return (undef, "Too few arguments") if (!length($group));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS);
@@ -845,7 +845,7 @@ sub targetGroupTargets {
my @targets;
my $errorString;
return (undef, "Too few arguments") if (!defined($group) || !defined($tgroup));
return (undef, "Too few arguments") if (!length($group) || !length($tgroup));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup);
@@ -881,7 +881,7 @@ sub driverExists {
my $dHandle = new IO::Handle;
my $result;
$result = defined($driver) &&
$result = length($driver) &&
opendir($dHandle, make_path(SCST_TARGETS_DIR(), $driver));
close $dHandle if ($result);
@@ -895,7 +895,7 @@ sub driverDynamicAttributes {
my $available;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver));
return (undef, "Too few arguments") if (!length($driver));
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
SCST_MGMT_IO), O_RDONLY;
@@ -935,6 +935,8 @@ sub checkDriverDynamicAttributes {
my $driver = shift;
my $check = shift;
return TRUE if (!length($driver));
my ($available, $errorString) = $self->driverDynamicAttributes($driver);
if (!defined($available)) {
@@ -969,7 +971,7 @@ sub addDriverDynamicAttribute {
my $value = shift;
return SCST_C_DRV_ADDATTR_FAIL
if (!defined($driver) || !defined($attribute) || !defined($value));
if (!length($driver) || !defined($attribute) || !defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1007,7 +1009,7 @@ sub removeDriverDynamicAttribute {
my $value = shift;
return SCST_C_DRV_REMATTR_FAIL
if (!defined($driver) || !defined($attribute) || !defined($value));
if (!length($driver) || !defined($attribute) || !defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1043,7 +1045,7 @@ sub targetExists {
my $driver = shift;
my $target = shift;
return defined($driver) && defined($target) &&
return length($driver) && length($target) &&
$target ne '.' && $target ne '..' && $target ne 'module' &&
(-d make_path(SCST_TARGETS_DIR(), $driver, $target)) ? TRUE : FALSE;
}
@@ -1061,7 +1063,7 @@ sub targetType {
my $target = shift;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target));
return (undef, "Too few arguments") if (!length($driver) || !length($target));
if ($self->driverIsVirtualCapable($driver)) {
my $attribs;
@@ -1138,7 +1140,7 @@ sub targetDynamicAttributes {
my $available;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver));
return (undef, "Too few arguments") if (!length($driver));
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
SCST_MGMT_IO), O_RDONLY;
@@ -1213,7 +1215,7 @@ sub addTargetDynamicAttribute {
my $value = shift;
return SCST_C_TGT_ADDATTR_FAIL
if (!defined($driver) || !defined($target) ||
if (!length($driver) || !defined($target) ||
!defined($attribute) || !defined($value));
my ($path, $cmd);
@@ -1455,8 +1457,8 @@ sub addGroup {
my $target = shift;
my $group = shift;
return SCST_C_GRP_ADD_FAIL if (!defined($driver) || !defined($target) ||
!defined($group));
return SCST_C_GRP_ADD_FAIL if (!length($driver) || !length($target) ||
!length($group));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1496,8 +1498,8 @@ sub removeGroup {
my $target = shift;
my $group = shift;
return SCST_C_GRP_REM_FAIL if (!defined($driver) || !defined($target) ||
!defined($group));
return SCST_C_GRP_REM_FAIL if (!length($driver) || !length($target) ||
!length($group));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1594,7 +1596,7 @@ sub addDeviceGroupDevice {
my $dgroups;
my $errorString;
return SCST_C_DGRP_ADD_DEV_FAIL if (!defined($group) || !defined($device));
return SCST_C_DGRP_ADD_DEV_FAIL if (!length($group) || !length($device));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
@@ -1644,8 +1646,7 @@ sub addTargetGroup {
my $group = shift;
my $tgroup = shift;
return SCST_C_DGRP_ADD_GRP_FAIL if (!defined($group) ||
!defined($tgroup));
return SCST_C_DGRP_ADD_GRP_FAIL if (!length($group) || !length($tgroup));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1679,9 +1680,8 @@ sub addTargetGroupTarget {
my $tgroup = shift;
my $tgt = shift;
return SCST_C_TGRP_ADD_TGT_FAIL if (!defined($group) ||
!defined($tgroup) ||
!defined($tgt));
return SCST_C_TGRP_ADD_TGT_FAIL
if (!length($group) || !length($tgroup) || !length($tgt));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1717,7 +1717,7 @@ sub removeDeviceGroupDevice {
my $group = shift;
my $device = shift;
return SCST_C_DGRP_REM_DEV_FAIL if (!defined($group) || !defined($device));
return SCST_C_DGRP_REM_DEV_FAIL if (!length($group) || !length($device));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
@@ -1756,7 +1756,7 @@ sub removeTargetGroup {
my $group = shift;
my $tgroup = shift;
return SCST_C_DGRP_REM_GRP_FAIL if (!defined($group) || !defined($tgroup));
return SCST_C_DGRP_REM_GRP_FAIL if (!length($group) || !length($tgroup));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1792,7 +1792,7 @@ sub removeTargetGroupTarget {
my $tgroup = shift;
my $tgt = shift;
return SCST_C_TGRP_REM_TGT_FAIL if (!defined($group) || !defined($tgroup) || !defined($tgt));
return SCST_C_TGRP_REM_TGT_FAIL if (!length($group) || !length($tgroup) || !length($tgt));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1834,8 +1834,8 @@ sub addInitiator {
my $initiator = shift;
return SCST_C_GRP_ADD_INI_FAIL
if (!defined($driver) || !defined($target) ||
!defined($group) || !defined($initiator));
if (!length($driver) || !length($target) ||
!length($group) || !length($initiator));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1854,9 +1854,9 @@ sub addInitiator {
return FALSE if ($self->{'debug'} || $bytes > 0);
}
return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) ||
!defined($target) ||
!defined($initiator));
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) ||
!length($target) ||
!length($initiator));
my $rc = $self->driverExists($driver);
return SCST_C_DRV_NO_DRIVER if (!$rc);
@@ -1884,7 +1884,7 @@ sub removeInitiator {
my $group = shift;
my $initiator = shift;
return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || !defined($target) || !defined($group) || !defined($initiator));
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || !length($target) || !length($group) || !length($initiator));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -2021,12 +2021,12 @@ sub addLun {
my $attributes = shift;
my $group = shift;
my $err = defined($group) ? SCST_C_GRP_ADD_LUN_FAIL :
my $err = length($group) ? SCST_C_GRP_ADD_LUN_FAIL :
SCST_C_TGT_ADD_LUN_FAIL;
return $err if (!defined($driver) || !defined($target) ||
!defined($device) || !defined($lun) ||
!defined($attributes));
return $err if (!length($driver) || !length($target) ||
!length($device) || !length($lun) ||
!length($attributes));
my $o_string = "";
foreach my $attribute (keys %{$attributes}) {
@@ -2037,7 +2037,7 @@ sub addLun {
$o_string =~ s/\s$//;
my ($path, $cmd);
if (defined($group)) {
if (length($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO);
} else {
@@ -2059,14 +2059,14 @@ sub addLun {
return FALSE if ($self->{'debug'} || $bytes > 0);
}
if (defined($group)) {
if (length($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 (defined($group) ? SCST_C_GRP_LUN_EXISTS :
return (length($group) ? SCST_C_GRP_LUN_EXISTS :
SCST_C_TGT_LUN_EXISTS) if ($rc == TRUE);
return $rc if ($rc > 1);
@@ -2096,14 +2096,14 @@ sub removeLun {
my $lun = shift;
my $group = shift;
my $err = defined($group) ? SCST_C_GRP_REM_LUN_FAIL :
my $err = length($group) ? SCST_C_GRP_REM_LUN_FAIL :
SCST_C_TGT_ADD_LUN_FAIL;
return $err if (!defined($driver) || !defined($target) ||
!defined($lun));
return $err if (!length($driver) || !length($target) ||
!length($lun));
my ($path, $cmd);
if (defined($group)) {
if (length($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -2133,14 +2133,14 @@ sub removeLun {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (defined($group)) {
if (length($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 (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
if (!$rc);
return $rc if ($rc > 1);
@@ -2158,7 +2158,7 @@ sub replaceLun {
my $err;
return TRUE if (!defined($lun));
return TRUE if (!length($lun));
my $rc = $self->driverExists($driver);
return SCST_C_DRV_NO_DRIVER if (!$rc);
@@ -2168,7 +2168,7 @@ sub replaceLun {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (defined($group)) {
if (length($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
@@ -2228,13 +2228,13 @@ sub clearLuns {
my $target = shift;
my $group = shift;
my $err = defined($group) ? SCST_C_GRP_CLR_LUN_FAIL :
my $err = length($group) ? SCST_C_GRP_CLR_LUN_FAIL :
SCST_C_TGT_CLR_LUN_FAIL;
return $err if (!defined($driver) || !defined($target));
return $err if (!length($driver) || !length($target));
my ($path, $cmd);
if (defined($group)) {
if (length($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -2264,7 +2264,7 @@ sub clearLuns {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (defined($group)) {
if (length($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
@@ -2277,6 +2277,8 @@ sub deviceHandler {
my $self = shift;
my $device = shift;
return undef if (!length($device));
my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device,
'handler'));
$handler =~ s/.*\///;
@@ -2289,7 +2291,7 @@ sub devices {
my @devices;
my $dHandle = new IO::Handle;
my $_path = !defined($handler) ? SCST_DEVICES_DIR() :
my $_path = !length($handler) ? SCST_DEVICES_DIR() :
make_path(SCST_HANDLERS_DIR(), $handler);
if (!(opendir $dHandle, $_path)) {
return (undef, "devices(): Unable to read directory '$_path': $!");
@@ -2299,7 +2301,7 @@ sub devices {
next if ($device eq '.' || $device eq '..');
my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device));
if ($isdev && (!defined($handler) ||
if ($isdev && (!length($handler) ||
$handler eq $self->deviceHandler($device))) {
push @devices, $device;
}
@@ -2314,11 +2316,11 @@ sub deviceOpen {
my $self = shift;
my $device = shift;
return FALSE if (!defined($device));
return FALSE if (!length($device));
my ($devices, $errorString) = $self->devices();
return SCST_C_FATAL_ERROR if (!defined($devices));
return SCST_C_FATAL_ERROR if (!length($devices));
foreach my $_device (@{$devices}) {
return TRUE if ($device eq $_device);
@@ -2570,7 +2572,7 @@ sub setDriverAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $path = make_path(SCST_TARGETS_DIR(), $driver, $attribute);
@@ -2601,7 +2603,7 @@ sub targetAttributes {
my %attributes = ( );
my $errorString;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target));
return (undef, "Too few arguments") if (!length($driver) || !length($target));
my $pHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target);
@@ -2705,7 +2707,8 @@ sub setTargetAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($driver) || !length($target) ||
!length($attribute) || !length($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute);
@@ -2830,7 +2833,7 @@ sub setGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -2876,7 +2879,7 @@ sub lunAttributes {
my ($_path, $luncrattr);
if (defined($group)) {
if (length($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, $lun);
($luncrattr, $errorString) =
@@ -2893,7 +2896,7 @@ sub lunAttributes {
$errorString = "lunAttributes(): Driver '$driver' is not available";
} elsif ($self->targetExists($driver, $target) != TRUE) {
$errorString = "lunAttributes(): Target '$target' is not available";
} elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) {
} elsif (length($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";
@@ -2980,12 +2983,12 @@ sub setLunAttribute {
my $group = shift;
return SCST_C_LUN_SETATTR_FAIL
if (!defined($driver) || !defined($target) || !defined($lun) ||
!defined($attribute) || !defined($value));
if (!length($driver) || !length($target) || !length($lun) ||
!length($attribute) || !length($value));
my $path;
if (defined($group)) {
if (length($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, $lun,
$attribute);
@@ -3014,14 +3017,14 @@ sub setLunAttribute {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (defined($group)) {
if (length($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 (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
if (!$rc);
return $rc if ($rc > 1);
@@ -3131,7 +3134,7 @@ sub setInitiatorAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
$group, SCST_LUNS, $initiator, $attribute);
@@ -3418,7 +3421,7 @@ sub setAluaAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $attribute);
@@ -3443,7 +3446,7 @@ sub setDeviceGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, $attribute);
@@ -3473,8 +3476,8 @@ sub setTargetGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($group) || !defined($tgroup) ||
!defined($attribute) || !defined($value));
return TRUE if (!length($group) || !length($tgroup) ||
!length($attribute) || !length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup, $attribute);
@@ -3509,9 +3512,9 @@ sub setTargetGroupTargetAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($group) || !defined($tgroup) ||
!defined($tgt) || !defined($attribute) ||
!defined($value));
return TRUE if (!length($group) || !length($tgroup) ||
!length($tgt) || !length($attribute) ||
!length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -3572,7 +3575,7 @@ sub handlerExists {
my $self = shift;
my $handler = shift;
return FALSE if (!defined($handler));
return FALSE if (!length($handler));
my ($handlers, $errorString) = $self->handlers();
@@ -3591,7 +3594,7 @@ sub setHandlerAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!defined($attribute) || !defined($value));
return TRUE if (!length($attribute) || !length($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_HANDLERS_DIR(), $handler, $attribute);
@@ -3821,6 +3824,8 @@ sub deviceCreateAttributes {
my %attributes = ( );
my $errorString;
return (undef, "missing handler argument") if (!length($handler));
my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler,
SCST_MGMT_IO), O_RDONLY;
@@ -3860,9 +3865,8 @@ sub openDevice {
my $device = shift;
my $attributes = shift;
return SCST_C_DEV_OPEN_FAIL if (!defined($handler) ||
!defined($device) ||
!defined($attributes));
return SCST_C_DEV_OPEN_FAIL
if (!length($handler) || !length($device) || !length($attributes));
my $o_string = "";
foreach my $attribute (keys %{$attributes}) {
@@ -3912,8 +3916,7 @@ sub closeDevice {
my $handler = shift;
my $device = shift;
return SCST_C_DEV_CLOSE_FAIL if (!defined($handler) ||
!defined($device));
return SCST_C_DEV_CLOSE_FAIL if (!length($handler) || !length($device));
my ($path, $cmd);
$path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO);
@@ -4196,7 +4199,7 @@ sub lunCreateAttributes {
my $_path;
if (defined($group)) {
if (length($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -4214,7 +4217,7 @@ sub lunCreateAttributes {
} elsif ($self->targetExists($driver, $target) != TRUE) {
$errorString = "lunCreateAttributes(): Target '$target' ".
"is not available";
} elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) {
} elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
$errorString = "lunCreateAttributes(): Group '$group' ".
"does not exist";
} else {
@@ -4341,7 +4344,7 @@ sub sessions {
my %_sessions;
my $errorString;
return (undef, "Too few arguments") if (!defined($driver) || !defined($target));
return (undef, "Too few arguments") if (!length($driver) || !length($target));
my $sHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
+19 -16
View File
@@ -1497,7 +1497,8 @@ sub serializeKeyAttr {
foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) {
my $value =
$$attributes{$attribute}->{'keys'}->{$key}->{'value'};
push (@values, $value) if ($value);
# $value = undef means that the attribute is write-only.
push (@values, $value) if (defined($value));
}
foreach my $value (sort @values) {
$result .= "$prefix$attribute " . escapeMeta($value) . "\n";
@@ -1532,7 +1533,8 @@ sub serializeNkAttr {
&& $attribute ne 'enabled'
&& $attribute ne 'hw_target') {
my $value = $$attributes{$attribute}->{'value'};
if ($value) {
# $value = undef means that the attribute is write-only.
if (defined($value)) {
$result .= "$prefix$attribute " . escapeMeta($value) . "\n";
}
}
@@ -3140,7 +3142,7 @@ sub listDevices {
my $device = shift;
my $nonkey = shift;
return listDevice($device, $nonkey) if ($device);
return listDevice($device, $nonkey) if (length($device));
return listHandler();
}
@@ -3164,7 +3166,7 @@ sub listDeviceGroups {
my $group = shift;
my $showall = shift;
return listDeviceGroup($group) if ($group);
return listDeviceGroup($group) if (length($group));
my ($groups, $errorString) = $SCST->deviceGroups();
@@ -3243,8 +3245,8 @@ sub listTargetGroups {
my $tgroup = shift;
my $indent = shift;
return listDeviceGroups(undef, TRUE) if ($group eq '');
return listTargetGroup($group, $tgroup) if ($tgroup);
return listDeviceGroups(undef, TRUE) if (!length($group));
return listTargetGroup($group, $tgroup) if (length($tgroup));
my ($tgroups, $errorString) = $SCST->targetGroups($group);
@@ -3332,7 +3334,7 @@ sub listDeviceGroupDevices {
sub listDrivers {
my $driver = shift;
return listTargets($driver, undef) if ($driver);
return listTargets($driver, undef) if (length($driver));
my ($drivers, $errorString) = $SCST->drivers();
@@ -3360,9 +3362,10 @@ sub listTargets {
my $target = shift;
my %toprint;
return listGroups($driver, $target, undef) if ($target and $driver);
return listGroups($driver, $target, undef)
if (length($target) and length($driver));
my $got_driver = defined($driver);
my $got_driver = !!length($driver);
my ($drivers, $errorString) = $SCST->drivers();
@@ -3469,7 +3472,7 @@ sub listGroup {
my $errorString;
($luns, $errorString) = $SCST->luns($driver, $target, $group) if (!$luns);
if (!defined($initiators) && defined($group)) {
if (!length($initiators) && length($group)) {
($initiators, $errorString) = $SCST->initiators($driver, $target, $group);
return TRUE if issueWarning($errorString);
}
@@ -3504,7 +3507,7 @@ sub listGroup {
print "\t(none)\n";
}
if (defined($group)) {
if (length($group)) {
print "\nAssigned Initiators:\n\n";
if ($#{$initiators} > -1) {
@@ -3523,7 +3526,7 @@ sub listGroup {
}
}
} else {
if (defined($group)) {
if (length($group)) {
print "Group '$group' has no associated LUNs or initiators.\n";
} else {
print "Driver/target '$driver/$target' has no associated LUNs.\n";
@@ -3539,7 +3542,7 @@ sub listGroups {
my $group = shift;
my $found = FALSE;
if ($group and $driver and $target) {
if (length($group) and length($driver) and length($target)) {
return listGroup($driver, $target, $group);
}
@@ -3948,7 +3951,7 @@ sub listLunAttributes {
return TRUE if issueWarning($errorString);
if (!scalar(keys %{$attributes})) {
if ($group) {
if (length($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";
@@ -5160,7 +5163,7 @@ sub addLun {
return FALSE;
}
if (defined($group)) {
if (length($group)) {
print "\t-> Adding device '$device' at LUN $lun to driver/target/group ".
"'$driver/$target/$group': ";
} else {
@@ -5351,7 +5354,7 @@ sub issueLip {
my $warn = shift;
my $errorString;
if (defined($driver) && defined($target)) {
if (length($driver) && length($target)) {
return _issueLip($driver, $target, $warn);
} else {
my $drivers;