summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2015-03-09 18:35:41 -0700
committerVinit Deshpande <vinitd@google.com>2015-03-09 18:35:41 -0700
commit8656c84dcab2800fd7c1d64bba307527619d7bdb (patch)
treec4ce2daaffd0c51c9b8025e6aa72ec3198e3f614
parent3d11f32264690462e708ccbbce3bb34b64760465 (diff)
parent6c65afddc22abb87b7c531f283bde42c7e1b7a48 (diff)
downloadnetd-8656c84dcab2800fd7c1d64bba307527619d7bdb.tar.gz
am "Parse all netids with stringToNetId."
merged from partner/m-wireless-wifi-dev 6c65afd Parse all netids with stringToNetId.
-rw-r--r--server/CommandListener.cpp42
1 files changed, 29 insertions, 13 deletions
diff --git a/server/CommandListener.cpp b/server/CommandListener.cpp
index 1b058b7f..69e285f1 100644
--- a/server/CommandListener.cpp
+++ b/server/CommandListener.cpp
@@ -814,15 +814,19 @@ int CommandListener::ResolverCmd::runCommand(SocketClient *cli, int argc, char *
int rc = 0;
const char **argv = const_cast<const char **>(margv);
- if (argc < 2) {
+ if (argc < 3) {
cli->sendMsg(ResponseCode::CommandSyntaxError, "Resolver missing arguments", false);
return 0;
}
+ unsigned netId = stringToNetId(argv[2]);
+ // TODO: Consider making NetworkController.isValidNetwork() public
+ // and making that check here.
+
if (!strcmp(argv[1], "setnetdns")) {
// "resolver setnetdns <netId> <domains> <dns1> <dns2> ..."
if (argc >= 5) {
- rc = sResolverCtrl->setDnsServers(strtoul(argv[2], NULL, 0), argv[3], &argv[4], argc - 4);
+ rc = sResolverCtrl->setDnsServers(netId, argv[3], &argv[4], argc - 4);
} else {
cli->sendMsg(ResponseCode::CommandSyntaxError,
"Wrong number of arguments to resolver setnetdns", false);
@@ -830,7 +834,7 @@ int CommandListener::ResolverCmd::runCommand(SocketClient *cli, int argc, char *
}
} else if (!strcmp(argv[1], "clearnetdns")) { // "resolver clearnetdns <netId>"
if (argc == 3) {
- rc = sResolverCtrl->clearDnsServers(strtoul(argv[2], NULL, 0));
+ rc = sResolverCtrl->clearDnsServers(netId);
} else {
cli->sendMsg(ResponseCode::CommandSyntaxError,
"Wrong number of arguments to resolver clearnetdns", false);
@@ -838,7 +842,7 @@ int CommandListener::ResolverCmd::runCommand(SocketClient *cli, int argc, char *
}
} else if (!strcmp(argv[1], "flushnet")) { // "resolver flushnet <netId>"
if (argc == 3) {
- rc = sResolverCtrl->flushDnsCache(strtoul(argv[2], NULL, 0));
+ rc = sResolverCtrl->flushDnsCache(netId);
} else {
cli->sendMsg(ResponseCode::CommandSyntaxError,
"Wrong number of arguments to resolver flushnet", false);
@@ -1580,24 +1584,36 @@ int CommandListener::NetworkCommand::runCommand(SocketClient* client, int argc,
if (nextArg == argc) {
return syntaxError(client, "Missing id");
}
+
+ bool userPermissions = !strcmp(argv[2], "user");
+ bool networkPermissions = !strcmp(argv[2], "network");
+ if (!userPermissions && !networkPermissions) {
+ return syntaxError(client, "Unknown argument");
+ }
+
std::vector<unsigned> ids;
for (; nextArg < argc; ++nextArg) {
- char* endPtr;
- unsigned id = strtoul(argv[nextArg], &endPtr, 0);
- if (!*argv[nextArg] || *endPtr) {
- return syntaxError(client, "Invalid id");
+ if (userPermissions) {
+ char* endPtr;
+ unsigned id = strtoul(argv[nextArg], &endPtr, 0);
+ if (!*argv[nextArg] || *endPtr) {
+ return syntaxError(client, "Invalid id");
+ }
+ ids.push_back(id);
+ } else {
+ // networkPermissions
+ ids.push_back(stringToNetId(argv[nextArg]));
}
- ids.push_back(id);
}
- if (!strcmp(argv[2], "user")) {
+ if (userPermissions) {
sNetCtrl->setPermissionForUsers(permission, ids);
- } else if (!strcmp(argv[2], "network")) {
+ } else {
+ // networkPermissions
if (int ret = sNetCtrl->setPermissionForNetworks(permission, ids)) {
return operationError(client, "setPermissionForNetworks() failed", ret);
}
- } else {
- return syntaxError(client, "Unknown argument");
}
+
return success(client);
}