Hi Steve,
> > >   When I use "-a user,always -S open", errors will be reported. But when I
> > > use "-S open -a user,always", no errors will report. There is no
> > > corresponding codes to deal with the later format.
> >
> > I'm still thinking about this patch. I'll look at it again tomorrow.
> >
>   I modified the original patch. (I moved the judgment codes for list and 
> syscall
> in handle_request() before the line "if (add != AUDIT_FILTER_UNSET)".)
>   Then when using "-S open -a user,always" or "-S open -d user,always" will 
> report
> error to users.
>
  There is another method, that is the format of "-S xx -a list,action" and "-S
xx -a list,action " are not allowed. Only "-a list,action -S xx" and "-d 
list,action -S xx" can be allowed. The users have to add "list" before 
"syscall".

  Here is the patch for such method. Hope your opinion.

Signed-off-by: Chu Li <[EMAIL PROTECTED]>
---
diff --git a/src/auditctl.c b/src/auditctl.c
index 48f1369..0906369 100755
--- a/src/auditctl.c
+++ b/src/auditctl.c
@@ -575,53 +575,42 @@ static int setopt(int count, char *vars[])
                retval = -2;
                break;
         case 'a':
-               if (strstr(optarg, "task") && audit_syscalladded) {
+               rc = audit_rule_setup(optarg, &add, &action);
+               if (rc == 3) {
+                       fprintf(stderr,
+               "Multiple rule insert/delete operations are not allowed\n");
+                       retval = -1;
+               } else if (rc == 2) {
                        fprintf(stderr,
-                               "Syscall auditing requested for task list\n");
+                               "Append rule - bad keyword %s\n",
+                               optarg);
                        retval = -1;
-               } else {
-                       rc = audit_rule_setup(optarg, &add, &action);
-                       if (rc == 3) {
-                               fprintf(stderr,
-               "Multiple rule insert/delete operations are not allowed\n");
-                               retval = -1;
-                       } else if (rc == 2) {
-                               fprintf(stderr,
-                                       "Append rule - bad keyword %s\n",
-                                       optarg);
-                               retval = -1;
-                       } else if (rc == 1) {
-                               fprintf(stderr,
-                                   "Append rule - possible is deprecated\n");
-                               return -3; /* deprecated - eat it */
-                       } else
-                               retval = 1; /* success - please send */
+               } else if (rc == 1) {
+                       fprintf(stderr,
+                           "Append rule - possible is deprecated\n");
+                       return -3; /* deprecated - eat it */
+               } else
+                       retval = 1; /* success - please send */
                }
                break;
         case 'A':
-               if (strstr(optarg, "task") && audit_syscalladded) {
-                       fprintf(stderr,
-                          "Error: syscall auditing requested for task list\n");
+               rc = audit_rule_setup(optarg, &add, &action);
+               if (rc == 3) {
+                       fprintf(stderr,
+               "Multiple rule insert/delete operations are not allowed\n");
+                       retval = -1;
+               } else if (rc == 2) {
+                       fprintf(stderr,
+                       "Add rule - bad keyword %s\n", optarg);
                        retval = -1;
+               } else if (rc == 1) {
+                       fprintf(stderr,
+                           "Append rule - possible is deprecated\n");
+                       return -3; /* deprecated - eat it */
                } else {
-                       rc = audit_rule_setup(optarg, &add, &action);
-                       if (rc == 3) {
-                               fprintf(stderr,
-               "Multiple rule insert/delete operations are not allowed\n");
-                               retval = -1;
-                       } else if (rc == 2) {
-                               fprintf(stderr,
-                               "Add rule - bad keyword %s\n", optarg);
-                               retval = -1;
-                       } else if (rc == 1) {
-                               fprintf(stderr,
-                                   "Append rule - possible is deprecated\n");
-                               return -3; /* deprecated - eat it */
-                       } else {
-                               add |= AUDIT_FILTER_PREPEND;
-                               retval = 1; /* success - please send */
-                       }
-               }
+                       add |= AUDIT_FILTER_PREPEND;
+                       retval = 1; /* success - please send */
+               }               break;
         case 'd':
                rc = audit_rule_setup(optarg, &del, &action);
@@ -643,7 +632,12 @@ static int setopt(int count, char *vars[])
         case 'S':
                /* Do some checking to make sure that we are not adding a
                 * syscall rule to a list that does not make sense. */
