16235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski/* 26235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Copyright (C) 2016 The Android Open Source Project 36235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 46235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Licensed under the Apache License, Version 2.0 (the "License"); 56235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * you may not use this file except in compliance with the License. 66235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * You may obtain a copy of the License at 76235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 86235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * http://www.apache.org/licenses/LICENSE-2.0 96235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 106235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Unless required by applicable law or agreed to in writing, software 116235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * distributed under the License is distributed on an "AS IS" BASIS, 126235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * See the License for the specific language governing permissions and 146235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * limitations under the License. 156235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski */ 166235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 17c1211c47ae4707ed07a1fda7fd8cf9a66235fe0bAndreas Gampe#include <log/log_id.h> 18c1211c47ae4707ed07a1fda7fd8cf9a66235fe0bAndreas Gampe#include <private/android_logger.h> 19c1211c47ae4707ed07a1fda7fd8cf9a66235fe0bAndreas Gampe 202279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h> 216235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include "jni.h" 226235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 232e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe#include "core_jni_helpers.h" 242e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe#include "eventlog_helper.h" 256235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 262e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampenamespace android { 276235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 282e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampeconstexpr char kSecurityLogEventClass[] = "android/app/admin/SecurityLog$SecurityEvent"; 292e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampetemplate class EventLogHelper<log_id_t::LOG_ID_SECURITY, kSecurityLogEventClass>; 302e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampeusing SLog = EventLogHelper<log_id_t::LOG_ID_SECURITY, kSecurityLogEventClass>; 316235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 326235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic jboolean android_app_admin_SecurityLog_isLoggingEnabled(JNIEnv* env, 336235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jobject /* clazz */) { 346235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return (bool)__android_log_security(); 356235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 366235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 376235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic void android_app_admin_SecurityLog_readEvents(JNIEnv* env, jobject /* clazz */, 386235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jobject out) { 396235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 406235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski if (out == NULL) { 416235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jniThrowNullPointerException(env, NULL); 426235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return; 436235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski } 442e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe SLog::readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, out); 456235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 466235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 476235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic void android_app_admin_SecurityLog_readEventsSince(JNIEnv* env, jobject /* clazz */, 486235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jlong timestamp, 496235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jobject out) { 506235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 516235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski if (out == NULL) { 526235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jniThrowNullPointerException(env, NULL); 536235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return; 546235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski } 552e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe SLog::readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, timestamp, out); 566235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 576235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 586235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic void android_app_admin_SecurityLog_readPreviousEvents(JNIEnv* env, jobject /* clazz */, 596235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jobject out) { 606235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 616235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski if (out == NULL) { 626235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jniThrowNullPointerException(env, NULL); 636235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return; 646235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski } 652e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe SLog::readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK | ANDROID_LOG_PSTORE, 0, out); 666235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 676235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 686235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic void android_app_admin_SecurityLog_readEventsOnWrapping(JNIEnv* env, jobject /* clazz */, 696235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jlong timestamp, 706235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jobject out) { 716235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski if (out == NULL) { 726235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski jniThrowNullPointerException(env, NULL); 736235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return; 746235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski } 752e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe SLog::readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK | ANDROID_LOG_WRAP, timestamp, 762e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe out); 776235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 786235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 796235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski/* 806235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * JNI registration. 816235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski */ 826235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskistatic const JNINativeMethod gRegisterMethods[] = { 836235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski /* name, signature, funcPtr */ 846235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "isLoggingEnabled", 856235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "()Z", 866235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski (void*) android_app_admin_SecurityLog_isLoggingEnabled 876235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 886235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "writeEvent", 896235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(ILjava/lang/String;)I", 902e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe (void*) SLog::writeEventString 916235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 926235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "writeEvent", 936235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(I[Ljava/lang/Object;)I", 942e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe (void*) SLog::writeEventArray 956235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 966235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "readEvents", 976235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(Ljava/util/Collection;)V", 986235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski (void*) android_app_admin_SecurityLog_readEvents 996235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 1006235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "readEventsSince", 1016235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(JLjava/util/Collection;)V", 1026235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski (void*) android_app_admin_SecurityLog_readEventsSince 1036235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 1046235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "readPreviousEvents", 1056235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(Ljava/util/Collection;)V", 1066235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski (void*) android_app_admin_SecurityLog_readPreviousEvents 1076235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 1086235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski { "readEventsOnWrapping", 1096235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "(JLjava/util/Collection;)V", 1106235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski (void*) android_app_admin_SecurityLog_readEventsOnWrapping 1116235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski }, 1126235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski}; 1136235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1146235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskiint register_android_app_admin_SecurityLog(JNIEnv* env) { 1152e220ef36c680a3615502dfa1051515dd4f095acAndreas Gampe SLog::Init(env); 1166235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1176235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski return RegisterMethodsOrDie( 1186235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski env, 1196235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski "android/app/admin/SecurityLog", 1206235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski gRegisterMethods, NELEM(gRegisterMethods)); 1216235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} 1226235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1236235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski}; // namespace android 124