mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
0ae75b0423
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org>
70 lines
1.9 KiB
Perl
70 lines
1.9 KiB
Perl
#! /usr/bin/env perl
|
|
#
|
|
#@(#) smb-wall.pl Description:
|
|
#@(#) A perl script which allows you to announce whatever you choose to
|
|
#@(#) every PC client currently connected to a Samba Server...
|
|
#@(#) ...using "smbclient -M" message to winpopup service.
|
|
#@(#) Default usage is to message every connected PC.
|
|
#@(#) Alternate usage is to message every pc on the argument list.
|
|
#@(#) Hacked up by Keith Farrar <farrar@parc.xerox.com>
|
|
#
|
|
# Cleanup and corrections by
|
|
# Michal Jaegermann <michal@ellpspace.math.ualberta.ca>
|
|
# Message to send can be now also fed (quietly) from stdin; a pipe will do.
|
|
#=============================================================================
|
|
|
|
$smbstatus = "/usr/local/bin/smbstatus";
|
|
$smbshout = "/usr/local/bin/smbclient -M";
|
|
|
|
if (@ARGV) {
|
|
@clients = @ARGV;
|
|
undef @ARGV;
|
|
}
|
|
else { # no clients specified explicitly
|
|
open(PCLIST, "$smbstatus |") || die "$smbstatus failed!.\n$!\n";
|
|
while(<PCLIST>) {
|
|
last if /^Locked files:/;
|
|
split(' ', $_, 6);
|
|
# do not accept this line if less then six fields
|
|
next unless $_[5];
|
|
# if you have A LOT of clients you may speed things up by
|
|
# checking pid - no need to look further if this pid was already
|
|
# seen; left as an exercise :-)
|
|
$client = $_[4];
|
|
next unless $client =~ /^\w+\./; # expect 'dot' in a client name
|
|
next if grep($_ eq $client, @clients); # we want this name once
|
|
push(@clients, $client);
|
|
}
|
|
close(PCLIST);
|
|
}
|
|
|
|
if (-t) {
|
|
print <<'EOT';
|
|
|
|
Enter message for Samba clients of this host
|
|
(terminated with single '.' or end of file):
|
|
EOT
|
|
|
|
while (<>) {
|
|
last if /^\.$/;
|
|
push(@message, $_);
|
|
}
|
|
}
|
|
else { # keep quiet and read message from stdin
|
|
@message = <>;
|
|
}
|
|
|
|
foreach(@clients) {
|
|
## print "To $_:\n";
|
|
if (open(SENDMSG,"|$smbshout $_")) {
|
|
print SENDMSG @message;
|
|
close(SENDMSG);
|
|
}
|
|
else {
|
|
warn "Cannot notify $_ with $smbshout:\n$!\n";
|
|
}
|
|
}
|
|
|
|
exit 0;
|
|
|