-               if (((add & (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
+               if ((add == AUDIT_FILTER_UNSET || del == AUDIT_FILTER_UNSET )
+                                && !exclude){
+                       fprintf(stderr,
+                         "Error: list should be first added to rule\n");
+                       return -1;
+                } else if (((add & (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
                                AUDIT_FILTER_TASK || (del &
                                (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
                                AUDIT_FILTER_TASK)) {
@@ -1206,10 +1200,6 @@ int main(int argc, char *argv[])
 static int handle_request(int status)
 {
        if (status == 0) {
-               if (audit_syscalladded) {
-                       fprintf(stderr, "Error - no list specified\n");
-                       return -1;
-               }
                get_reply();
        } else if (status == -2)
                status = 0;  // report success

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of Chu Li
> Sent: Wednesday, August 06, 2008 3:27 PM
> To: 'Steve Grubb'
> Cc: 'linux-audit'
> Subject: RE: [Patch]Fix the bug of using "-S syscall -a list, action",no 
> errors
> will be reported.
>
> Hi Steve,
> > >   When I use "-a user,always -S open", errors will be reported. But when I
> > > use "-S open -a user,always", no errors will report. There is no
> > > corresponding codes to deal with the later format.
> >
> > I'm still thinking about this patch. I'll look at it again tomorrow.
> >
>   I modified the original patch. (I moved the judgment codes for list and 
> syscall
> in handle_request() before the line "if (add != AUDIT_FILTER_UNSET)".)
>   Then when using "-S open -a user,always" or "-S open -d user,always" will 
> report
> error to users.
>
>  And I found another problem, when using "-a 'list','action' -w /mnt", it will
> always
> add the rule "LIST_RULES: exit,always dir=/mnt (0x4) perm=rwxa". I found "-w" 
> will
> use the "exit" list automatically. I think it's better to add something about 
> it
> in
> manual.
>
>   How about your opinion?
>
> Signed-off-by: Chu Li <[EMAIL PROTECTED]>
> ---
> diff --git a/src/auditctl.c b/src/auditctl.c
> index 48f1369..f4f9553 100755
> --- a/src/auditctl.c
> +++ b/src/auditctl.c
> @@ -575,52 +575,41 @@ static int setopt(int count, char *vars[])
>               retval = -2;
>               break;
>          case 'a':
> -             if (strstr(optarg, "task") && audit_syscalladded) {
> +             rc = audit_rule_setup(optarg, &add, &action);
> +             if (rc == 3) {
> +                     fprintf(stderr,
> +             "Multiple rule insert/delete operations are not allowed\n");
> +                     retval = -1;
> +             } else if (rc == 2) {
>                       fprintf(stderr,
> -                             "Syscall auditing requested for task list\n");
> +                             "Append rule - bad keyword %s\n",
> +                             optarg);
>                       retval = -1;
> -             } else {
> -                     rc = audit_rule_setup(optarg, &add, &action);
> -                     if (rc == 3) {
> -                             fprintf(stderr,
> -             "Multiple rule insert/delete operations are not allowed\n");
> -                             retval = -1;
> -                     } else if (rc == 2) {
> -                             fprintf(stderr,
> -                                     "Append rule - bad keyword %s\n",
> -                                     optarg);
> -                             retval = -1;
> -                     } else if (rc == 1) {
> -                             fprintf(stderr,
> -                                 "Append rule - possible is deprecated\n");
> -                             return -3; /* deprecated - eat it */
> -                     } else
> -                             retval = 1; /* success - please send */
> +             } else if (rc == 1) {
> +                     fprintf(stderr,
> +                         "Append rule - possible is deprecated\n");
> +                     return -3; /* deprecated - eat it */
> +             } else
> +                     retval = 1; /* success - please send */
>               }
>               break;
>          case 'A':
> -             if (strstr(optarg, "task") && audit_syscalladded) {
> -                     fprintf(stderr,
> -                        "Error: syscall auditing requested for task list\n");
> +             rc = audit_rule_setup(optarg, &add, &action);
> +             if (rc == 3) {
> +                     fprintf(stderr,
> +             "Multiple rule insert/delete operations are not allowed\n");
>                       retval = -1;
> +             } else if (rc == 2) {
> +                     fprintf(stderr,
> +                     "Add rule - bad keyword %s\n", optarg);
> +                     retval = -1;
> +             } else if (rc == 1) {
> +                     fprintf(stderr,
> +                         "Append rule - possible is deprecated\n");
> +                     return -3; /* deprecated - eat it */
>               } else {
> -                     rc = audit_rule_setup(optarg, &add, &action);
> -                     if (rc == 3) {
> -                             fprintf(stderr,
> -             "Multiple rule insert/delete operations are not allowed\n");
> -                             retval = -1;
> -                     } else if (rc == 2) {
> -                             fprintf(stderr,
> -                             "Add rule - bad keyword %s\n", optarg);
> -                             retval = -1;
> -                     } else if (rc == 1) {
> -                             fprintf(stderr,
> -                                 "Append rule - possible is deprecated\n");
> -                             return -3; /* deprecated - eat it */
> -                     } else {
> -                             add |= AUDIT_FILTER_PREPEND;
> -                             retval = 1; /* success - please send */
> -                     }
> +                     add |= AUDIT_FILTER_PREPEND;
> +                     retval = 1; /* success - please send */
>               }
>               break;
>          case 'd':
> @@ -1215,6 +1204,27 @@ static int handle_request(int status)
>               status = 0;  // report success
>       else if (status > 0) {
>               int rc;
> +             if(audit_syscalladded == 1){
> +                     if (((add & (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
> +                             AUDIT_FILTER_TASK || (del &
> +                             (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
> +                                     AUDIT_FILTER_TASK)) {
> +                             fprintf(stderr,
> +                             "Error: syscall auditing being added to task 
> list\n");
> +                             return -1;
> +                     } else if (((add & 
> (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
> +                             AUDIT_FILTER_USER || (del &
> +                             (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
> +                             AUDIT_FILTER_USER)) {
> +                             fprintf(stderr,
> +                             "Error: syscall auditing being added to user 
> list\n");
> +                             return -1;
> +                     } else if (exclude) {
> +                             fprintf(stderr,
> +                             "Error: syscall auditing cannot be put on 
> exclude list\n");
> +                             return -1;
> +                     }
> +             }
>               if (add != AUDIT_FILTER_UNSET) {
>                       // if !task add syscall any if not specified
>                       if ((add & AUDIT_FILTER_MASK) != AUDIT_FILTER_TASK &&
>
> > -----Original Message-----
> > From: Steve Grubb [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, August 05, 2008 8:19 AM
> > To: chuli
> > Cc: 'linux-audit'
> > Subject: Re: [Patch]Fix the bug of using "-S syscall -a list,action", no 
> > errors
> > will be reported.
> >
> > Hi,
> >
> > On Wednesday 30 July 2008 21:38:26 chuli wrote:
> > >   When I use "-a user,always -S open", errors will be reported. But when I
> > > use "-S open -a user,always", no errors will report. There is no
> > > corresponding codes to deal with the later format.
> >
> > I'm still thinking about this patch. I'll look at it again tomorrow.
> >
> > Thanks,
> > -Steve
> >
> >
> > >   Here is my patch. Hope for your opinion about such modification.
> > >   (I move the code for checking "task" list to the handle_request().)
> > >
> > > Signed-off-by: Chu Li <[EMAIL PROTECTED]>
> > > ---
> > > diff --git a/src/auditctl.c b/src/auditctl.c
> > > index d740509..9cc3df0 100755
> > > --- a/src/auditctl.c
> > > +++ b/src/auditctl.c
> > > @@ -532,52 +532,40 @@ static int setopt(int count, char *vars[])
> > >           retval = -2;
> > >           break;
> > >          case 'a':
> > > -         if (strstr(optarg, "task") && audit_syscalladded) {
> > > +         rc = audit_rule_setup(optarg, &add, &action);
> > > +         if (rc == 3) {
> > > +                 fprintf(stderr,
> > > +                 "Multiple rule insert/delete operations are not 
> > > allowed\n");
> > > +                 retval = -1;
> > > +         } else if (rc == 2) {
> > >                   fprintf(stderr,
> > > -                         "Syscall auditing requested for task list\n");
> > > +                 "Append rule - bad keyword %s\n",
> > > +                 optarg);
> > >                   retval = -1;
> > > -         } else {
> > > -                 rc = audit_rule_setup(optarg, &add, &action);
> > > -                 if (rc == 3) {
> > > -                         fprintf(stderr,
> > > -         "Multiple rule insert/delete operations are not allowed\n");
> > > -                         retval = -1;
> > > -                 } else if (rc == 2) {
> > > -                         fprintf(stderr,
> > > -                                 "Append rule - bad keyword %s\n",
> > > -                                 optarg);
> > > -                         retval = -1;
> > > -                 } else if (rc == 1) {
> > > -                         fprintf(stderr,
> > > -                             "Append rule - possible is deprecated\n");
> > > -                         return -3; /* deprecated - eat it */
> > > -                 } else
> > > -                         retval = 1; /* success - please send */
> > > -         }
> > > +         } else if (rc == 1) {
> > > +                 fprintf(stderr,
> > > +                 "Append rule - possible is deprecated\n");
> > > +                 return -3; /* deprecated - eat it */
> > > +         } else
> > > +                 retval = 1; /* success - please send */
> > >           break;
> > >          case 'A':
> > > -         if (strstr(optarg, "task") && audit_syscalladded) {
> > > -                 fprintf(stderr,
> > > -                    "Error: syscall auditing requested for task list\n");
> > > +         rc = audit_rule_setup(optarg, &add, &action);
> > > +         if (rc == 3) {
> > > +                 fprintf(stderr,
> > > +                 "Multiple rule insert/delete operations are not 
> > > allowed\n");
> > >                   retval = -1;
> > > +         } else if (rc == 2) {
> > > +                 fprintf(stderr,
> > > +                 "Add rule - bad keyword %s\n", optarg);
> > > +                 retval = -1;
> > > +         } else if (rc == 1) {
> > > +                 fprintf(stderr,
> > > +                 "Append rule - possible is deprecated\n");
> > > +                 return -3; /* deprecated - eat it */
> > >           } else {
> > > -                 rc = audit_rule_setup(optarg, &add, &action);
> > > -                 if (rc == 3) {
> > > -                         fprintf(stderr,
> > > -         "Multiple rule insert/delete operations are not allowed\n");
> > > -                         retval = -1;
> > > -                 } else if (rc == 2) {
> > > -                         fprintf(stderr,
> > > -                         "Add rule - bad keyword %s\n", optarg);
> > > -                         retval = -1;
> > > -                 } else if (rc == 1) {
> > > -                         fprintf(stderr,
> > > -                             "Append rule - possible is deprecated\n");
> > > -                         return -3; /* deprecated - eat it */
> > > -                 } else {
> > > -                         add |= AUDIT_FILTER_PREPEND;
> > > -                         retval = 1; /* success - please send */
> > > -                 }
> > > +                 add |= AUDIT_FILTER_PREPEND;
> > > +                 retval = 1; /* success - please send */
> > >           }
> > >           break;
> > >          case 'd':
> > > @@ -1167,6 +1155,27 @@ static int handle_request(int status)
> > >                                   audit_rule_syscallbyname_data(
> > >                                                   rule_new, "all");
> > >                   }
> > > +                 if(audit_syscalladded == 1){
> > > +                         if (((add & 
> > > (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) ==
> > > +                                 AUDIT_FILTER_TASK || (del &
> > > +                                 (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) 
> > > ==
> > > +                                 AUDIT_FILTER_TASK)) {
> > > +                                 fprintf(stderr,
> > > +                                 "Error: syscall auditing being added to 
> > > task
> list\n");
> > > +                                 return -1;
> > > +                         } else if (((add & 
> > > (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET))
> ==
> > > +                                 AUDIT_FILTER_USER || (del &
> > > +                                 (AUDIT_FILTER_MASK|AUDIT_FILTER_UNSET)) 
> > > ==
> > > +                                 AUDIT_FILTER_USER)) {
> > > +                                 fprintf(stderr,
> > > +                                 "Error: syscall auditing being added to 
> > > user
> list\n");
> > > +                                 return -1;
> > > +                         } else if (exclude) {
> > > +                                 fprintf(stderr,
> > > +                                 "Error: syscall auditing cannot be put 
> > > on exclude
> > list\n");
> > > +                                 return -1;
> > > +                         }
> > > +                 }
> > >                   if (which == OLD) {
> > >                           rc = audit_add_rule(fd, &rule, add, action);
> > >                   } else {
> > >
> > > Regards
> > > Chu Li
>
>
>
>
> --
> Linux-audit mailing list
> Linux-audit@redhat.com
> https://www.redhat.com/mailman/listinfo/linux-audit




--
Linux-audit mailing list
Linux-audit@redhat.com
https://www.redhat.com/mailman/listinfo/linux-audit

Reply via email to