aboutsummaryrefslogtreecommitdiff
path: root/src/setaattr.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2014-02-04 11:59:16 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2014-02-04 12:06:44 +0200
commit9ab2885b1ab9daef69b231c36f662daae30175b7 (patch)
tree8cac5f9ca98d95e5e5a30b5af8519e3531575c44 /src/setaattr.c
parentc3feab15f38588dbd677234c17a109c2378308f7 (diff)
downloadeclat-9ab2885b1ab9daef69b231c36f662daae30175b7.tar.gz
eclat-9ab2885b1ab9daef69b231c36f662daae30175b7.tar.bz2
New commands: lsaattr and setaattr.
* TODO: Update. * doc/Makefile.inc: Add new files. * doc/eclat-lsaattr.1: New file. * doc/eclat-setaattr.1: New file. * etc/Makefile.am (FLNFILES): Add new files. * etc/describe-image-attribute.fln: New file. * etc/modify-image-attribute.fln: New file. * src/Makefile.am (eclat_SOURCES,OPTFILES): Add new files. * src/eclat.c (cmdtab): New commands: lsaattr and setaattr. * src/eclat.h (eclat_describe_image_attribute) (eclat_modify_image_attribute,canonattrname): New protos. * src/lsaattr.c: New file. * src/lsiattr.c: Use canonattrname to simplify usage. * src/lssattr.c (canonattrname): Remove. Use external version. * src/setaattr-cl.opt: New file. * src/setaattr.c: New file. * src/setiattr.c: New file. * src/util.c (canonattrname): New function.
Diffstat (limited to 'src/setaattr.c')
-rw-r--r--src/setaattr.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/setaattr.c b/src/setaattr.c
new file mode 100644
index 0000000..5365678
--- /dev/null
+++ b/src/setaattr.c
@@ -0,0 +1,119 @@
+/* This file is part of Eclat.
+ Copyright (C) 2012-2014 Sergey Poznyakoff.
+
+ Eclat is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ Eclat is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Eclat. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "eclat.h"
+
+#define ACCTYPE_USERID 0
+#define ACCTYPE_GROUP 1
+
+char *acct_string[] = { "UserId", "Group" };
+
+#define ACT_ADD 0
+#define ACT_DEL 1
+char *action_string[] = { "Add", "Remove" };
+
+int action = ACT_ADD;
+int acctype = ACCTYPE_USERID;
+
+#include "setaattr-cl.h"
+
+static char *attrs[] = {
+ "description",
+ "LaunchPermission",
+ "ProductCode",
+ NULL
+};
+
+static char *
+canonuserid(char *input)
+{
+ char *p, *q;
+
+ for (p = q = input; *q; q++) {
+ if (strchr(" \t-", *q))
+ continue;
+ *p++ = *q;
+ }
+ *p = 0;
+ return input;
+}
+
+int
+eclat_modify_image_attribute(eclat_command_env_t *env,
+ int argc, char **argv)
+{
+ int i;
+ struct ec2_query *q = env->query;
+ const char *attrname;
+ char *bufptr = NULL;
+ size_t bufsize = 0;
+
+ available_attrs = attrs;
+ proginfo.print_help_hook = list_attrs;
+
+ parse_options(env, argc, argv, &i);
+ argv += i;
+ argc -= i;
+
+ if (argc < 3)
+ die(EX_USAGE, "wrong number of arguments");
+ translate_ids(1, argv, MAP_IMAGE);
+ attrname = canonattrname(attrs, argv[1], NULL, NULL);
+ if (!attrname)
+ die(EX_USAGE, "unrecognized attribute name");
+
+ eclat_query_add_param(q, "ImageId", argv[0]);
+
+ argv++;
+ argc--;
+ argv[0] = (char*) env->cmd->name;
+
+ if (strcmp(attrname, "description") == 0) {
+ if (argc != 2)
+ die(EX_USAGE, "only one description is allowed");
+ eclat_query_add_param(q, "Description.Value", argv[1]);
+ } else if (strcmp(attrname, "ProductCode") == 0) {
+ for (i = 1; i < argc; i++) {
+ grecs_asprintf(&bufptr, &bufsize,
+ "ProductCode.%d",
+ i);
+ eclat_query_add_param(q, bufptr, argv[i]);
+ }
+ } else {
+ int j = 1;
+
+ while (argc) {
+ argv[0] = (char*) env->cmd->name;
+ parse_options(env, argc, argv, &i);
+ argv += i;
+ argc -= i;
+
+ if (argc) {
+ grecs_asprintf(&bufptr, &bufsize,
+ "LaunchPermission.%s.%d.%s",
+ action_string[action], j++,
+ acct_string[acctype]);
+ eclat_query_add_param(q, bufptr,
+ canonuserid(argv[0]));
+ }
+ }
+ }
+ free(bufptr);
+ return 0;
+}
+
+
+

Return to:

Send suggestions and report system problems to the System administrator.