From 5fd83771641d15c418f747bd343ba6738d3875f7 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 9 May 2021 14:20:58 -0400 Subject: Import macOS userland adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106 --- diskdev_cmds/fuser.tproj/fuser.pl | 92 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100755 diskdev_cmds/fuser.tproj/fuser.pl (limited to 'diskdev_cmds/fuser.tproj/fuser.pl') diff --git a/diskdev_cmds/fuser.tproj/fuser.pl b/diskdev_cmds/fuser.tproj/fuser.pl new file mode 100755 index 0000000..0784bfb --- /dev/null +++ b/diskdev_cmds/fuser.tproj/fuser.pl @@ -0,0 +1,92 @@ +#!/usr/bin/perl -w +## +# Copyright (c) 2005 Apple Computer, Inc. All rights reserved. +# +# @APPLE_LICENSE_HEADER_START@ +# +# This file contains Original Code and/or Modifications of Original Code +# as defined in and that are subject to the Apple Public Source License +# Version 2.0 (the 'License'). You may not use this file except in +# compliance with the License. Please obtain a copy of the License at +# http://www.opensource.apple.com/apsl/ and read it before using this +# file. +# +# The Original Code and all software distributed under the License are +# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, +# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +# Please see the License for the specific language governing rights and +# limitations under the License. +# +# @APPLE_LICENSE_HEADER_END@ +## + +use strict; +use Getopt::Long qw(GetOptions); + +sub usage { + print "fuser: [-cfu] file ...\n", + "\t-c\tfile is treated as mount point\n", + "\t-f\tthe report is only for the named files\n", + "\t-u\tprint username of pid in parenthesis\n"; +} + +Getopt::Long::config('bundling'); +my %o; +unless (GetOptions(\%o, qw(c f u)) && scalar (@ARGV) > 0) { + usage(); + exit(1); +} + +use IO::Handle; +STDERR->autoflush(1); +STDOUT->autoflush(1); + +my $exit_value = 0; + +my $space = ""; +while (scalar (@ARGV)) { + my $file = shift @ARGV; + if (-e $file) { + my @command; + push(@command, q(/usr/sbin/lsof)); + push(@command, q(-F)); + if ($o{u}) { # Add user name + push(@command, q(pfL)); + } else { + push(@command, q(pf)); + } + push(@command, q(-f)) if ($o{f}); + push(@command, q(--)); + push(@command, $file); + # This cryptic statement will cause exec(@command) to run in the child, + # with the output set up correctl and LSOF's input set up correctly. + open (LSOF, "-|") or exec(@command); + my @results = ; + chomp(@results); + # fuser man page is very explicit about stdout/stderr output + print STDERR $file, qq(: ); + my $username = ""; + foreach (@results) { + if (/^p(\d+)$/) { + if ($username) { + print STDERR $username; + $username = ""; + } + print $space, $1; + $space = q( ); + } + if (/^f(c|r)[wt]d$/) { + print STDERR "$1" . $username; + $username = ""; + } + $username = "(" . $1 . ")" if (/^L(.+)$/); + } + print STDERR $username . qq(\n); + } else { + print STDERR "$0: '$file' does not exist\n"; + $exit_value = 1; + } +} +exit($exit_value); -- cgit v1.2.3-56-ge451