|
|
947d92 |
diff -urp audit-3.0.orig/src/ausearch-parse.c audit-3.0/src/ausearch-parse.c
|
|
|
947d92 |
--- audit-3.0.orig/src/ausearch-parse.c 2019-03-15 15:30:39.000000000 -0400
|
|
|
947d92 |
+++ audit-3.0/src/ausearch-parse.c 2019-04-16 16:08:52.862402589 -0400
|
|
|
947d92 |
@@ -49,7 +49,7 @@ static int parse_dir(const lnode *n, sea
|
|
|
947d92 |
static int common_path_parser(search_items *s, char *path);
|
|
|
947d92 |
static int avc_parse_path(const lnode *n, search_items *s);
|
|
|
947d92 |
static int parse_path(const lnode *n, search_items *s);
|
|
|
947d92 |
-static int parse_user(const lnode *n, search_items *s);
|
|
|
947d92 |
+static int parse_user(const lnode *n, search_items *s, anode *avc);
|
|
|
947d92 |
static int parse_obj(const lnode *n, search_items *s);
|
|
|
947d92 |
static int parse_login(const lnode *n, search_items *s);
|
|
|
947d92 |
static int parse_daemon1(const lnode *n, search_items *s);
|
|
|
947d92 |
@@ -105,7 +105,7 @@ int extract_search_items(llist *l)
|
|
|
947d92 |
case AUDIT_FIRST_USER_MSG...AUDIT_USER_END:
|
|
|
947d92 |
case AUDIT_USER_CHAUTHTOK...AUDIT_LAST_USER_MSG:
|
|
|
947d92 |
case AUDIT_FIRST_USER_MSG2...AUDIT_LAST_USER_MSG2:
|
|
|
947d92 |
- ret = parse_user(n, s);
|
|
|
947d92 |
+ ret = parse_user(n, s, NULL);
|
|
|
947d92 |
break;
|
|
|
947d92 |
case AUDIT_SOCKADDR:
|
|
|
947d92 |
ret = parse_sockaddr(n, s);
|
|
|
947d92 |
@@ -830,7 +830,7 @@ static int parse_obj(const lnode *n, sea
|
|
|
947d92 |
return 0;
|
|
|
947d92 |
}
|
|
|
947d92 |
|
|
|
947d92 |
-static int parse_user(const lnode *n, search_items *s)
|
|
|
947d92 |
+static int parse_user(const lnode *n, search_items *s, anode *avc)
|
|
|
947d92 |
{
|
|
|
947d92 |
char *ptr, *str, *term, saved, *mptr;
|
|
|
947d92 |
|
|
|
947d92 |
@@ -915,7 +915,10 @@ static int parse_user(const lnode *n, se
|
|
|
947d92 |
if (term == NULL)
|
|
|
947d92 |
return 12;
|
|
|
947d92 |
*term = 0;
|
|
|
947d92 |
- if (audit_avc_init(s) == 0) {
|
|
|
947d92 |
+ if (avc) {
|
|
|
947d92 |
+ avc->scontext = strdup(str);
|
|
|
947d92 |
+ *term = ' ';
|
|
|
947d92 |
+ } else if (audit_avc_init(s) == 0) {
|
|
|
947d92 |
anode an;
|
|
|
947d92 |
|
|
|
947d92 |
anode_init(&an);
|
|
|
947d92 |
@@ -926,6 +929,31 @@ static int parse_user(const lnode *n, se
|
|
|
947d92 |
return 13;
|
|
|
947d92 |
}
|
|
|
947d92 |
}
|
|
|
947d92 |
+ // optionally get tcontext
|
|
|
947d92 |
+ if (avc && event_object) {
|
|
|
947d92 |
+ // USER_AVC tcontext
|
|
|
947d92 |
+ str = strstr(term, "tcontext=");
|
|
|
947d92 |
+ if (str != NULL) {
|
|
|
947d92 |
+ str += 9;
|
|
|
947d92 |
+ term = strchr(str, ' ');
|
|
|
947d92 |
+ if (term) {
|
|
|
947d92 |
+ *term = 0;
|
|
|
947d92 |
+ avc->tcontext = strdup(str);
|
|
|
947d92 |
+ *term = ' ';
|
|
|
947d92 |
+ }
|
|
|
947d92 |
+ }
|
|
|
947d92 |
+ // Grab tclass if it exists
|
|
|
947d92 |
+ str = strstr(term, "tclass=");
|
|
|
947d92 |
+ if (str) {
|
|
|
947d92 |
+ str += 7;
|
|
|
947d92 |
+ term = strchr(str, ' ');
|
|
|
947d92 |
+ if (term) {
|
|
|
947d92 |
+ *term = 0;
|
|
|
947d92 |
+ avc->avc_class = strdup(str);
|
|
|
947d92 |
+ *term = ' ';
|
|
|
947d92 |
+ }
|
|
|
947d92 |
+ }
|
|
|
947d92 |
+ }
|
|
|
947d92 |
// optionally get gid
|
|
|
947d92 |
if (event_gid != -1) {
|
|
|
947d92 |
if (n->type == AUDIT_ADD_GROUP || n->type == AUDIT_DEL_GROUP ||
|
|
|
947d92 |
@@ -1880,7 +1908,7 @@ static int parse_avc(const lnode *n, sea
|
|
|
947d92 |
other_avc:
|
|
|
947d92 |
// User AVC's are not formatted like a kernel AVC
|
|
|
947d92 |
if (n->type == AUDIT_USER_AVC) {
|
|
|
947d92 |
- rc = parse_user(n, s);
|
|
|
947d92 |
+ rc = parse_user(n, s, &an);
|
|
|
947d92 |
if (rc > 20)
|
|
|
947d92 |
rc = 0;
|
|
|
947d92 |
if (audit_avc_init(s) == 0) {
|
|
|
947d92 |
diff -urp audit-3.0.orig/src/ausearch-string.c audit-3.0/src/ausearch-string.c
|
|
|
947d92 |
--- audit-3.0.orig/src/ausearch-string.c 2019-03-15 15:30:39.000000000 -0400
|
|
|
947d92 |
+++ audit-3.0/src/ausearch-string.c 2019-04-16 15:55:39.186487759 -0400
|
|
|
947d92 |
@@ -118,6 +118,9 @@ int slist_add_if_uniq(slist *l, const ch
|
|
|
947d92 |
snode sn;
|
|
|
947d92 |
register snode *cur;
|
|
|
947d92 |
|
|
|
947d92 |
+ if (str == NULL)
|
|
|
947d92 |
+ return -1;
|
|
|
947d92 |
+
|
|
|
947d92 |
cur = l->head;
|
|
|
947d92 |
while (cur) {
|
|
|
947d92 |
if (strcmp(str, cur->str) == 0) {
|