69 lines
1.5 KiB
Diff
69 lines
1.5 KiB
Diff
|
--- 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;
|
|||
|
|