File: tftp.monitor

package info (click to toggle)
mon-contrib 1.0%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 892 kB
  • sloc: perl: 5,510; sh: 383; python: 118; makefile: 72
file content (109 lines) | stat: -rwxr-xr-x 3,177 bytes parent folder | download | duplicates (3)
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;