1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#!/usr/bin/perl -w
#
# This TFTP test script will attempt to fetch a file from a tftp server,
# and will verify it receives a non-empty file.
#
# Requires Net::TFTP
#
# Arguments: '-f filename hostname [...]'
#
# Author: David Nolan, Carnegie Mellon University, Computing Services
# Contact: net-dev@andrew.cmu.edu
#
# Copyright (c) 2002 Carnegie Mellon University. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. The name "Carnegie Mellon University" must not be used to endorse or
# promote products derived from this software without prior written
# permission. For permission or any legal details, please contact:
# Office of Technology Transfer
# Carnegie Mellon University
# 5000 Forbes Avenue
# Pittsburgh, PA 15213-3890
# (412) 268-4387, fax: (412) 268-7395
# tech-transfer@andrew.cmu.edu
#
# 4. Redistributions of any form whatsoever must retain the following
# acknowledgment: "This product includes software developed by Computing
# Services at Carnegie Mellon University (http://www.cmu.edu/computing/)."
#
# CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
# IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR ANY SPECIAL,
# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
use Net::TFTP;
use Getopt::Std;
getopt('f');
if (!defined $opt_f) {
print "\nNo file to fetch, aborting.\n";
exit 0;
}
foreach $host (@ARGV) {
eval {
if (-f "/var/lib/mon/tftp.$$") {
unlink "/var/lib/mon/tftp.$$";
}
my $tftp = Net::TFTP->new($host, BlockSize => 1024);
$tftp->ascii;
$tftp->get($opt_f, "/var/lib/mon/tftp.$$");
my $err = $tftp->error;
if ($err) {
push @failures, $host;
push @longerr, "$host: TFTP error $err";
} else {
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat("/var/lib/mon/tftp.$$");
if (!$size) {
push @failures, $host;
push @longerr, "$host: Zero length file received";
}
}
};
if ($EVAL_ERROR && ($EVAL_ERROR =~ /Timeout/ )) {
push @failures, $host;
push @longerr, "$host: Request timed out.";
} elsif ($EVAL_ERROR) {
push @longerr, "$host: $EVAL_ERROR";
push @failures, $host;
}
}
if (-f "/var/lib/mon/tftp.$$") {
unlink "/var/lib/mon/tftp.$$";
}
if (!@failures) {
exit 0;
}
print join(" ", @failures),"\n";
print join("\n", @longerr), "\n";
exit scalar @failures;
|