summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAnas Nashif <nashif@intel.com>2007-05-17 04:54:56 +0000
committerAnas Nashif <nashif@intel.com>2007-05-17 04:54:56 +0000
commit5cef6368c06e3f1775943aa7c837f7676165569a (patch)
tree79b2a423fa6bc8bd3a7a9b9a96103160d3764865 /src
parentb697f5a601e53005d0c900b5d42f22b7fb08b1e9 (diff)
downloadwsmancli-5cef6368c06e3f1775943aa7c837f7676165569a.tar.gz
wsmancli-5cef6368c06e3f1775943aa7c837f7676165569a.tar.xz
wsmancli-5cef6368c06e3f1775943aa7c837f7676165569a.zip
reduced complexity of command line client
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am4
-rw-r--r--src/wsman-client-options.c520
-rw-r--r--src/wsman-client-options.h54
-rw-r--r--src/wsman.c401
4 files changed, 343 insertions, 636 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 0f65f4a..8b50b88 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,9 +7,7 @@ wsman_LDADD = \
$(OPENWSMAN_LIBS) \
-lwsman_curl_client_transport
-wsman_SOURCES = wsman.c \
- wsman-client-options.c \
- wsman-client-options.h
+wsman_SOURCES = wsman.c
bin_PROGRAMS = \
wsman
diff --git a/src/wsman-client-options.c b/src/wsman-client-options.c
deleted file mode 100644
index 9547170..0000000
--- a/src/wsman-client-options.c
+++ /dev/null
@@ -1,520 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2004-2006 Intel Corp. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * - Neither the name of Intel Corp. nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *******************************************************************************/
-
-/**
- * @author Anas Nashif
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-
-#include "u/libu.h"
-#include "wsman-client-api.h"
-#include "wsman-client-transport.h"
-#include "wsman-client-options.h"
-#include "wsman-debug.h"
-
-#if 0
-static char *auth_methods[] = {
- "basic",
- "digest",
- "ntlm",
- NULL,
-};
-#endif
-
-static const char **wsman_argv = NULL;
-
-
-static int server_port = 0;
-static char *cafile = NULL;
-static char *username = NULL;
-static char *password = NULL;
-static char *server = "localhost";
-static char *agent = NULL;
-static char *url_path = NULL;
-static char *authentication_method = NULL;
-static char verify_peer = 1;
-static char verify_host = 1;
-static int transport_timeout = 0;
-static char *proxy = NULL;
-static char *proxy_upwd = NULL;
-
-
-static int debug_level = -1;
-static char *test_case = NULL;
-static int enum_max_elements = 0;
-char enum_optimize = 0;
-char enum_estimate = 0;
-char dump_request = 0;
-char step = 0;
-char request_only = 0;
-char cim_extensions = 0;
-char cim_references = 0;
-char cim_associators = 0;
-static char *enum_mode = NULL;
-static char *binding_enum_mode = NULL;
-static char *enum_context = NULL;
-
-
-static char *cim_namespace = NULL;
-static char *fragment = NULL;
-static char *wsm_filter = NULL;
-static char *wsm_dialect = NULL;
-static char *input = NULL;
-
-static unsigned long operation_timeout = 0;
-static unsigned long max_envelope_size = 0;
-
-static char *_action = NULL;
-static char *config_file = NULL;
-static char *output_file = NULL;
-static char *resource_uri = NULL;
-static char *invoke_method = NULL;
-static char **properties = NULL;
-
-
-WsActions action_data[] = {
- {"get", WSMAN_ACTION_TRANSFER_GET},
- {"put", WSMAN_ACTION_TRANSFER_PUT},
- {"create", WSMAN_ACTION_TRANSFER_CREATE},
- {"delete", WSMAN_ACTION_TRANSFER_DELETE},
- {"enumerate", WSMAN_ACTION_ENUMERATION},
- {"pull", WSMAN_ACTION_PULL},
- {"release", WSMAN_ACTION_RELEASE},
- {"invoke", WSMAN_ACTION_CUSTOM},
- {"identify", WSMAN_ACTION_IDENTIFY},
- {"test", WSMAN_ACTION_TEST},
- {NULL, 0},
-};
-
-char wsman_parse_options(int argc, char **argv)
-{
-
- char retval = 0;
- u_error_t *error = NULL;
-
- u_option_entry_t options[] = {
- {"debug", 'd', U_OPTION_ARG_INT, &debug_level,
- "Set the verbosity of debugging output.", "1-6"},
- {"cafile", 'c', U_OPTION_ARG_STRING, &cafile,
- "Certificate file", "<filename>"},
- {"username", 'u', U_OPTION_ARG_STRING, &username,
- "User name", "<username>"},
- {"path", 'g', U_OPTION_ARG_STRING, &url_path,
- "Path", "<path>"},
- {"input", 'J', U_OPTION_ARG_STRING, &input,
- "File with resource for Create and Put operations in XML, can be a SOAP envelope",
- "<filename>"},
- {"password", 'p', U_OPTION_ARG_STRING, &password,
- "Password", "<password>"},
- {"hostname", 'h', U_OPTION_ARG_STRING, &server,
- "Host name", "<hostname>"},
- {"port", 'P', U_OPTION_ARG_INT, &server_port,
- "Server Port", "<port>"},
- {"proxy", 'X', U_OPTION_ARG_STRING, &proxy,
- "Proxy name", "<proxy>"},
- {"proxyauth", 'Y', U_OPTION_ARG_STRING, &proxy_upwd,
- "Proxy user:pwd", "<proxyauth>"},
- {"auth", 'y', U_OPTION_ARG_STRING, &authentication_method,
- "Authentication Method", "<basic|digest|gss>"},
- {"method", 'a', U_OPTION_ARG_STRING, &invoke_method,
- "Method (Works only with 'invoke')", "<custom method>"},
- {"prop", 'k', U_OPTION_ARG_STRING_ARRAY, &properties,
- "Properties with key value pairs (For 'put', 'invoke' and 'create')",
- "<key=val>"},
- {"config-file", 'C', U_OPTION_ARG_STRING, &config_file,
- "Alternate configuration file", "<file>"},
- {"out-file", 'O', U_OPTION_ARG_STRING, &output_file,
- "Write output to file", "<file>"},
- {"noverifypeer", 'V', U_OPTION_ARG_NONE, &verify_peer,
- "Not to verify peer certificate", NULL},
- {"noverifyhost", 'v', U_OPTION_ARG_NONE, &verify_host,
- "Not to verify hostname", NULL},
- {"transport-timeout", 'I', U_OPTION_ARG_INT, &transport_timeout,
- "Transport timeout in seconds", "<time in sec>"},
- {NULL}
- };
-
-
-
- u_option_entry_t request_options[] = {
- {"filter", 'x', U_OPTION_ARG_STRING, &wsm_filter,
- "Filter", "<filter>"},
- {"dialect", 'D', U_OPTION_ARG_STRING, &wsm_dialect,
- "Filter Dialect", "<dialect>"},
- {"operation-timeout", 't', U_OPTION_ARG_INT, &operation_timeout,
- "Operation timeout in seconds", "<time in sec>"},
- {"max-envelope-size", 'e', U_OPTION_ARG_INT,
- &max_envelope_size,
- "maximal envelope size", "<size>"},
- {"fragment", 'F', U_OPTION_ARG_STRING, &fragment,
- "Fragment (Supported Dialects: XPATH)", "<fragment>"},
- {NULL}
- };
-
- u_option_entry_t enum_options[] = {
-
- {"max-elements", 'm', U_OPTION_ARG_INT, &enum_max_elements,
- "Max Elements Per Pull/Optimized Enumeration",
- "<max number of elements>"},
- {"optimize", 'o', U_OPTION_ARG_NONE, &enum_optimize,
- "Optimize enumeration results", NULL},
- {"estimate-count", 'E', U_OPTION_ARG_NONE, &enum_estimate,
- "Return estimation of total items", NULL},
- {"enum-mode", 'M', U_OPTION_ARG_STRING, &enum_mode,
- "Enumeration Mode", "epr|objepr"},
- {"enum-context", 'U', U_OPTION_ARG_STRING, &enum_context,
- "Enumeration Context (For use with Pull and Release)",
- "<enum context>"},
- {NULL}
- };
-
- u_option_entry_t cim_options[] = {
-
- {"namespace", 'N', U_OPTION_ARG_STRING, &cim_namespace,
- "CIM Namespace (default is root/cimv2)", "<namespace>"},
- {"binding-enum-mode", 'B', U_OPTION_ARG_STRING,
- &binding_enum_mode,
- "CIM binding Enumeration Mode", "none|include|exclude"},
- {"cim-extensions", 'T', U_OPTION_ARG_NONE, &cim_extensions,
- "Show CIM Extensions", NULL},
- {"references", 'W', U_OPTION_ARG_NONE, &cim_references,
- "CIM References", NULL},
- {"associators", 'w', U_OPTION_ARG_NONE, &cim_associators,
- "CIM Associators", NULL},
- {NULL}
- };
-
- u_option_entry_t test_options[] = {
- {"from-file", 'f', U_OPTION_ARG_STRING, &test_case,
- "Send request from file", "<file name>"},
- {"print-request", 'R', U_OPTION_ARG_NONE, &dump_request,
- "print request on stdout", NULL},
- {"request", 'Q', U_OPTION_ARG_NONE, &request_only,
- "Only output reqest. Not send it.", NULL},
- {"step", 'S', U_OPTION_ARG_NONE, &step,
- "Do not perform multiple operations (do not pull data when enumerating)",
- NULL},
- //{ "print-response", 'N', 0, G_OPTION_ARG_NONE, &dump_response, "print all responses to stdout", NULL},
- {NULL}
- };
-
- u_option_group_t *enum_group;
- u_option_group_t *test_group;
- u_option_group_t *cim_group;
- u_option_group_t *req_flag_group;
-
- u_option_context_t *opt_ctx;
- opt_ctx = u_option_context_new("<action> <Resource Uri>");
- enum_group = u_option_group_new("enumeration", "Enumeration",
- "Enumeration Options");
- test_group = u_option_group_new("tests", "Tests", "Test Cases");
- cim_group = u_option_group_new("cim", "CIM", "CIM Options");
- req_flag_group =
- u_option_group_new("flags", "Flags", "Request Flags");
-
- u_option_group_add_entries(enum_group, enum_options);
- u_option_group_add_entries(test_group, test_options);
- u_option_group_add_entries(cim_group, cim_options);
- u_option_group_add_entries(req_flag_group, request_options);
-
- u_option_context_set_ignore_unknown_options(opt_ctx, FALSE);
- u_option_context_add_main_entries(opt_ctx, options, "wsman");
- u_option_context_add_group(opt_ctx, enum_group);
- u_option_context_add_group(opt_ctx, test_group);
- u_option_context_add_group(opt_ctx, cim_group);
- u_option_context_add_group(opt_ctx, req_flag_group);
-
- retval = u_option_context_parse(opt_ctx, &argc, &argv, &error);
- u_option_context_free(opt_ctx);
-
- if (error) {
- if (error->message)
- printf("%s\n", error->message);
- u_error_free(error);
- return FALSE;
- }
-
- if (argc > 2) {
- _action = argv[1];
- resource_uri = argv[2];
- } else {
- if (argv[1] && (strcmp(argv[1], "identify") == 0 ||
- strcmp(argv[1], "test") == 0)) {
- _action = argv[1];
- } else {
- fprintf(stderr,
- "Error: operation can not be completed."
- " Action or/and Resource Uri missing.\n");
- return FALSE;
- }
- }
- u_error_free(error);
-
- // set default options
- if (server_port == 0) {
- server_port = cafile ? 8888 : 8889;
- }
- if (url_path == NULL) {
- url_path = "/wsman";
- }
- return TRUE;
-}
-
-const char *wsman_options_get_output_file(void)
-{
- return output_file;
-}
-const char *wsman_options_get_config_file(void)
-{
- return config_file;
-}
-
-int wsman_read_client_config(dictionary * ini)
-{
- if (iniparser_find_entry(ini, "client")) {
- agent = iniparser_getstr(ini, "client:agent");
- server_port = server_port ?
- server_port : iniparser_getint(ini, "client:port", 80);
- authentication_method = authentication_method ?
- authentication_method :
- iniparser_getstr(ini, "client:authentication_method");
- } else {
- return 0;
- }
- return 1;
-}
-
-const char **wsman_options_get_argv(void)
-{
- return wsman_argv;
-}
-
-
-
-int wsman_options_get_server_port(void)
-{
- return server_port;
-}
-
-unsigned long wsman_options_get_max_envelope_size(void)
-{
- return max_envelope_size;
-}
-unsigned long wsman_options_get_operation_timeout(void)
-{
- return operation_timeout;
-}
-
-char *wsman_options_get_cafile(void)
-{
- return cafile;
-}
-
-char *wsman_options_get_auth_method(void)
-{
- return authentication_method;
-}
-
-char *wsman_options_get_server(void)
-{
- if (server)
- return server;
- else
- return "localhost";
-}
-
-char *wsman_options_get_invoke_method(void)
-{
- return invoke_method;
-}
-
-char *wsman_options_get_username(void)
-{
- return username;
-}
-
-char *wsman_options_get_password(void)
-{
- return password;
-}
-
-
-
-hash_t *wsman_options_get_properties(void)
-{
- int c = 0;
- hash_t *h = hash_create(HASHCOUNT_T_MAX, 0, 0);
-
- while (properties != NULL && properties[c] != NULL) {
- char *cc[3];
- u_tokenize1(cc, 2, properties[c], '=');
- if (!hash_alloc_insert(h, cc[0], cc[1])) {
- debug("hash_alloc_insert failed");
- }
- c++;
- }
- return h;
-}
-
-int wsman_options_get_action(void)
-{
- int op = 0;
- int i;
- for (i = 0; action_data[i].action != NULL; i++) {
- if (strcmp(action_data[i].action, _action) == 0) {
- op = action_data[i].value;
- break;
- }
- }
- return op;
-}
-
-char *wsman_options_get_resource_uri(void)
-{
- return resource_uri;
-}
-
-int wsman_options_get_max_elements(void)
-{
- return enum_max_elements;
-}
-char wsman_options_get_optimize_enum(void)
-{
- return enum_optimize;
-}
-
-char wsman_options_get_cim_ref(void)
-{
- return cim_references;
-}
-
-char wsman_options_get_cim_assoc(void)
-{
- return cim_associators;
-}
-
-char wsman_options_get_cim_ext(void)
-{
- return cim_extensions;
-}
-
-char wsman_options_get_estimate_enum(void)
-{
- return enum_estimate;
-}
-char wsman_options_get_dump_request(void)
-{
- return dump_request;
-}
-char wsman_options_get_step_request(void)
-{
- return step;
-}
-
-char *wsman_options_get_enum_context(void)
-{
- return enum_context;
-}
-
-char *wsman_options_get_test_file(void)
-{
- return test_case;
-}
-
-char *wsman_options_get_input_file(void)
-{
- return input;
-}
-
-char *wsman_options_get_enum_mode(void)
-{
- return enum_mode;
-}
-
-char *wsman_options_get_binding_enum_mode(void)
-{
- return binding_enum_mode;
-}
-char *wsman_options_get_cim_namespace(void)
-{
- return cim_namespace;
-}
-char *wsman_options_get_fragment(void)
-{
- return fragment;
-}
-char *wsman_options_get_filter(void)
-{
- return wsm_filter;
-}
-
-char *wsman_options_get_dialect(void)
-{
- return wsm_dialect;
-}
-char *wsman_options_get_path(void)
-{
- return url_path;
-}
-char *wsman_options_get_proxy(void)
-{
- return proxy;
-}
-char *wsman_options_get_proxy_upwd(void)
-{
- return proxy_upwd;
-}
-char wsman_options_get_verify_peer(void)
-{
- return verify_peer;
-}
-char wsman_options_get_verify_host(void)
-{
- return verify_host;
-}
-int wsman_options_get_debug_level(void)
-{
- return debug_level;
-}
-unsigned long wsman_options_get_transport_timeout(void)
-{
- return transport_timeout;
-}
diff --git a/src/wsman-client-options.h b/src/wsman-client-options.h
deleted file mode 100644
index e9e1232..0000000
--- a/src/wsman-client-options.h
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#ifndef WSMANCLIENTOPTIONS_H_
-#define WSMANCLIENTOPTIONS_H_
-
-struct _WsActions {
- char *action;
- int value;
-};
-typedef struct _WsActions WsActions;
-
-
-extern int wsman_read_client_config(dictionary * ini);
-
-extern char wsman_parse_options(int argc, char **argv);
-extern void wsman_setup_transport_and_library_options(void);
-
-extern char *wsman_options_get_server(void);
-extern int wsman_options_get_server_port(void);
-extern char *wsman_options_get_path(void);
-extern char *wsman_options_get_username(void);
-extern char *wsman_options_get_password(void);
-extern char *wsman_options_get_cafile(void);
-extern char *wsman_options_get_authentication_method(void);
-
-extern int wsman_options_get_max_elements(void);
-extern char *wsman_options_get_test_file(void);
-extern char *wsman_options_get_input_file(void);
-extern int wsman_options_get_action(void);
-extern char *wsman_options_get_resource_uri(void);
-extern hash_t *wsman_options_get_properties(void);
-extern char *wsman_options_get_invoke_method(void);
-extern char *wsman_options_get_enum_mode(void);
-extern char *wsman_options_get_binding_enum_mode(void);
-extern char *wsman_options_get_cim_namespace(void);
-extern char wsman_options_get_optimize_enum(void);
-extern char wsman_options_get_cim_ext(void);
-extern char wsman_options_get_dump_request(void);
-extern char wsman_options_get_step_request(void);
-extern char wsman_options_get_estimate_enum(void);
-extern char *wsman_options_get_fragment(void);
-extern char *wsman_options_get_filter(void);
-extern char wsman_options_get_cim_ref(void);
-
-extern char *wsman_options_get_dialect(void);
-extern const char *wsman_options_get_config_file(void);
-extern unsigned long wsman_options_get_max_envelope_size(void);
-extern unsigned long wsman_options_get_operation_timeout(void);
-
-extern char *wsman_options_get_enum_context(void);
-
-extern const char **wsman_options_get_argv(void);
-extern const char *wsman_options_get_output_file(void);
-
-#endif /*WSMANCLIENTOPTIONS_H_ */
diff --git a/src/wsman.c b/src/wsman.c
index 90c8433..58a690a 100644
--- a/src/wsman.c
+++ b/src/wsman.c
@@ -48,16 +48,263 @@
#include <errno.h>
#include <time.h>
-#include <u/libu.h>
#include <wsman-client-api.h>
#include <wsman-debug.h>
-#include "wsman-client-options.h"
+// #include "wsman-client-options.h"
+
+
+
+static const char **wsman_argv = NULL;
+
+
+static int server_port = 0;
+static char *cafile = NULL;
+static char *username = NULL;
+static char *password = NULL;
+static char *server = "localhost";
+static char *agent = NULL;
+static char *url_path = NULL;
+static char *authentication_method = NULL;
+static char verify_peer = 1;
+static char verify_host = 1;
+static int transport_timeout = 0;
+static char *proxy = NULL;
+static char *proxy_upwd = NULL;
+
+
+static int debug_level = -1;
+static char *test_case = NULL;
+static int enum_max_elements = 0;
+char enum_optimize = 0;
+char enum_estimate = 0;
+char dump_request = 0;
+char step = 0;
+char request_only = 0;
+char cim_extensions = 0;
+char cim_references = 0;
+char cim_associators = 0;
+static char *enum_mode = NULL;
+static char *binding_enum_mode = NULL;
+static char *enum_context = NULL;
+
+
+static char *cim_namespace = NULL;
+static char *fragment = NULL;
+static char *wsm_filter = NULL;
+static char *wsm_dialect = NULL;
+static char *input = NULL;
+
+static unsigned long operation_timeout = 0;
+static unsigned long max_envelope_size = 0;
+
+static char *_action = NULL;
+static char *config_file = NULL;
+static char *output_file = NULL;
+static char *resource_uri = NULL;
+static char *invoke_method = NULL;
+static char **properties = NULL;
+
+struct _WsActions {
+ char *action;
+ int value;
+};
+typedef struct _WsActions WsActions;
+
+WsActions action_data[] = {
+ {"get", WSMAN_ACTION_TRANSFER_GET},
+ {"put", WSMAN_ACTION_TRANSFER_PUT},
+ {"create", WSMAN_ACTION_TRANSFER_CREATE},
+ {"delete", WSMAN_ACTION_TRANSFER_DELETE},
+ {"enumerate", WSMAN_ACTION_ENUMERATION},
+ {"pull", WSMAN_ACTION_PULL},
+ {"release", WSMAN_ACTION_RELEASE},
+ {"invoke", WSMAN_ACTION_CUSTOM},
+ {"identify", WSMAN_ACTION_IDENTIFY},
+ {"test", WSMAN_ACTION_TEST},
+ {NULL, 0},
+};
+
+char wsman_parse_options(int argc, char **argv)
+{
+
+ char retval = 0;
+ u_error_t *error = NULL;
+
+ u_option_entry_t options[] = {
+ {"debug", 'd', U_OPTION_ARG_INT, &debug_level,
+ "Set the verbosity of debugging output.", "1-6"},
+ {"cafile", 'c', U_OPTION_ARG_STRING, &cafile,
+ "Certificate file", "<filename>"},
+ {"username", 'u', U_OPTION_ARG_STRING, &username,
+ "User name", "<username>"},
+ {"path", 'g', U_OPTION_ARG_STRING, &url_path,
+ "Path", "<path>"},
+ {"input", 'J', U_OPTION_ARG_STRING, &input,
+ "File with resource for Create and Put operations in XML, can be a SOAP envelope",
+ "<filename>"},
+ {"password", 'p', U_OPTION_ARG_STRING, &password,
+ "Password", "<password>"},
+ {"hostname", 'h', U_OPTION_ARG_STRING, &server,
+ "Host name", "<hostname>"},
+ {"port", 'P', U_OPTION_ARG_INT, &server_port,
+ "Server Port", "<port>"},
+ {"proxy", 'X', U_OPTION_ARG_STRING, &proxy,
+ "Proxy name", "<proxy>"},
+ {"proxyauth", 'Y', U_OPTION_ARG_STRING, &proxy_upwd,
+ "Proxy user:pwd", "<proxyauth>"},
+ {"auth", 'y', U_OPTION_ARG_STRING, &authentication_method,
+ "Authentication Method", "<basic|digest|gss>"},
+ {"method", 'a', U_OPTION_ARG_STRING, &invoke_method,
+ "Method (Works only with 'invoke')", "<custom method>"},
+ {"prop", 'k', U_OPTION_ARG_STRING_ARRAY, &properties,
+ "Properties with key value pairs (For 'put', 'invoke' and 'create')",
+ "<key=val>"},
+ {"config-file", 'C', U_OPTION_ARG_STRING, &config_file,
+ "Alternate configuration file", "<file>"},
+ {"out-file", 'O', U_OPTION_ARG_STRING, &output_file,
+ "Write output to file", "<file>"},
+ {"noverifypeer", 'V', U_OPTION_ARG_NONE, &verify_peer,
+ "Not to verify peer certificate", NULL},
+ {"noverifyhost", 'v', U_OPTION_ARG_NONE, &verify_host,
+ "Not to verify hostname", NULL},
+ {"transport-timeout", 'I', U_OPTION_ARG_INT, &transport_timeout,
+ "Transport timeout in seconds", "<time in sec>"},
+ {NULL}
+ };
+
+
+
+ u_option_entry_t request_options[] = {
+ {"filter", 'x', U_OPTION_ARG_STRING, &wsm_filter,
+ "Filter", "<filter>"},
+ {"dialect", 'D', U_OPTION_ARG_STRING, &wsm_dialect,
+ "Filter Dialect", "<dialect>"},
+ {"operation-timeout", 't', U_OPTION_ARG_INT, &operation_timeout,
+ "Operation timeout in seconds", "<time in sec>"},
+ {"max-envelope-size", 'e', U_OPTION_ARG_INT,
+ &max_envelope_size,
+ "maximal envelope size", "<size>"},
+ {"fragment", 'F', U_OPTION_ARG_STRING, &fragment,
+ "Fragment (Supported Dialects: XPATH)", "<fragment>"},
+ {NULL}
+ };
+
+ u_option_entry_t enum_options[] = {
+
+ {"max-elements", 'm', U_OPTION_ARG_INT, &enum_max_elements,
+ "Max Elements Per Pull/Optimized Enumeration",
+ "<max number of elements>"},
+ {"optimize", 'o', U_OPTION_ARG_NONE, &enum_optimize,
+ "Optimize enumeration results", NULL},
+ {"estimate-count", 'E', U_OPTION_ARG_NONE, &enum_estimate,
+ "Return estimation of total items", NULL},
+ {"enum-mode", 'M', U_OPTION_ARG_STRING, &enum_mode,
+ "Enumeration Mode", "epr|objepr"},
+ {"enum-context", 'U', U_OPTION_ARG_STRING, &enum_context,
+ "Enumeration Context (For use with Pull and Release)",
+ "<enum context>"},
+ {NULL}
+ };
+
+ u_option_entry_t cim_options[] = {
+
+ {"namespace", 'N', U_OPTION_ARG_STRING, &cim_namespace,
+ "CIM Namespace (default is root/cimv2)", "<namespace>"},
+ {"binding-enum-mode", 'B', U_OPTION_ARG_STRING,
+ &binding_enum_mode,
+ "CIM binding Enumeration Mode", "none|include|exclude"},
+ {"cim-extensions", 'T', U_OPTION_ARG_NONE, &cim_extensions,
+ "Show CIM Extensions", NULL},
+ {"references", 'W', U_OPTION_ARG_NONE, &cim_references,
+ "CIM References", NULL},
+ {"associators", 'w', U_OPTION_ARG_NONE, &cim_associators,
+ "CIM Associators", NULL},
+ {NULL}
+ };
+
+ u_option_entry_t test_options[] = {
+ {"from-file", 'f', U_OPTION_ARG_STRING, &test_case,
+ "Send request from file", "<file name>"},
+ {"print-request", 'R', U_OPTION_ARG_NONE, &dump_request,
+ "print request on stdout", NULL},
+ {"request", 'Q', U_OPTION_ARG_NONE, &request_only,
+ "Only output reqest. Not send it.", NULL},
+ {"step", 'S', U_OPTION_ARG_NONE, &step,
+ "Do not perform multiple operations (do not pull data when enumerating)",
+ NULL},
+ //{ "print-response", 'N', 0, G_OPTION_ARG_NONE, &dump_response, "print all responses to stdout", NULL},
+ {NULL}
+ };
+
+ u_option_group_t *enum_group;
+ u_option_group_t *test_group;
+ u_option_group_t *cim_group;
+ u_option_group_t *req_flag_group;
+
+ u_option_context_t *opt_ctx;
+ opt_ctx = u_option_context_new("<action> <Resource Uri>");
+ enum_group = u_option_group_new("enumeration", "Enumeration",
+ "Enumeration Options");
+ test_group = u_option_group_new("tests", "Tests", "Test Cases");
+ cim_group = u_option_group_new("cim", "CIM", "CIM Options");
+ req_flag_group =
+ u_option_group_new("flags", "Flags", "Request Flags");
+
+ u_option_group_add_entries(enum_group, enum_options);
+ u_option_group_add_entries(test_group, test_options);
+ u_option_group_add_entries(cim_group, cim_options);
+ u_option_group_add_entries(req_flag_group, request_options);
+
+ u_option_context_set_ignore_unknown_options(opt_ctx, FALSE);
+ u_option_context_add_main_entries(opt_ctx, options, "wsman");
+ u_option_context_add_group(opt_ctx, enum_group);
+ u_option_context_add_group(opt_ctx, test_group);
+ u_option_context_add_group(opt_ctx, cim_group);
+ u_option_context_add_group(opt_ctx, req_flag_group);
+
+ retval = u_option_context_parse(opt_ctx, &argc, &argv, &error);
+ u_option_context_free(opt_ctx);
+
+ if (error) {
+ if (error->message)
+ printf("%s\n", error->message);
+ u_error_free(error);
+ return FALSE;
+ }
+
+ if (argc > 2) {
+ _action = argv[1];
+ resource_uri = argv[2];
+ } else {
+ if (argv[1] && (strcmp(argv[1], "identify") == 0 ||
+ strcmp(argv[1], "test") == 0)) {
+ _action = argv[1];
+ } else {
+ fprintf(stderr,
+ "Error: operation can not be completed."
+ " Action or/and Resource Uri missing.\n");
+ return FALSE;
+ }
+ }
+ u_error_free(error);
+
+ // set default options
+ if (server_port == 0) {
+ server_port = cafile ? 8888 : 8889;
+ }
+ if (url_path == NULL) {
+ url_path = "/wsman";
+ }
+ return TRUE;
+}
+
+
static void wsman_output(WsManClient * cl, WsXmlDocH doc)
{
FILE *f = stdout;
- const char *filename = wsman_options_get_output_file();
+ const char *filename = output_file;
WS_LASTERR_Code err;
err = wsmc_get_last_error(cl);
@@ -121,6 +368,49 @@ request_usr_pwd( wsman_auth_type_t auth,
*password = u_strdup_printf ("%s", pw);
}
+static hash_t *wsman_options_get_properties(void)
+{
+ int c = 0;
+ hash_t *h = hash_create(HASHCOUNT_T_MAX, 0, 0);
+
+ while (properties != NULL && properties[c] != NULL) {
+ char *cc[3];
+ u_tokenize1(cc, 2, properties[c], '=');
+ if (!hash_alloc_insert(h, cc[0], cc[1])) {
+ debug("hash_alloc_insert failed");
+ }
+ c++;
+ }
+ return h;
+}
+
+static int wsman_options_get_action(void)
+{
+ int op = 0;
+ int i;
+ for (i = 0; action_data[i].action != NULL; i++) {
+ if (strcmp(action_data[i].action, _action) == 0) {
+ op = action_data[i].value;
+ break;
+ }
+ }
+ return op;
+}
+static int wsman_read_client_config(dictionary * ini)
+{
+ if (iniparser_find_entry(ini, "client")) {
+ agent = iniparser_getstr(ini, "client:agent");
+ server_port = server_port ?
+ server_port : iniparser_getint(ini, "client:port", 80);
+ authentication_method = authentication_method ?
+ authentication_method :
+ iniparser_getstr(ini, "client:authentication_method");
+ } else {
+ return 0;
+ }
+ return 1;
+}
+
int main(int argc, char **argv)
{
@@ -141,7 +431,7 @@ int main(int argc, char **argv)
- filename = (char *) wsman_options_get_config_file();
+ filename = (char *) config_file;
if (filename) {
ini = iniparser_load(filename);
if (ini == NULL) {
@@ -161,14 +451,14 @@ int main(int argc, char **argv)
// wsmc_transport_init(NULL);
options = wsmc_options_init();
- debug("Certificate: %s", wsman_options_get_cafile());
+ debug("Certificate: %s", cafile);
- cl = wsmc_create(wsman_options_get_server(),
- wsman_options_get_server_port(),
- wsman_options_get_path(),
- wsman_options_get_cafile()? "https" :
- "http", wsman_options_get_username(),
- wsman_options_get_password());
+ cl = wsmc_create(server,
+ server_port,
+ url_path,
+ cafile? "https" : "http",
+ username,
+ password);
wsmc_transport_set_auth_request_func(cl , &request_usr_pwd );
@@ -178,26 +468,26 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE);
}
// transport options
- wsman_transport_set_auth_method(cl, wsman_options_get_auth_method());
- if (wsman_options_get_proxy()) {
- wsman_transport_set_proxy(cl, wsman_options_get_proxy());
- if (wsman_options_get_proxy_upwd()) {
- wsman_transport_set_proxyauth(cl, wsman_options_get_proxy_upwd());
+ wsman_transport_set_auth_method(cl, authentication_method);
+ if (proxy) {
+ wsman_transport_set_proxy(cl, proxy);
+ if (proxy_upwd) {
+ wsman_transport_set_proxyauth(cl, proxy_upwd);
}
}
- if (wsman_options_get_cafile()) {
- wsman_transport_set_cafile(cl, wsman_options_get_cafile());
+ if (cafile) {
+ wsman_transport_set_cafile(cl, cafile);
}
- wsman_transport_set_verify_peer(cl, wsman_options_get_verify_peer());
- wsman_transport_set_verify_host(cl, wsman_options_get_verify_host());
- wsman_transport_set_timeout(cl, wsman_options_get_transport_timeout());
+ wsman_transport_set_verify_peer(cl, verify_peer);
+ wsman_transport_set_verify_host(cl, verify_host);
+ wsman_transport_set_timeout(cl, transport_timeout);
// library options
- wsman_debug_set_level(wsman_options_get_debug_level());
+ wsman_debug_set_level(debug_level);
/*
* Setup Resource URI and Selectors
*/
- resource_uri_with_selectors = wsman_options_get_resource_uri();
+ resource_uri_with_selectors = resource_uri;
if (resource_uri_with_selectors &&
strcmp(resource_uri_with_selectors,CIM_ALL_AVAILABLE_CLASSES) != 0) {
wsmc_set_options_from_uri(resource_uri_with_selectors,
@@ -210,37 +500,34 @@ int main(int argc, char **argv)
}
op = wsman_options_get_action();
- if (wsman_options_get_dump_request()) {
+ if (dump_request) {
wsmc_set_action_option(options, FLAG_DUMP_REQUEST);
}
- if (wsman_options_get_max_envelope_size()) {
- options->max_envelope_size =
- wsman_options_get_max_envelope_size();
+ if (max_envelope_size) {
+ options->max_envelope_size = max_envelope_size;
}
- if (wsman_options_get_operation_timeout()) {
- options->timeout = wsman_options_get_operation_timeout();
+ if (operation_timeout) {
+ options->timeout = operation_timeout;
}
- if (wsman_options_get_fragment()) {
- options->fragment = wsman_options_get_fragment();
+ if (fragment) {
+ options->fragment = fragment;
}
- if (wsman_options_get_filter()) {
- options->filter = wsman_options_get_filter();
+ if (wsm_filter) {
+ options->filter = wsm_filter;
}
- if (wsman_options_get_dialect()) {
- options->dialect = wsman_options_get_dialect();
+ if (wsm_dialect) {
+ options->dialect = wsm_dialect;
}
options->properties = wsman_options_get_properties();
- options->cim_ns = wsman_options_get_cim_namespace();
- if (wsman_options_get_cim_ext()) {
+ options->cim_ns = cim_namespace;
+ if (cim_extensions) {
wsmc_set_action_option(options, FLAG_CIM_EXTENSIONS);
}
switch (op) {
case WSMAN_ACTION_TEST:
- rqstDoc = wsmc_read_file(cl,
- wsman_options_get_input_file
- (), "UTF-8", 0);
+ rqstDoc = wsmc_read_file(cl, input, "UTF-8", 0);
wsman_send_request(cl, rqstDoc);
doc = wsmc_build_envelope_from_response(cl);
wsman_output(cl, doc);
@@ -258,7 +545,7 @@ int main(int argc, char **argv)
case WSMAN_ACTION_CUSTOM:
doc = wsmc_action_invoke(cl, resource_uri, options,
- wsman_options_get_invoke_method(),
+ invoke_method,
NULL);
wsman_output(cl, doc);
if (doc) {
@@ -273,10 +560,8 @@ int main(int argc, char **argv)
}
break;
case WSMAN_ACTION_TRANSFER_CREATE:
- if (wsman_options_get_input_file()) {
- resource = wsmc_read_file(cl,
- wsman_options_get_input_file
- (), "UTF-8", 0);
+ if (input) {
+ resource = wsmc_read_file(cl, input, "UTF-8", 0);
doc =
wsmc_action_create(cl, resource_uri, options,
resource);
@@ -290,11 +575,9 @@ int main(int argc, char **argv)
}
break;
case WSMAN_ACTION_TRANSFER_PUT:
- if (wsman_options_get_input_file()) {
+ if (input) {
printf("input file provided\n");
- resource = wsmc_read_file(cl,
- wsman_options_get_input_file
- (), "UTF-8", 0);
+ resource = wsmc_read_file(cl, input, "UTF-8", 0);
doc =
wsmc_action_put(cl, resource_uri, options,
resource);
@@ -319,7 +602,7 @@ int main(int argc, char **argv)
case WSMAN_ACTION_PULL:
doc =
wsmc_action_pull(cl, resource_uri, options,
- wsman_options_get_enum_context());
+ enum_context);
wsman_output(cl, doc);
if (doc) {
ws_xml_destroy_doc(doc);
@@ -328,7 +611,7 @@ int main(int argc, char **argv)
case WSMAN_ACTION_RELEASE:
doc =
wsmc_action_release(cl, resource_uri, options,
- wsman_options_get_enum_context());
+ enum_context);
wsman_output(cl, doc);
if (doc) {
ws_xml_destroy_doc(doc);
@@ -336,9 +619,9 @@ int main(int argc, char **argv)
break;
case WSMAN_ACTION_ENUMERATION:
- enumeration_mode = wsman_options_get_enum_mode();
+ enumeration_mode = enum_mode;
binding_enumeration_mode =
- wsman_options_get_binding_enum_mode();
+ binding_enum_mode;
if (enumeration_mode) {
if (strcmp(enumeration_mode, "epr") == 0)
@@ -363,23 +646,23 @@ int main(int argc, char **argv)
wsmc_set_action_option(options,
FLAG_POLYMORPHISM_NONE);
}
- if (wsman_options_get_cim_ref()) {
+ if (cim_references) {
wsmc_set_action_option(options,
FLAG_CIM_REFERENCES);
options->dialect = WSM_ASSOCIATION_FILTER_DIALECT;
}
- if (wsman_options_get_cim_assoc()) {
+ if (cim_associators) {
wsmc_set_action_option(options,
FLAG_CIM_ASSOCIATORS);
options->dialect = WSM_ASSOCIATION_FILTER_DIALECT;
}
- if (wsman_options_get_optimize_enum()) {
+ if (enum_optimize) {
wsmc_set_action_option(options,
FLAG_ENUMERATION_OPTIMIZATION);
}
- options->max_elements = wsman_options_get_max_elements();
+ options->max_elements = enum_max_elements;
- if (wsman_options_get_estimate_enum()) {
+ if (enum_estimate) {
wsmc_set_action_option(options,
FLAG_ENUMERATION_COUNT_ESTIMATION);
}
@@ -398,7 +681,7 @@ int main(int argc, char **argv)
break;
}
- if (wsman_options_get_step_request())
+ if (step)
break;
while (enumContext != NULL && enumContext[0] != 0) {