]> arthur.barton.de Git - netatalk.git/commitdiff
patched by Joe Clarke for FreeBSD compatibility
authorrufustfirefly <rufustfirefly>
Tue, 15 May 2001 13:35:53 +0000 (13:35 +0000)
committerrufustfirefly <rufustfirefly>
Tue, 15 May 2001 13:35:53 +0000 (13:35 +0000)
contrib/macusers/macusers

index 8870beebc8634aa2718b881b1a20e3446f1e62a5..e0adbd96483d9487710265c765151a6eed935eed 100755 (executable)
@@ -1,53 +1,73 @@
-#! /usr/bin/perl
-# $Id: macusers,v 1.2 2001-05-07 12:49:19 rufustfirefly Exp $
+#!/usr/bin/perl
+
+use strict;
+use vars qw($MAC_PROCESS $PS_STR $MATCH_STR $ASIP_PORT $LSOF);
 
 # Written for linux; may have to be modified for your brand of Unix.
 
-$MAC_PROCESS="afpd";
-$PS_STR="-ef";
-$ASIP_PORT="afpovertcp";
+# Support for FreeBSD added by Joe Clarke <marcus@marcuscom.com>.
+# Support could probably be extended for *BSD, but I do not have Net or
+# OpenBSD machines to test with.  Code has also been cleaned up and made
+# to compile under strict.
+#
+# The new lsof call should also be quicker as it does not involve a 
+# second pipeline.
+#
+# Support has also been added for 16 character usernames.
+
+$MAC_PROCESS = "afpd";
+if ( $^O eq "freebsd" ) {
+        $PS_STR    = "-awwxouser,pid,ppid,start,command";
+        $MATCH_STR = '(\w+)\s+(\d+)\s+(\d+)\s+([\d\w:]+)';
+}
+else {
+        $PS_STR    = "-ef";
+        $MATCH_STR = '\s*(\w+)\s+(\d+)\s+(\d+)\s+\d+\s+([\d\w:]+)';
+}
+$ASIP_PORT = "afpovertcp";
 
 # Change to 0 if you don't have lsof
-$LSOF=1;
-
-if ($LSOF == 1 )
-{
-  open(LSOF,"lsof -i | grep $ASIP_PORT |");
-
-  while(<LSOF>)
-  {
-    if ($_ !~ /$ASIP_PORT/)
-    {
-      next;
-    }
-    $_=~/\w+\s+(\d+).*->([\w-]+).*/;
-    $pid=$1; $host=$2;
-    $mac{$pid}=$host;
-  }
-
-  close(LSOF);
-  print "PID      UID      Usercode Name                 Logintime Mac\n";
+$LSOF = 1;
+my %mac = ();
+
+if ( $LSOF == 1 ) {
+        open( LSOF, "lsof -i :$ASIP_PORT |" );
+
+        while (<LSOF>) {
+                next if ( $_ !~ /$ASIP_PORT/ );
+                $_ =~ /\w+\s+(\d+).*->([\w\.-]+).*/;
+                my ( $pid, $host );
+                $pid = $1;
+                $host = $2;
+                ($host) = ( $host =~ /(^[\w\d\-]+)/ );
+                $mac{$pid} = $host;
+        }
+
+        close(LSOF);
+        print
+"PID      UID      Username         Name                 Logintime Mac\n";
 }
-else
-{
-  print "PID      UID      Usercode Name                 Logintime\n";
+else {
+        print
+          "PID      UID      Username         Name                 Logintime\n";
 }
 
-open(PS," ps $PS_STR |") || die "cannot do ps";
-
-while(<PS>)
-{
-  if ($_ !~ /$MAC_PROCESS/ )
-  {
-    next;
-  }
-  $_=~ /\s*(\w+)\s+(\d+)\s+(\d+)\s+\d+\s+([\d\w:]+)/;
-  $user=$1; $pid=$2; $ppid=$3; $time=$4;
-  if ($ppid != 1)
-  {
-    ($t,$t,$uid,$t,$t,$t,$name,$t,$t)=getpwnam($user);
-    printf "%-8d %-8d %-8s %-20s %-9s %s\n",$pid,$uid,$user,$name,$time,$mac{$pid};
-  }
+open( PS, "ps $PS_STR |" ) || die "Unable to open a pipe to ``ps''";
+
+while (<PS>) {
+        next if ( $_ !~ /$MAC_PROCESS/ );
+        my ( $user, $pid, $ppid, $time, $name, $uid, $t );
+        $_ =~ /$MATCH_STR/;
+        $user = $1;
+        $pid  = $2;
+        $ppid = $3;
+        $time = $4;
+
+        if ( $ppid != 1 ) {
+                ( $t, $t, $uid, $t, $t, $t, $name, $t, $t ) = getpwnam($user);
+                printf "%-8d %-8d %-16s %-20s %-9s %s\n", $pid, $uid, $user,
+                  $name, $time, $mac{$pid};
+        }
 }
 
-close(PS);  
+close(PS);