From 91a5a9072f82cef110535917a4601f14ddd9fa31 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 9 Oct 2015 02:16:02 +0200 Subject: improved sanity checks for dropbox params 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; } -- cgit v0.10.2