show locked files for -u <user>; bug 590
authorGerald Carter <jerry@samba.org>
Wed, 12 Nov 2003 22:37:09 +0000 (22:37 +0000)
committerGerald Carter <jerry@samba.org>
Wed, 12 Nov 2003 22:37:09 +0000 (22:37 +0000)
source/utils/status.c

index c17e080b6bf384afc47174d12d062f97f0a4792b..54dce1ecf0f43f3bd8a00965e38919be9dda9e44 100644 (file)
 
 #include "includes.h"
 
-static pstring Ucrit_username = "";                   /* added by OH */
-static pid_t   Ucrit_pid[100];  /* Ugly !!! */        /* added by OH */
-static int            Ucrit_MaxPid=0;                        /* added by OH */
-static unsigned int   Ucrit_IsActive = 0;                    /* added by OH */
+#define SMB_MAXPIDS            2048
+static pstring                 Ucrit_username = "";               /* added by OH */
+static pid_t           Ucrit_pid[SMB_MAXPIDS];  /* Ugly !!! */   /* added by OH */
+static int             Ucrit_MaxPid=0;                    /* added by OH */
+static unsigned int    Ucrit_IsActive = 0;                /* added by OH */
+
 static int verbose, brief;
 static int            shares_only = 0;            /* Added by RJS */
 static int            locks_only  = 0;            /* Added by RJS */
@@ -49,26 +51,53 @@ static int show_brl;
 static void Ucrit_addUsername(const char *username)
 {
        pstrcpy(Ucrit_username, username);
-       if(strlen(Ucrit_username) > 0)
+       
+       if ( strlen(Ucrit_username) > 0 )
                Ucrit_IsActive = 1;
 }
 
 static unsigned int Ucrit_checkUsername(const char *username)
 {
-       if ( !Ucrit_IsActive) return 1;
-       if (strcmp(Ucrit_username,username) ==0) return 1;
+       if ( !Ucrit_IsActive ) 
+               return 1;
+       
+       if ( strcmp(Ucrit_username,username) == 0 ) 
+               return 1;
+       
        return 0;
 }
 
 static unsigned int Ucrit_checkPid(pid_t pid)
 {
        int i;
-       if ( !Ucrit_IsActive) return 1;
-       for (i=0;i<Ucrit_MaxPid;i++)
-               if( pid == Ucrit_pid[i] ) return 1;
+       
+       if ( !Ucrit_IsActive ) 
+               return 1;
+       
+       for (i=0;i<Ucrit_MaxPid;i++) {
+               if( pid == Ucrit_pid[i] ) 
+                       return 1;
+       }
+       
        return 0;
 }
 
+static BOOL Ucrit_addPid( pid_t pid )
+{
+       if ( !Ucrit_IsActive )
+               return True;
+
+       if ( Ucrit_MaxPid >= SMB_MAXPIDS ) {
+               d_printf("ERROR: More than %d pids for user %s!\n",
+                       SMB_MAXPIDS, Ucrit_username);
+
+               return False;
+       }
+
+       Ucrit_pid[Ucrit_MaxPid++] = pid;
+       
+       return True;
+}
 
 static void print_share_mode(share_mode_entry *e, char *fname)
 {
@@ -526,6 +555,8 @@ static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, vo
                return 0;
        }
 
+       Ucrit_addPid( sessionid.pid );
+
        d_printf("%5d   %-12s  %-12s  %-12s (%s)\n",
               (int)sessionid.pid, uidtoname(sessionid.uid), gidtoname(sessionid.gid), 
               sessionid.remote_machine, sessionid.hostname);