mirror of
https://github.com/google/santa.git
synced 2026-01-22 12:38:06 -05:00
98 lines
2.9 KiB
Objective-C
98 lines
2.9 KiB
Objective-C
/// Copyright 2015 Google Inc. All rights reserved.
|
|
///
|
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
/// you may not use this file except in compliance with the License.
|
|
/// You may obtain a copy of the License at
|
|
///
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
///
|
|
/// Unless required by applicable law or agreed to in writing, software
|
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
/// See the License for the specific language governing permissions and
|
|
/// limitations under the License.
|
|
|
|
#import "SNTDaemonControlController.h"
|
|
|
|
#import "SNTConfigurator.h"
|
|
#import "SNTDatabaseController.h"
|
|
#import "SNTDriverManager.h"
|
|
#import "SNTEventTable.h"
|
|
#import "SNTLogging.h"
|
|
#import "SNTRule.h"
|
|
#import "SNTRuleTable.h"
|
|
|
|
@implementation SNTDaemonControlController
|
|
|
|
- (instancetype)initWithDriverManager:(SNTDriverManager *)driverManager {
|
|
self = [super init];
|
|
if (self) {
|
|
_driverManager = driverManager;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
#pragma mark Kernel ops
|
|
|
|
- (void)cacheCount:(void (^)(uint64_t))reply; {
|
|
uint64_t count = [self.driverManager cacheCount];
|
|
reply(count);
|
|
}
|
|
|
|
- (void)flushCache:(void (^)(BOOL))reply {
|
|
reply([self.driverManager flushCache]);
|
|
}
|
|
|
|
#pragma mark Database ops
|
|
|
|
- (void)databaseRuleCounts:(void (^)(uint64_t binary, uint64_t certificate))reply {
|
|
SNTRuleTable *rdb = [SNTDatabaseController ruleTable];
|
|
reply([rdb binaryRuleCount], [rdb certificateRuleCount]);
|
|
}
|
|
|
|
- (void)databaseRuleAddRule:(SNTRule *)rule withReply:(void (^)())reply {
|
|
[self databaseRuleAddRules:@[ rule ] withReply:reply];
|
|
}
|
|
|
|
- (void)databaseRuleAddRules:(NSArray *)rules withReply:(void (^)())reply {
|
|
[[SNTDatabaseController ruleTable] addRules:rules];
|
|
|
|
// If any rules were added that were not whitelist, flush cache.
|
|
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF.state != %d", RULESTATE_WHITELIST];
|
|
if ([rules filteredArrayUsingPredicate:p].count) {
|
|
LOGI(@"Received non-whitelist rule, flushing cache");
|
|
[self.driverManager flushCache];
|
|
}
|
|
|
|
reply();
|
|
}
|
|
|
|
- (void)databaseEventCount:(void (^)(uint64_t count))reply {
|
|
reply([[SNTDatabaseController eventTable] pendingEventsCount]);
|
|
}
|
|
|
|
- (void)databaseEventForSHA256:(NSString *)sha256 withReply:(void (^)(SNTStoredEvent *))reply {
|
|
reply([[SNTDatabaseController eventTable] pendingEventForSHA256:sha256]);
|
|
}
|
|
|
|
- (void)databaseEventsPending:(void (^)(NSArray *events))reply {
|
|
reply([[SNTDatabaseController eventTable] pendingEvents]);
|
|
}
|
|
|
|
- (void)databaseRemoveEventsWithIDs:(NSArray *)ids {
|
|
[[SNTDatabaseController eventTable] deleteEventsWithIds:ids];
|
|
}
|
|
|
|
#pragma mark Misc
|
|
|
|
- (void)clientMode:(void (^)(santa_clientmode_t))reply {
|
|
reply([[SNTConfigurator configurator] clientMode]);
|
|
}
|
|
|
|
- (void)setClientMode:(santa_clientmode_t)mode withReply:(void (^)())reply {
|
|
[[SNTConfigurator configurator] setClientMode:mode];
|
|
reply();
|
|
}
|
|
|
|
@end
|