MCPcopy
hub / github.com/evilsocket/opensnitch / replaceUserRule

Method replaceUserRule

daemon/rule/loader.go:389–432  ·  view source on GitHub ↗
(rule *Rule)

Source from the content-addressed store, hash-verified

387}
388
389func (l *Loader) replaceUserRule(rule *Rule) (err error) {
390 l.Lock()
391 oldRule, found := l.rules[rule.Name]
392 l.Unlock()
393
394 if found {
395 // If the rule has changed from Always (saved on disk) to !Always (temporary),
396 // we need to delete the rule from disk and keep it in memory.
397 l.deleteOldRuleFromDisk(oldRule, rule)
398
399 // delete loaded lists, if this is a rule of type Lists
400 l.cleanListsRule(oldRule)
401 }
402
403 if err := l.unmarshalOperatorList(&rule.Operator); err != nil {
404 log.Error(err.Error())
405 }
406
407 if rule.Enabled {
408 if err := rule.Operator.Compile(); err != nil {
409 log.Warning("Operator.Compile() error: %s: %s", err, rule.Operator.Data)
410 return fmt.Errorf("(2) error compiling rule: %s", err)
411 }
412
413 if rule.Operator.Type == List {
414 for i := 0; i < len(rule.Operator.List); i++ {
415 if err := rule.Operator.List[i].Compile(); err != nil {
416 log.Warning("Operator.Compile() error: %s: ", err)
417 return fmt.Errorf("(2) error compiling list rule: %s", err)
418 }
419 }
420 }
421 }
422 l.Lock()
423 l.rules[rule.Name] = rule
424 l.sortRules()
425 l.Unlock()
426
427 if rule.Enabled && l.isTemporary(rule) {
428 err = l.scheduleTemporaryRule(*rule)
429 }
430
431 return err
432}
433
434func (l *Loader) scheduleTemporaryRule(rule Rule) error {
435 tTime, err := time.ParseDuration(string(rule.Duration))

Callers 4

ReplaceMethod · 0.95
addUserRuleMethod · 0.95
testDurationChangeFunction · 0.80

Calls 9

deleteOldRuleFromDiskMethod · 0.95
cleanListsRuleMethod · 0.95
unmarshalOperatorListMethod · 0.95
sortRulesMethod · 0.95
isTemporaryMethod · 0.95
scheduleTemporaryRuleMethod · 0.95
LockMethod · 0.80
UnlockMethod · 0.80
CompileMethod · 0.80

Tested by 2

testDurationChangeFunction · 0.64