summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2015-10-09 00:16:02 (GMT)
committerChristian Pointner <equinox@spreadspace.org>2015-10-09 00:16:02 (GMT)
commit91a5a9072f82cef110535917a4601f14ddd9fa31 (patch)
treea6be492d2d84382c4a61ac2309dc92cf20255f28
parente10c9d729f9c7c9bf342e0053dc53988d4e26ff2 (diff)
improved sanity checks for dropbox params
-rwxr-xr-xlib/RHRD/rddb.pm19
-rwxr-xr-xlib/RHRD/utils.pm58
-rwxr-xr-xutils/rhrd-sanity-check27
-rwxr-xr-xutils/rhrd-show22
4 files changed, 104 insertions, 22 deletions
diff --git a/lib/RHRD/rddb.pm b/lib/RHRD/rddb.pm
index 5bbc645..07e0f86 100755
--- a/lib/RHRD/rddb.pm
+++ b/lib/RHRD/rddb.pm
@@ -25,6 +25,7 @@ package RHRD::rddb;
use strict;
use Config::IniFiles;
use DBI;
+use RHRD::utils;
########################### constants ###########################
@@ -854,7 +855,7 @@ sub get_dropboxes
$entry->{'NORMLEVEL'} = int $normlevel;
$entry->{'TRIMLEVEL'} = int $trimlevel;
$entry->{'PARAM'} = $params;
- if($p[0] eq "S") {
+ if(defined($p[0]) && $p[0] eq "S") {
$entry->{'TYPE'} = 'show';
$entry->{'SHOWID'} = $to_cart;
@@ -866,17 +867,21 @@ sub get_dropboxes
$entry->{'SHOWLOG'} = $log;
$entry->{'SHOWRHYTHM'} = $p[1];
- $entry->{'SHOWDOW'} = int $p[2];
- $entry->{'SHOWDOW'} = 0 unless $entry->{'SHOWDOW'} < 7;
- substr($p[3], 2, 0) = ':';
+ $entry->{'SHOWRHYTHM'} = '????' unless((RHRD::utils::dropbox_param_rhythm_ok($entry->{'SHOWRHYTHM'}))[0]);
+ $entry->{'SHOWDOW'} = $p[2];
+ $entry->{'SHOWDOW'} = 0 unless((RHRD::utils::dropbox_param_dow_ok($entry->{'SHOWDOW'}))[0]);
$entry->{'SHOWSTARTTIME'} = $p[3];
- $entry->{'SHOWLEN'} = int $p[4];
- } elsif($p[0] eq "J") {
+ $entry->{'SHOWSTARTTIME'} = '????' unless((RHRD::utils::dropbox_param_starttime_ok($entry->{'SHOWSTARTTIME'}))[0]);
+ $entry->{'SHOWLEN'} = $p[4];
+ $entry->{'SHOWLEN'} = 0 unless((RHRD::utils::dropbox_param_len_ok($entry->{'SHOWLEN'}))[0]);
+ } elsif(defined($p[0]) && $p[0] eq "J") {
$entry->{'TYPE'} = 'jingle';
$entry->{'JINGLETITLE'} = $groupdesc;
- } elsif($p[0] eq "M") {
+ } elsif(defined($p[0]) && $p[0] eq "M") {
$entry->{'TYPE'} = 'musicpool';
$entry->{'MUSICPOOLTITLE'} = $groupdesc;
+ } else {
+ $entry->{'TYPE'} = 'unknown';
}
push @allowed_dbs, $entry;
diff --git a/lib/RHRD/utils.pm b/lib/RHRD/utils.pm
index 083f657..81e5f86 100755
--- a/lib/RHRD/utils.pm
+++ b/lib/RHRD/utils.pm
@@ -54,4 +54,62 @@ sub get_rd_week
return $week;
}
+use constant {
+ DB_PARAM_TYPE_HINT => "only S, M and J are allowed with S -> Show, M -> Musicpool, J -> Jingles",
+ DB_PARAM_RHYTHM_HINT => "only 0 or 1 are allowed, length must be exactly 4 and it must not be '0000'",
+ DB_PARAM_DOW_HINT => "must be between 1 and 7 (1=Monday, ..., 7=Sunday)",
+ DB_PARAM_STARTTIME_HINT => "must be in format HHMM (without seperator) in 24 hour format",
+ DB_PARAM_LEN_HINT => "must be a positive number below 1440",
+};
+
+sub dropbox_param_type_ok
+{
+ my ($type) = @_;
+
+ unless(defined($type) && ($type == 'S' || $type == 'M' || $type == 'J')) {
+ return (0, "unkown type '" . (defined($type) ? $type : 'undef') . "'", DB_PARAM_TYPE_HINT);
+ }
+ return (1, 'OK', DB_PARAM_TYPE_HINT);
+}
+
+sub dropbox_param_rhythm_ok
+{
+ my ($rhythm) = @_;
+
+ if(!defined($rhythm) || $rhythm !~ m/^[01]{4}$/ || $rhythm eq '0000') {
+ return (0, "rhythm '" . (defined($rhythm) ? $rhythm : 'undef') . "' contains illegal characters or is too long/short", DB_PARAM_RHYTHM_HINT);
+ }
+ return (1, 'OK', DB_PARAM_RHYTHM_HINT);
+}
+
+sub dropbox_param_dow_ok
+{
+ my ($dow) = @_;
+
+ if(!defined($dow) || $dow < 1 || $dow > 7) {
+ return (0, "dow '" . (defined($dow) ? $dow : 'undef') . "' is out of bounds", DB_PARAM_DOW_HINT);
+ }
+ return (1, 'OK', DB_PARAM_DOW_HINT);
+}
+
+sub dropbox_param_starttime_ok
+{
+ my ($starttime) = @_;
+
+ if(!defined($starttime) || $starttime !~ m/^[0-2][0-9][0-5][0-9]$/ || $starttime > 2359) {
+ return (0, "starttime '" . (defined($starttime) ? $starttime : 'undef') . "' is not a valid clock time", DB_PARAM_STARTTIME_HINT);
+ }
+ return (1, 'OK', DB_PARAM_STARTTIME_HINT);
+}
+
+sub dropbox_param_len_ok
+{
+ my ($len) = @_;
+
+ if(!defined($len) || $len <= 0 || $len > 1440) {
+ return (0, "len '" . (defined($len) ? $len : 'undef') . "' is out of bounds", DB_PARAM_LEN_HINT);
+ }
+ return (1, 'OK', DB_PARAM_LEN_HINT);
+}
+
return 1;
diff --git a/utils/rhrd-sanity-check b/utils/rhrd-sanity-check
index 9dc5c43..93d933e 100755
--- a/utils/rhrd-sanity-check
+++ b/utils/rhrd-sanity-check
@@ -262,7 +262,20 @@ sub check_groups
}
-sub check_logs
+sub check_dropboxes
+{
+ my ($ctx) = @_;
+
+ my $errors = 0;
+ print "dropboxes:\n";
+
+ print "\n " . $errors . " errors found\n";
+
+ return $errors;
+}
+
+
+sub check_showids
{
my ($ctx) = @_;
@@ -276,12 +289,12 @@ sub check_logs
}
-sub check_dropboxes
+sub check_logs
{
my ($ctx) = @_;
- my $errors = 0;
- print "dropboxes:\n";
+ my $errors = 0,
+ print "logs:\n";
print " ... checks not yet implemtned!!\n";
print "\n " . $errors . " errors found\n";
@@ -294,9 +307,11 @@ my ($ctx, $status, $errorstring) = RHRD::rddb::init();
if(defined $ctx) {
check_groups($ctx);
print "\n";
- check_logs($ctx);
- print "\n";
check_dropboxes($ctx);
+ print "\n";
+ check_showids($ctx);
+ print "\n";
+ check_logs($ctx);
RHRD::rddb::destroy($ctx);
} else {
diff --git a/utils/rhrd-show b/utils/rhrd-show
index 3431450..7cb8422 100755
--- a/utils/rhrd-show
+++ b/utils/rhrd-show
@@ -23,6 +23,7 @@
use strict;
use lib "../lib/";
use RHRD::rddb;
+use RHRD::utils;
# this is ridiculous but makes it a little harder to create/remove users...
# if ($> != 0 ) {
@@ -90,24 +91,27 @@ sub add__check_arguments
return 1;
}
- if($rhythm !~ m/^[01]{4}$/ || $rhythm eq '0000') {
- print STDERR "rhythm '" . $rhythm . "' contains illegal characters or is too long/short\n";
- print STDERR " only 0 or 1 are allowed and, length must be exactly 4 and it must not be '0000'\n";
+ my ($result, $err, $hint) = RHRD::utils::dropbox_param_rhythm_ok($rhythm);
+ unless($result) {
+ print STDERR $err . "\n " . $hint . "\n";
return 1;
}
- if($dow < 1 || $dow > 7) {
- print STDERR "dow '" . $dow . "' is out of range, must be between 1 and 7 (1=Monday, ..., 7=Sunday)\n";
+ ($result, $err, $hint) = RHRD::utils::dropbox_param_dow_ok($dow);
+ unless($result) {
+ print STDERR $err . "\n " . $hint . "\n";
return 1;
}
- if($starttime !~ m/^[0-2][0-9][0-5][0-9]$/ || $starttime > 2359) {
- print STDERR "starttime '" . $starttime . "' is not a valid time must be HHMM\n";
+ ($result, $err, $hint) = RHRD::utils::dropbox_param_starttime_ok($starttime);
+ unless($result) {
+ print STDERR $err . "\n " . $hint . "\n";
return 1;
}
- if($len <= 0) {
- print STDERR "len '" . $len . "' must be > 0\n";
+ ($result, $err, $hint) = RHRD::utils::dropbox_param_len_ok($len);
+ unless($result) {
+ print STDERR $err . "\n " . $hint . "\n";
return 1;
}