CommandListener.cpp revision 2b22552f9a3b077f9d0a3624ac6f9b8b332f8a7a
1f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat/* 2f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Copyright (C) 2008 The Android Open Source Project 3f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * 4f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 5f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * you may not use this file except in compliance with the License. 6f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * You may obtain a copy of the License at 7f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * 8f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * http://www.apache.org/licenses/LICENSE-2.0 9f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * 10f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Unless required by applicable law or agreed to in writing, software 11f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * distributed under the License is distributed on an "AS IS" BASIS, 12f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * See the License for the specific language governing permissions and 14f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * limitations under the License. 15f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat */ 16f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 17f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <stdlib.h> 18f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <sys/socket.h> 19a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat#include <sys/types.h> 20f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <netinet/in.h> 21f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <arpa/inet.h> 22a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat#include <dirent.h> 23f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <errno.h> 24f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 25f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#define LOG_TAG "CommandListener" 26f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <cutils/log.h> 27f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 28f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <sysutils/SocketClient.h> 29f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 30f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include "CommandListener.h" 31f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include "VolumeManager.h" 32a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat#include "ResponseCode.h" 33f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 34f1b736bc5605e92e917ab27f5abf3ba839be2270San MehatCommandListener::CommandListener() : 35f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat FrameworkListener("vold") { 36eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat registerCmd(new VolumeCmd()); 37eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat registerCmd(new AsecCmd()); 38a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat registerCmd(new ShareCmd()); 39f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat} 40f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 41eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan MehatCommandListener::VolumeCmd::VolumeCmd() : 42eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat VoldCommand("volume") { 43f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat} 44f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 45eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehatint CommandListener::VolumeCmd::runCommand(SocketClient *cli, 46f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat int argc, char **argv) { 47eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc < 2) { 48eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing Argument", false); 49eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 50eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 51f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat 52eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat VolumeManager *vm = VolumeManager::Instance(); 53eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat int rc = 0; 54eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat 55eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!strcmp(argv[1], "list")) { 56eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return vm->listVolumes(cli); 57eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "mount")) { 58eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = vm->mountVolume(argv[2]); 59eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "unmount")) { 60eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = vm->unmountVolume(argv[2]); 61eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "format")) { 62eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = vm->formatVolume(argv[2]); 63eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "share")) { 64eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = vm->shareVolume(argv[1], argv[2]); 65eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "unshare")) { 66eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = vm->unshareVolume(argv[1], argv[2]); 67eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "shared")) { 68eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat bool enabled = false; 69eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat 702b22552f9a3b077f9d0a3624ac6f9b8b332f8a7aSan Mehat if (vm->shareEnabled(argv[2], argv[3], &enabled)) { 71eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg( 72eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat ResponseCode::OperationFailed, "Failed to determine share enable state", true); 73eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 74eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::ShareEnabledResult, 75eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat (enabled ? "Share enabled" : "Share disabled"), false); 76eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 7749e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat } else { 78eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown volume cmd", false); 7949e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat } 8049e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat 81eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!rc) { 82eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "volume operation succeeded", false); 83a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat } else { 84eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat /* 85eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat * Failed 86eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat */ 87eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (errno == ENODEV) { 88eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = ResponseCode::OpFailedNoMedia; 89eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (errno == ENODATA) { 90eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = ResponseCode::OpFailedMediaBlank; 91eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (errno == EIO) { 92eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = ResponseCode::OpFailedMediaCorrupt; 93eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (errno == EBUSY) { 94eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = ResponseCode::OpFailedVolBusy; 95eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 96eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat rc = ResponseCode::OperationFailed; 97eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 98eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(rc, "volume operation failed", true); 99a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat } 100a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat 101a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat return 0; 102a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat} 103a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat 104a2677e4ad01f250b0765f04adf0acfa6627efc98San MehatCommandListener::ShareCmd::ShareCmd() : 105a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat VoldCommand("share") { 106a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat} 107a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat 108a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehatint CommandListener::ShareCmd::runCommand(SocketClient *cli, 109a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat int argc, char **argv) { 110eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc < 2) { 111eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing Argument", false); 112a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat return 0; 113a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } 114a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 115eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat VolumeManager *vm = VolumeManager::Instance(); 116eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat int rc = 0; 117a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 118eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!strcmp(argv[1], "status")) { 119eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat bool avail = false; 120a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 121eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->shareAvailable(argv[2], &avail)) { 122eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg( 123eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat ResponseCode::OperationFailed, "Failed to determine share availability", true); 124eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 125eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::ShareStatusResult, 126eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat (avail ? "Share available" : "Share unavailable"), false); 127eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 128a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } else { 129eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown share cmd", false); 130a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } 1315817821cf10b5f7d13eb693ffbc3f80f13bc681bSan Mehat 1325817821cf10b5f7d13eb693ffbc3f80f13bc681bSan Mehat return 0; 1335817821cf10b5f7d13eb693ffbc3f80f13bc681bSan Mehat} 1345817821cf10b5f7d13eb693ffbc3f80f13bc681bSan Mehat 135eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan MehatCommandListener::AsecCmd::AsecCmd() : 136eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat VoldCommand("asec") { 137048b0801fcd6fcfbb8fa812284c751181e4821b8San Mehat} 138048b0801fcd6fcfbb8fa812284c751181e4821b8San Mehat 139eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehatint CommandListener::AsecCmd::runCommand(SocketClient *cli, 140eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat int argc, char **argv) { 141eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc < 2) { 142eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing Argument", false); 143048b0801fcd6fcfbb8fa812284c751181e4821b8San Mehat return 0; 144048b0801fcd6fcfbb8fa812284c751181e4821b8San Mehat } 145048b0801fcd6fcfbb8fa812284c751181e4821b8San Mehat 146eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat VolumeManager *vm = VolumeManager::Instance(); 147eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat int rc = 0; 148a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 149eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!strcmp(argv[1], "list")) { 150eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat DIR *d = opendir("/sdcard/android_secure"); 151a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 152eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!d) { 153eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Failed to open asec dir", true); 154eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 155eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 156a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 157eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat struct dirent *dent; 158eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat while ((dent = readdir(d))) { 159eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (dent->d_name[0] == '.') 160eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat continue; 161eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (!strcmp(&dent->d_name[strlen(dent->d_name)-5], ".asec")) { 162eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat char id[255]; 163eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat memset(id, 0, sizeof(id)); 164eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat strncpy(id, dent->d_name, strlen(dent->d_name) -5); 165eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::AsecListResult, id, false); 166eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 167eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 168eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat closedir(d); 169eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "ASEC listing complete", false); 170eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "create")) { 171eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 7) { 172eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, 173eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat "Usage: asec create <container-id> <size_mb> <fstype> <key> <ownerUid>", false); 174eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 175a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } 176a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 177eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat unsigned int numSectors = (atoi(argv[3]) * (1024 * 1024)) / 512; 178eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->createAsec(argv[2], numSectors, argv[4], argv[5], atoi(argv[6]))) { 179eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Container creation failed", true); 180eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 181eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Container created", false); 182eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 183eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "finalize")) { 184eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 3) { 185eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: asec finalize <container-id>", false); 186eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 187eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 188eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->finalizeAsec(argv[2])) { 189eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Container finalize failed", true); 190eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 191eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Container finalized", false); 192eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 193eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "destroy")) { 194eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 3) { 195eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: asec destroy <container-id>", false); 196eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 197eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 198eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->destroyAsec(argv[2])) { 199eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Container destroy failed", true); 200eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 201eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Container destroyed", false); 202eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 203eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "mount")) { 204eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 5) { 205eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, 206eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat "Usage: asec mount <namespace-id> <key> <ownerUid>", false); 207eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 208eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 209a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 210eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat int rc = vm->mountAsec(argv[2], argv[3], atoi(argv[4])); 211a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 212eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (rc < 0) { 213eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Mount failed", true); 214eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 215eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Mount succeeded", false); 216eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 217a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 218eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "unmount")) { 219eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 3) { 220eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: asec unmount <container-id>", false); 221eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 222eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 223eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->unmountAsec(argv[2])) { 224eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Container unmount failed", true); 225eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 226eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Container unmounted", false); 227eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 228eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "rename")) { 229eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 4) { 230eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, 231eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat "Usage: asec rename <old_id> <new_id>", false); 232eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 233eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 234eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->renameAsec(argv[2], argv[3])) { 235eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Container rename failed", true); 236eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 237eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandOkay, "Container renamed", false); 238eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 239eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else if (!strcmp(argv[1], "path")) { 240eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (argc != 3) { 241eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Usage: asec path <container-id>", false); 242eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat return 0; 243eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 244eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat char path[255]; 245a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 246eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat if (vm->getAsecMountPath(argv[2], path, sizeof(path))) { 247eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::OperationFailed, "Failed to get path", true); 248eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } else { 249eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::AsecPathResult, path, false); 250eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat } 251a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } else { 252eba65e9d438a05f1c5dfd0f8d31bc463a5d08eeeSan Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown asec cmd", false); 253a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat } 254a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat 255a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat return 0; 256a19b250bd273455933ca3502cf2c2e0a803aff77San Mehat} 257