From 3db68c3135d2156e964f83c7c188fe39b7eb919f Mon Sep 17 00:00:00 2001 From: Janusz Kozerski Date: Tue, 26 Aug 2014 12:38:31 +0200 Subject: [PATCH] Add console tool (UI substitute) Change-Id: I100fc585828f9fc24896ef18c856db69a809e7fe Signed-off-by: Janusz Kozerski --- CMakeLists.txt | 1 + src/CMakeLists.txt | 30 ++++++-- src/console/im-console | Bin 0 -> 8463 bytes src/console/im-console.c | 189 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+), 5 deletions(-) create mode 100755 src/console/im-console create mode 100644 src/console/im-console.c diff --git a/CMakeLists.txt b/CMakeLists.txt index a77b0ae..c433929 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") #SET(TARGET_IM_UIGADGET "ug-im-ui") SET(TARGET_IM_UIGADGET "im-ui") +SET(TARGET_IM_CONSOLE "im-console") SET(TARGET_IMA_EVM_SERVER "ima-evm-server") SET(TARGET_IMA_EVM_CLIENT "ima-evm-server-client") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8e66963..41ef953 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,6 +38,28 @@ TARGET_LINK_LIBRARIES(${TARGET_IM_UIGADGET} imaevm ) +########################################################### +SET(CONSOLE_SRCS + console/im-console.c +) + +SET(CMAKE_INSTALL_RPATH "${PREFIX}/bin") + +#INCLUDE_DIRECTORIES( +# ${CMAKE_SOURCE_DIR}/include +#) + +#INCLUDE_DIRECTORIES(SYSTEM +# ${im-uigadget_pkgs_INCLUDE_DIRS} +#) + +ADD_EXECUTABLE(${TARGET_IM_CONSOLE} ${CONSOLE_SRCS}) + +TARGET_LINK_LIBRARIES(${TARGET_IM_CONSOLE} +# ${im-console_pkgs_LIBRARIES} +# ${im-console_pkgs_LDFLAGS} + ${TARGET_IMA_EVM_CLIENT} +) ########################################################### SET(IMA_EVM_SERVER_PATH ${PROJECT_SOURCE_DIR}/src) @@ -111,11 +133,9 @@ TARGET_LINK_LIBRARIES(${TARGET_IMA_EVM_CLIENT} ########################################################### -INSTALL(TARGETS - ${TARGET_IM_UIGADGET} - DESTINATION - ${BINDIR} -) +INSTALL(TARGETS ${TARGET_IM_UIGADGET} DESTINATION ${BINDIR}) + +INSTALL(TARGETS ${TARGET_IM_CONSOLE} DESTINATION ${BINDIR}) INSTALL(TARGETS ${TARGET_IMA_EVM_CLIENT} DESTINATION ${LIB_INSTALL_DIR}) diff --git a/src/console/im-console b/src/console/im-console new file mode 100755 index 0000000000000000000000000000000000000000..60e9b3c71a787d6bdabd359303a5cbc91ad07f91 GIT binary patch literal 8463 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 Zome7=gH%V-&gF2-kS9-dmXv)Z{s+BoFE#)G literal 0 HcmV?d00001 diff --git a/src/console/im-console.c b/src/console/im-console.c new file mode 100644 index 0000000..470ce8f --- /dev/null +++ b/src/console/im-console.c @@ -0,0 +1,189 @@ +/** + * Copyright (c) 2014 Samsung Electronics Co., Ltd 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. + */ +/* + * @file im-console.c + * @author Janusz Kozerski (j.kozerski@samsung.com) + * @version 1.0 + * @brief + */ + +#include + +#include +#include +#include + +void inval() +{ + printf("Invalid param.\n"); +} + +void few_args() +{ + printf("Too few arguments\n"); +} + +void error(int i) +{ + printf("Error occurced %d\n", i); +} + +void print_policy(const char** policy) +{ + int i = 0; + while (policy[i]) { + printf("%s\n", policy[i]); + ++i; + } +} + +void help () +{ + printf("Usage:\n"); + printf(" im-console option\n"); + printf("Options:\n"); + printf(" -h\t\t\tPrint this message\n"); + printf(" -s ima|evm state\tSet state IMA or EVM\n"); + printf(" \t\t\tThe state of IMA can be one of: dis|enf|ign|fix\n"); + printf(" \t\t\tThe state of EVM can be one of: dis|ena|fix\n"); + printf(" -g ima|evm\t\tGet state of IMA or EVM\n"); + printf(" -p\t\t\tGet policy from the kernel\n"); + printf(" -l file\t\tLoad policy from the file into the kernel\n"); + printf(" \t\t\tThe signature of the policy should be present in location file.sig\n"); +} + +int ima_state_to_server(const char* state) +{ + if (strcmp(state, "dis") == 0) + return IMA_SERVER_API_STATE_DISABLED; + else if (strcmp(state, "enf") == 0) + return IMA_SERVER_API_STATE_ENFORCE; + else if (strcmp(state, "ign") == 0) + return IMA_SERVER_API_STATE_IGNORE; + else if (strcmp(state, "fix") == 0) + return IMA_SERVER_API_STATE_FIX; + else { + inval(); + exit(0); + } +} + +int evm_state_to_server(const char* state) +{ + if (strcmp(state, "dis") == 0) + return EVM_SERVER_API_STATE_DISABLED; + else if (strcmp(state, "ena") == 0) + return EVM_SERVER_API_STATE_ENABLED; + else if (strcmp(state, "fix") == 0) + return EVM_SERVER_API_STATE_FIX; + else { + inval(); + exit(0); + } +} + +const char* ima_state_from_server(int state) +{ + switch (state) { + case IMA_SERVER_API_STATE_DISABLED: return "DISABLED"; + case IMA_SERVER_API_STATE_IGNORE: return "IGNORE"; + case IMA_SERVER_API_STATE_ENFORCE: return "ENFORCE"; + case IMA_SERVER_API_STATE_FIX: return "FIX"; + default: return "UNKNOWN"; + } +} + +const char* evm_state_from_server(int state) +{ + switch (state) { + case EVM_SERVER_API_STATE_DISABLED: return "DISABLED"; + case EVM_SERVER_API_STATE_ENABLED: return "ENABLED"; + case EVM_SERVER_API_STATE_FIX: return "FIX"; + default: return "UNKNOWN"; + } +} + +int is_ima_module(const char* arg) +{ + if (strcmp("ima", arg) == 0 || strcmp("IMA", arg) == 0) + return 1; + return 0; +} + +int main (int argc, const char* argv[]) +{ + int i = 1; + int ret; + int state; + char** policy; + + while (i=argc) { + few_args(); + return 0; + } + if (is_ima_module(argv[i])) + ret = ima_evm_server_set_ima_state(ima_state_to_server(argv[i+1])); + else + ret = ima_evm_server_set_evm_state(evm_state_to_server(argv[i+1])); + i++; + if (ret == IMA_EVM_SERVER_API_SUCCESS) + printf("State changed\n"); + else + error(ret); + return 0; + case 'g': + i++; + if (i>=argc) { + few_args(); + return 0; + } + if (is_ima_module(argv[i])) { + ret = ima_evm_server_get_ima_state(&state); + if (ret == IMA_EVM_SERVER_API_SUCCESS) + printf("%s\n", ima_state_from_server(state)); + } else { + ret = ima_evm_server_get_evm_state(&state); + if (ret == IMA_EVM_SERVER_API_SUCCESS) + printf("%s\n", evm_state_from_server(state)); + } + if (ret != IMA_EVM_SERVER_API_SUCCESS) + error(ret); + return 0; + case 'p': + ret = ima_evm_server_get_policy(&policy); + if (ret != IMA_EVM_SERVER_API_SUCCESS) { + error(ret); + return 0; + } + print_policy(policy); + case 'l': break; + default: inval(); return 0; + } + ++i; + } +out: + return 0; +} + -- 2.7.4