psacct/psacct-6.3.2-strictmatch.patch

69 lines
1.5 KiB
Diff
Raw Normal View History

--- acct-6.3.2/lastcomm.c.strictmatch 2005-02-01 17:01:54.000000000 -0500
+++ acct-6.3.2/lastcomm.c 2005-02-02 00:06:41.000000000 -0500
@@ -43,7 +43,9 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
#include <pwd.h>
#include "common.h"
@@ -80,7 +82,7 @@
/* protos */
-void main PARAMS((int, char *[]));
+int main PARAMS((int, char *[]));
void give_usage PARAMS((void));
void parse_entries PARAMS((void));
char *devname PARAMS((long));
@@ -90,7 +92,7 @@
/* code */
-void
+int
main (int argc, char *argv[])
{
int c;
@@ -349,12 +351,30 @@
{
/* All categories must have one match. */
- if (all_list
- && hashtab_find (all_list, uid, 0) == NULL
- && hashtab_find (all_list, dev, 0) == NULL
- && hashtab_find (all_list, comm, COMM_LEN) == NULL)
- return 0;
-
+ if (all_list)
+ {
+ struct hashtab_order ho;
+ struct hashtab_elem* he;
+ char *key;
+ int haveall = 1;
+
+ /* walk the all_list hash */
+ he = hashtab_first( all_list, &ho );
+ if( he == NULL ) return 0; /* empty hash??? */
+ while (haveall && he)
+ {
+ key = (char *) hashtab_get_key(he);
+ /* every element must match at least one of {uid,dev,comm}
+ * our parameters
+ */
+ haveall &= !strcmp( key, uid ) || !strcmp( key, dev )
+ || !strncmp( key, comm, COMM_LEN );
+
+ he = hashtab_next( &ho );
+ }
+ return haveall;
+ }
+
if (tty_list && hashtab_find (tty_list, dev, 0) == NULL)
return 0;