if(opt_str_len > 0)
{
- int fd = -1;
- char fs[8096];
- char *pfs;
- int len;
-
- fd = open (opt_str, O_RDONLY);
- if (fd < 0)
+ if(!xDbgEvlogReadRuleFile(opt_str, rule_log, &rule_size))
{
- printf ("failed: open '%s'. (%s)\n", opt_str, strerror(errno));
+ printf("%s", rule_log);
return;
}
-
- len = read(fd, fs, sizeof(fs));
- pfs = fs;
-
- while (pfs - fs < len)
- {
- int new_argc = 3;
- char *new_argv[3] = {"add", };
- char policy[64] = {0, };
- char rule[1024] = {0, };
- int i;
-
- if (pfs[0] == ' ' || pfs[0] == '\n')
- {
- pfs++;
- continue;
- }
- for (i = 0 ; pfs[i] != ' ' ; i++)
- policy[i] = pfs[i];
-
- new_argv[1] = policy;
- pfs += (strlen(new_argv[1]) + 1);
-
- memset(rule, 0, sizeof(rule));
- for (i = 0 ; pfs[i] != '\n' ; i++)
- rule[i] = pfs[i];
-
- new_argv[2] = rule;
-
- pfs += (strlen(new_argv[2]) + 1);
-
-
- if(!xDbgEvlogRuleSet ((const int) new_argc,
- (const char**) new_argv,
- rule_log, &rule_size))
- {
- printf("%s\n", rule_log);
- return;
- }
-
- }
-
eo.isRule = TRUE;
-
- if (fd >= 0)
- close (fd);
}
break;
}
"-----------------------------------------------------------------\n"
"Usage : xdbg evlog_rule add [POLICY] [RULE]\n"
" xdbg evlog_rule remove [INDEX]\n"
+ " xdbg evlog_rule file [RULE_FILE]\n"
" xdbg evlog_rule help / print\n"
" [POLICY] : allow / deny \n"
" [RULE] : C Language-style boolean expression syntax. [VARIABLE] [COMPAROTOR] [VALUE]\n"
rulechecker_print_rule (rc, reply);
return TRUE;
}
+ else if (!_strcasecmp (command, "file"))
+ {
+ if (argc < 2)
+ {
+ REPLY ("Error : Too few arguments.\n");
+ return FALSE;
+ }
+
+ if (!xDbgEvlogReadRuleFile(argv[1], reply, len))
+ return FALSE;
+ rulechecker_print_rule (rc, reply);
+
+ return TRUE;
+ }
else if (!_strcasecmp (command, "print"))
{
rulechecker_print_rule (rc, reply);
cmd);
}
+Bool
+xDbgEvlogReadRuleFile(const char *filename, char *reply, int *len)
+{
+ int fd = -1;
+ char fs[8096];
+ char *pfs;
+ int rule_len;
+
+ fd = open (filename, O_RDONLY);
+ if (fd < 0)
+ {
+ REPLY ("failed: open '%s'. (%s)\n", filename, strerror(errno));
+ return FALSE;
+ }
+
+ rule_len = read(fd, fs, sizeof(fs));
+ pfs = fs;
+
+ while (pfs - fs < rule_len)
+ {
+ int new_argc = 3;
+ char *new_argv[3] = {"add", };
+ char policy[64] = {0, };
+ char rule[1024] = {0, };
+ int i;
+
+ if (pfs[0] == ' ' || pfs[0] == '\n')
+ {
+ pfs++;
+ continue;
+ }
+ for (i = 0 ; pfs[i] != ' ' ; i++)
+ policy[i] = pfs[i];
+
+ new_argv[1] = policy;
+ pfs += (strlen(new_argv[1]) + 1);
+
+ memset(rule, 0, sizeof(rule));
+ for (i = 0 ; pfs[i] != '\n' ; i++)
+ rule[i] = pfs[i];
+
+ new_argv[2] = rule;
+
+ pfs += (strlen(new_argv[2]) + 1);
+
+
+ if(!xDbgEvlogRuleSet ((const int) new_argc, (const char**) new_argv, reply, len))
+ {
+ return FALSE;
+ }
+
+ }
+
+ if (fd >= 0)
+ close (fd);
+
+ return TRUE;
+}
+
ExtensionInfo Evlog_extensions[] = {
{xDbgEvlogCompositeGetBase, 0, 0, 0, NULL, NULL},
Bool xDbgEvlogRuleValidate (EvlogInfo *evinfo);
Bool xDbgEvlogGetExtensionEntry ();
Bool xDbgEvlogFillLog (EvlogInfo *evinfo, int detail_level, char *reply, int *len);
+Bool xDbgEvlogReadRuleFile(const char *filename, char *reply, int *len);
void xDbgDistroyAtomList (EvlogInfo *evinfo);
void xDbgDistroyRegionList (EvlogInfo *evinfo);
},
{
- "evlog_rule", "to set evlog rules", "[add/remove/print]",
- NULL, "[add allow/deny rules / remove (index) / print]",
+ "evlog_rule", "to set evlog rules", "[add/remove/file/print/help]",
+ NULL, "[add allow/deny rules / remove (index) / file(file_name) / print / help]",
_CommandSetEvlogRule
},