openwsman 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ #
2
+ # extconf.rb for openwsman Gem
3
+ #
4
+
5
+ require 'mkmf'
6
+ # $CFLAGS = "#{$CFLAGS} -Werror"
7
+
8
+ # requires wsman, wsman_client, and libxml2
9
+
10
+ unless have_library('wsman', 'wsman_create_doc')
11
+ STDERR.puts "Cannot find wsman_create_doc() in libwsman"
12
+ STDERR.puts "Is openwsman-devel installed ?"
13
+ exit 1
14
+ end
15
+ find_header 'wsman-xml-api.h', '/usr/include/openwsman'
16
+
17
+ unless have_library('wsman_client', 'wsmc_create')
18
+ STDERR.puts "Cannot find wsmc_create() in libwsman_client"
19
+ STDERR.puts "Is openwsman-devel installed ?"
20
+ exit 1
21
+ end
22
+ find_header 'wsman-client-api.h', '/usr/include/openwsman'
23
+
24
+ unless have_library('xml2', 'xmlNewDoc')
25
+ STDERR.puts "Cannot find xmlNewDoc() in libxml2"
26
+ STDERR.puts "Is libxml2-devel installed ?"
27
+ exit 1
28
+ end
29
+ find_header 'libxml/parser.h', '/usr/include/libxml2'
30
+
31
+ $CPPFLAGS = "-I/usr/include/openwsman -I.."
32
+
33
+ create_makefile('openwsman')
@@ -0,0 +1,170 @@
1
+ #ifndef RUBY_HELPERS_H
2
+ #define RUBY_HELPERS_H
3
+
4
+ /*
5
+ * openwsman-ruby.c
6
+ *
7
+ * helper functions to convert between ruby and openwsman values
8
+ *
9
+ * Author: Klaus Kaempf <kkaempf@suse.de>
10
+ *
11
+ */
12
+
13
+ /*****************************************************************************
14
+ * Copyright (C) 2008 Novell Inc. All rights reserved.
15
+ * Copyright (C) 2008 SUSE Linux Products GmbH. All rights reserved.
16
+ *
17
+ * Redistribution and use in source and binary forms, with or without
18
+ * modification, are permitted provided that the following conditions are met:
19
+ *
20
+ * - Redistributions of source code must retain the above copyright notice,
21
+ * this list of conditions and the following disclaimer.
22
+ *
23
+ * - Redistributions in binary form must reproduce the above copyright notice,
24
+ * this list of conditions and the following disclaimer in the documentation
25
+ * and/or other materials provided with the distribution.
26
+ *
27
+ * - Neither the name of Novell Inc. nor of SUSE Linux Products GmbH nor the
28
+ * names of its contributors may be used to endorse or promote products
29
+ * derived from this software without specific prior written permission.
30
+ *
31
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
32
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
33
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
34
+ * ARE DISCLAIMED. IN NO EVENT SHALL Novell Inc. OR SUSE Linux Products GmbH OR
35
+ * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
36
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
37
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
38
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
39
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42
+ *****************************************************************************/
43
+
44
+ /* convert char* to string VALUE */
45
+ static VALUE
46
+ makestring( const char *s )
47
+ {
48
+ if (s) return rb_str_new2( s );
49
+ return Qnil;
50
+ }
51
+
52
+
53
+ /* convert VALUE to char* */
54
+ static const char *
55
+ as_string( VALUE v )
56
+ {
57
+ const char *str;
58
+ if (SYMBOL_P(v)) {
59
+ str = rb_id2name(SYM2ID(v));
60
+ }
61
+ else if (TYPE(v) == T_STRING) {
62
+ str = StringValuePtr(v);
63
+ }
64
+ else if (v == Qnil) {
65
+ str = NULL;
66
+ }
67
+ else {
68
+ VALUE v_s = rb_funcall(v, rb_intern("to_s"), 0 );
69
+ str = StringValuePtr(v_s);
70
+ }
71
+ return str;
72
+ }
73
+
74
+
75
+ /* convert openwsman hash_t* to hash VALUE (string pairs) */
76
+ static VALUE
77
+ hash2value( hash_t *hash )
78
+ {
79
+ VALUE v;
80
+ hnode_t *node;
81
+ hscan_t ptr;
82
+
83
+ if (!hash) return Qnil;
84
+
85
+ hash_scan_begin( &ptr, hash );
86
+
87
+ v = rb_hash_new();
88
+ while ((node = hash_scan_next( &ptr )) ) {
89
+ rb_hash_aset( v, makestring( hnode_getkey( node ) ), makestring( hnode_get( node ) ) );
90
+ }
91
+ return v;
92
+ }
93
+
94
+
95
+ /* add key,value VALUE pair to hash_t*
96
+ * (used as callback for value2hash)
97
+ */
98
+ static int
99
+ add_i( VALUE key, VALUE value, hash_t *h )
100
+ {
101
+ if (key != Qundef) {
102
+ const char *k = as_string( key );
103
+ const char *v = as_string( value );
104
+
105
+ if (!hash_lookup( h, k ) ) {
106
+ if ( !hash_alloc_insert( h, k, v ) ) {
107
+ rb_raise( rb_eException, "hash_alloc_insert failed" );
108
+ }
109
+ }
110
+ }
111
+ return 0;
112
+ }
113
+
114
+
115
+ /* create hash (h == NULL) or add to hash (h != NULL) from hash VALUE */
116
+ static hash_t *
117
+ value2hash( hash_t *h, VALUE v )
118
+ {
119
+ if (NIL_P(v)) return NULL;
120
+
121
+ Check_Type( v, T_HASH );
122
+
123
+ if (!h) h = hash_create(HASHCOUNT_T_MAX, 0, 0);
124
+
125
+ rb_hash_foreach( v, add_i, (unsigned long)h );
126
+
127
+ return h;
128
+ }
129
+
130
+
131
+ /*
132
+ * callback function if client authentication fails
133
+ *
134
+ */
135
+ static void
136
+ auth_request_callback( WsManClient *client, wsman_auth_type_t t, char **username, char **password )
137
+ {
138
+
139
+ /*
140
+ * Uhm, swig 1.3.40 (or earlier) renamed its internal class variables from
141
+ * cFoo to SwigClassFoo
142
+ * 1.3.36 certainly used cFoo
143
+ *
144
+ */
145
+
146
+ #if SWIG_VERSION < 0x010340
147
+ #define TRANSPORT_CLASS cTransport
148
+ #else
149
+ #define TRANSPORT_CLASS SwigClassTransport
150
+ #endif
151
+
152
+ extern swig_class TRANSPORT_CLASS;
153
+ VALUE c = SWIG_NewPointerObj((void*) client, SWIGTYPE_p__WsManClient, 0);
154
+
155
+ /* ruby callback */
156
+ VALUE result = rb_funcall( TRANSPORT_CLASS.klass, rb_intern( "auth_request_callback" ), 2, c, INT2NUM( t ) );
157
+
158
+ if (CLASS_OF( result ) == rb_cArray) {
159
+ if (RARRAY_LEN(result) == 2 ) {
160
+ *username = strdup(as_string( rb_ary_entry( result, 0 ) ));
161
+ *password= strdup(as_string( rb_ary_entry( result, 1 ) ));
162
+ return;
163
+ }
164
+ }
165
+
166
+ *username = NULL; /* abort authentication */
167
+ return;
168
+ }
169
+
170
+ #endif /* RUBY_HELPERS_H */
@@ -0,0 +1,8 @@
1
+
2
+
3
+ #ifndef OPENWSMAN_H_SWIG_
4
+ #define OPENWSMAN_H_SWIG_
5
+
6
+ void debug_message_handler (const char *str, debug_level_e level, void *user_data);
7
+
8
+ #endif