rkerberos 0.1.0 → 0.1.1

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.
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ = 0.1.1 - 08-May-2013
2
+ * Add credential cache argument to get_init_creds_keytab
3
+ * Fixed invalid VALUE declarations affecting non-gcc compilers
4
+ * Add OS X install instructions
5
+
1
6
  = 0.1.0 - 28-Apr-2011
2
7
  * Initial release. This is effectively a re-release of my own custom branch
3
8
  of the krb5-auth library, with some minor changes.
@@ -1,10 +1,24 @@
1
- = Description
1
+ # Description
2
2
  The rkerberos library provides a Ruby interface for Kerberos.
3
3
 
4
- = Requirements
4
+ # Requirements
5
5
  Kerberos 1.7.0 or later, including admin header and library files.
6
6
 
7
- = Synopsis
7
+ # OSX
8
+ krb5 must be installed from source before installing the rkerberos gem:
9
+ ```
10
+ wget http://web.mit.edu/kerberos/dist/krb5/1.10/krb5-1.10.2-signed.tar
11
+ tar -xf krb5-1.10.2-signed.tar
12
+ tar -xf krb5-1.10.2-signed.tar.gz
13
+ cd krb5-1.10.2
14
+ ./configure
15
+ make
16
+ make install
17
+ ```
18
+ latest release is here: http://web.mit.edu/kerberos/dist/index.html
19
+
20
+ # Synopsis
21
+ ```ruby
8
22
  require 'rkerberos'
9
23
 
10
24
  # Get the default realm name
@@ -27,25 +41,23 @@
27
41
  p kadm5.get_principal('someuser')
28
42
  kadm5.set_password('someuser', 'abc123')
29
43
  end
44
+ ```
30
45
 
31
- = Notes
46
+ # Notes
32
47
  The rkerberos library is a repackaging of my custom branch of the krb5_auth
33
48
  library. Eventually the gem djberg96-krb5_auth will be removed from the gem
34
49
  index.
35
50
 
36
- = MIT vs Heimdal
51
+ # MIT vs Heimdal
37
52
  This code was written for the MIT Kerberos library. It has not been tested
38
53
  with the Heimdal Kerberos library.
39
54
 
40
- = TODO
55
+ # TODO
41
56
  Create a separate class for the replay cache.
42
57
  Better credentials cache support.
43
58
  Ability to add and delete keytab entries.
44
59
 
45
- = Known Issues
46
- OS X users will probably need to install Kerberos manually and specify
47
- the dir-config option because it ships with old Kerberos header files,
48
- and none of the admin headers or libraries by default.
49
-
50
- = Author
60
+ # Authors
51
61
  Daniel Berger
62
+ Dominic Cleal (maintainer)
63
+
data/Rakefile CHANGED
@@ -14,6 +14,7 @@ CLEAN.include(
14
14
  '**/*.log', # Ruby extension build log
15
15
  '**/Makefile', # C Makefile
16
16
  '**/conftest.dSYM', # OS X build directory
17
+ '**/tmp', # Temp directory
17
18
  "**/*.#{CONFIG['DLEXT']}" # C shared object
18
19
  )
19
20
 
@@ -35,7 +35,6 @@ static VALUE rkrb5_keytab_allocate(VALUE klass){
35
35
  static VALUE rkrb5_keytab_each(VALUE self){
36
36
  RUBY_KRB5_KEYTAB* ptr;
37
37
  VALUE v_kt_entry;
38
- VALUE v_args[0];
39
38
  krb5_error_code kerror;
40
39
  krb5_kt_cursor cursor;
41
40
  krb5_keytab_entry entry;
@@ -55,7 +54,7 @@ static VALUE rkrb5_keytab_each(VALUE self){
55
54
  while((kerror = krb5_kt_next_entry(ptr->ctx, ptr->keytab, &entry, &cursor)) == 0){
56
55
  krb5_unparse_name(ptr->ctx, entry.principal, &principal);
57
56
 
58
- v_kt_entry = rb_class_new_instance(0, v_args, cKrb5KtEntry);
57
+ v_kt_entry = rb_class_new_instance(0, NULL, cKrb5KtEntry);
59
58
 
60
59
  rb_iv_set(v_kt_entry, "@principal", rb_str_new2(principal));
61
60
  rb_iv_set(v_kt_entry, "@timestamp", rb_time_new(entry.timestamp, 0));
@@ -247,7 +246,6 @@ static VALUE rkrb5_keytab_get_entry(int argc, VALUE* argv, VALUE self){
247
246
  krb5_keytab_entry entry;
248
247
  char* name;
249
248
  VALUE v_principal, v_vno, v_enctype, v_entry;
250
- VALUE v_args[0];
251
249
 
252
250
  Data_Get_Struct(self, RUBY_KRB5_KEYTAB, ptr);
253
251
 
@@ -276,7 +274,7 @@ static VALUE rkrb5_keytab_get_entry(int argc, VALUE* argv, VALUE self){
276
274
  if(kerror)
277
275
  rb_raise(cKrb5Exception, "krb5_kt_get_entry: %s", error_message(kerror));
278
276
 
279
- v_entry = rb_class_new_instance(0, v_args, cKrb5KtEntry);
277
+ v_entry = rb_class_new_instance(0, NULL, cKrb5KtEntry);
280
278
 
281
279
  rb_iv_set(v_entry, "@principal", rb_str_new2(name));
282
280
  rb_iv_set(v_entry, "@timestamp", rb_time_new(entry.timestamp, 0));
@@ -365,7 +363,6 @@ static VALUE rkrb5_keytab_initialize(int argc, VALUE* argv, VALUE self){
365
363
  static VALUE rkrb5_s_keytab_foreach(int argc, VALUE* argv, VALUE klass){
366
364
  VALUE v_kt_entry;
367
365
  VALUE v_keytab_name;
368
- VALUE v_args[0];
369
366
  krb5_error_code kerror;
370
367
  krb5_kt_cursor cursor;
371
368
  krb5_keytab keytab;
@@ -429,7 +426,7 @@ static VALUE rkrb5_s_keytab_foreach(int argc, VALUE* argv, VALUE klass){
429
426
  while((kerror = krb5_kt_next_entry(context, keytab, &entry, &cursor)) == 0){
430
427
  krb5_unparse_name(context, entry.principal, &principal);
431
428
 
432
- v_kt_entry = rb_class_new_instance(0, v_args, cKrb5KtEntry);
429
+ v_kt_entry = rb_class_new_instance(0, NULL, cKrb5KtEntry);
433
430
 
434
431
  rb_iv_set(v_kt_entry, "@principal", rb_str_new2(principal));
435
432
  rb_iv_set(v_kt_entry, "@timestamp", rb_time_new(entry.timestamp, 0));
@@ -127,7 +127,7 @@ static VALUE rkrb5_set_default_realm(int argc, VALUE* argv, VALUE self){
127
127
  }
128
128
 
129
129
  /* call-seq:
130
- * krb5.get_init_creds_keytab(principal = nil, keytab = nil, service = nil)
130
+ * krb5.get_init_creds_keytab(principal = nil, keytab = nil, service = nil, ccache = nil)
131
131
  *
132
132
  * Acquire credentials for +principal+ from +keytab+ using +service+. If
133
133
  * no principal is specified, then a principal is derived from the service
@@ -135,16 +135,19 @@ static VALUE rkrb5_set_default_realm(int argc, VALUE* argv, VALUE self){
135
135
  *
136
136
  * If no keytab file is provided, the default keytab file is used. This is
137
137
  * typically /etc/krb5.keytab.
138
+ *
139
+ * If +ccache+ is supplied and is a Kerberos::Krb5::CredentialsCache, the
140
+ * resulting credentials will be stored in the credential cache.
138
141
  */
139
142
  static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
140
143
  RUBY_KRB5* ptr;
141
- VALUE v_user, v_keytab_name, v_service;
144
+ VALUE v_user, v_keytab_name, v_service, v_ccache;
142
145
  char* user;
143
146
  char* service;
144
147
  char keytab_name[MAX_KEYTAB_NAME_LEN];
145
148
 
146
149
  krb5_error_code kerror;
147
- krb5_get_init_creds_opt opt;
150
+ krb5_get_init_creds_opt* opt;
148
151
  krb5_creds cred;
149
152
 
150
153
  Data_Get_Struct(self, RUBY_KRB5, ptr);
@@ -152,7 +155,11 @@ static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
152
155
  if(!ptr->ctx)
153
156
  rb_raise(cKrb5Exception, "no context has been established");
154
157
 
155
- rb_scan_args(argc, argv, "03", &v_user, &v_keytab_name, &v_service);
158
+ kerror = krb5_get_init_creds_opt_alloc(ptr->ctx, &opt);
159
+ if(kerror)
160
+ rb_raise(cKrb5Exception, "krb5_get_init_creds_opt_alloc: %s", error_message(kerror));
161
+
162
+ rb_scan_args(argc, argv, "04", &v_user, &v_keytab_name, &v_service, &v_ccache);
156
163
 
157
164
  // We need the service information for later.
158
165
  if(NIL_P(v_service)){
@@ -173,8 +180,10 @@ static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
173
180
  &ptr->princ
174
181
  );
175
182
 
176
- if(kerror)
183
+ if(kerror) {
184
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
177
185
  rb_raise(cKrb5Exception, "krb5_sname_to_principal: %s", error_message(kerror));
186
+ }
178
187
  }
179
188
  else{
180
189
  Check_Type(v_user, T_STRING);
@@ -182,16 +191,20 @@ static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
182
191
 
183
192
  kerror = krb5_parse_name(ptr->ctx, user, &ptr->princ);
184
193
 
185
- if(kerror)
194
+ if(kerror) {
195
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
186
196
  rb_raise(cKrb5Exception, "krb5_parse_name: %s", error_message(kerror));
197
+ }
187
198
  }
188
199
 
189
200
  // Use the default keytab if none is specified.
190
201
  if(NIL_P(v_keytab_name)){
191
202
  kerror = krb5_kt_default_name(ptr->ctx, keytab_name, MAX_KEYTAB_NAME_LEN);
192
203
 
193
- if(kerror)
204
+ if(kerror) {
205
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
194
206
  rb_raise(cKrb5Exception, "krb5_kt_default_name: %s", error_message(kerror));
207
+ }
195
208
  }
196
209
  else{
197
210
  Check_Type(v_keytab_name, T_STRING);
@@ -204,10 +217,22 @@ static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
204
217
  &ptr->keytab
205
218
  );
206
219
 
207
- if(kerror)
220
+ if(kerror) {
221
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
208
222
  rb_raise(cKrb5Exception, "krb5_kt_resolve: %s", error_message(kerror));
223
+ }
224
+
225
+ // Set the credential cache from the supplied Kerberos::Krb5::CredentialsCache
226
+ if(!NIL_P(v_ccache)){
227
+ RUBY_KRB5_CCACHE* ccptr;
228
+ Data_Get_Struct(v_ccache, RUBY_KRB5_CCACHE, ccptr);
209
229
 
210
- krb5_get_init_creds_opt_init(&opt);
230
+ kerror = krb5_get_init_creds_opt_set_out_ccache(ptr->ctx, opt, ccptr->ccache);
231
+ if(kerror) {
232
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
233
+ rb_raise(cKrb5Exception, "krb5_get_init_creds_opt_set_out_ccache: %s", error_message(kerror));
234
+ }
235
+ }
211
236
 
212
237
  kerror = krb5_get_init_creds_keytab(
213
238
  ptr->ctx,
@@ -216,11 +241,15 @@ static VALUE rkrb5_get_init_creds_keytab(int argc, VALUE* argv, VALUE self){
216
241
  ptr->keytab,
217
242
  0,
218
243
  service,
219
- &opt
244
+ opt
220
245
  );
221
246
 
222
- if(kerror)
247
+ if(kerror) {
248
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
223
249
  rb_raise(cKrb5Exception, "krb5_get_init_creds_keytab: %s", error_message(kerror));
250
+ }
251
+
252
+ krb5_get_init_creds_opt_free(ptr->ctx, opt);
224
253
 
225
254
  return self;
226
255
  }
Binary file
@@ -2,19 +2,17 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'rkerberos'
5
- spec.version = '0.1.0'
6
- spec.author = 'Daniel Berger'
5
+ spec.version = '0.1.1'
6
+ spec.authors = ['Daniel Berger', 'Dominic Cleal']
7
7
  spec.license = 'Artistic 2.0'
8
- spec.email = 'djberg96@gmail.com'
9
- spec.homepage = 'http://github.com/djberg96/rkerberos'
10
- spec.platform = Gem::Platform::RUBY
8
+ spec.email = ['djberg96@gmail.com', 'dcleal@redhat.com']
9
+ spec.homepage = 'http://github.com/domcleal/rkerberos'
11
10
  spec.summary = 'A Ruby interface for the the Kerberos library'
12
11
  spec.test_files = Dir['test/test*']
13
12
  spec.extensions = ['ext/rkerberos/extconf.rb']
14
13
  spec.files = Dir['**/*'].reject{ |f| f.include?('git') || f.include?('tmp') }
15
14
 
16
- spec.rubyforge_project = 'rkerberos'
17
- spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST'] + Dir['ext/rkerberos/*.c']
15
+ spec.extra_rdoc_files = ['README.md', 'CHANGES', 'MANIFEST'] + Dir['ext/rkerberos/*.c']
18
16
 
19
17
  spec.add_dependency('rake-compiler')
20
18
 
@@ -129,6 +129,18 @@ class TC_Krb5 < Test::Unit::TestCase
129
129
  assert_nothing_raised{ @krb5.get_init_creds_keytab(@user, @keytab, @service) }
130
130
  end
131
131
 
132
+ test "get_init_creds_keytab accepts a credential cache" do
133
+ omit_unless(File.exists?(@keytab), "keytab file not found, skipping")
134
+ assert_nothing_raised{ @krb5.get_init_creds_keytab(@user, @keytab, @service, @ccache) }
135
+ end
136
+
137
+ test "get_init_creds_keytab stores credentials in the credential cache" do
138
+ omit_unless(File.exists?(@keytab), "keytab file not found, skipping")
139
+ ccache = Kerberos::Krb5::CredentialsCache.new
140
+ assert_nothing_raised{ @krb5.get_init_creds_keytab(@user, @keytab, @service, @ccache) }
141
+ assert_equal @user, ccache.primary_principal
142
+ end
143
+
132
144
  test "get_init_creds_keytab requires string arguments" do
133
145
  assert_raise(TypeError){ @krb5.get_init_creds_keytab(1) }
134
146
  assert_raise(TypeError){ @krb5.get_init_creds_keytab(@user, 1) }
@@ -21,6 +21,9 @@ class TC_Krb5_Keytab < Test::Unit::TestCase
21
21
  def self.startup
22
22
  file = Dir.tmpdir + "/test.keytab"
23
23
 
24
+ @@key_file = "FILE:" + file
25
+ @@home_dir = ENV['HOME'] || ENV['USER_PROFILE']
26
+
24
27
  PTY.spawn('kadmin.local') do |reader, writer, pid|
25
28
  reader.gets
26
29
  reader.expect(/local:\s+/)
@@ -31,9 +34,6 @@ class TC_Krb5_Keytab < Test::Unit::TestCase
31
34
  writer.puts("ktadd -k #{file} testuser2")
32
35
  reader.expect(/local:\s+/)
33
36
  end
34
-
35
- @@key_file = "FILE:" + file
36
- @@home_dir = ENV['HOME'] || ENV['USER_PROFILE']
37
37
  end
38
38
 
39
39
  def setup
metadata CHANGED
@@ -1,155 +1,145 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rkerberos
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Daniel Berger
9
+ - Dominic Cleal
14
10
  autorequire:
15
11
  bindir: bin
16
12
  cert_chain: []
17
-
18
- date: 2011-04-28 00:00:00 -06:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2013-05-08 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: rake-compiler
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
33
23
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: test-unit
37
24
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: test-unit
33
+ requirement: !ruby/object:Gem::Requirement
39
34
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 11
44
- segments:
45
- - 2
46
- - 1
47
- - 0
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
48
38
  version: 2.1.0
49
39
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: dbi-dbrc
53
40
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.1.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: dbi-dbrc
49
+ requirement: !ruby/object:Gem::Requirement
55
50
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 31
60
- segments:
61
- - 1
62
- - 1
63
- - 6
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
64
54
  version: 1.1.6
65
55
  type: :development
66
- version_requirements: *id003
67
- description: " The rkerberos library is an interface for the Kerberos 5 network\n authentication protocol. It wraps the Kerberos C API.\n"
68
- email: djberg96@gmail.com
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.1.6
63
+ description: ! " The rkerberos library is an interface for the Kerberos 5 network\n
64
+ \ authentication protocol. It wraps the Kerberos C API.\n"
65
+ email:
66
+ - djberg96@gmail.com
67
+ - dcleal@redhat.com
69
68
  executables: []
70
-
71
- extensions:
69
+ extensions:
72
70
  - ext/rkerberos/extconf.rb
73
- extra_rdoc_files:
74
- - README
71
+ extra_rdoc_files:
72
+ - README.md
75
73
  - CHANGES
76
74
  - MANIFEST
75
+ - ext/rkerberos/context.c
76
+ - ext/rkerberos/keytab.c
77
77
  - ext/rkerberos/principal.c
78
- - ext/rkerberos/rkerberos.c
79
78
  - ext/rkerberos/kadm5.c
80
79
  - ext/rkerberos/keytab_entry.c
81
- - ext/rkerberos/context.c
82
- - ext/rkerberos/keytab.c
80
+ - ext/rkerberos/config.c
81
+ - ext/rkerberos/rkerberos.c
83
82
  - ext/rkerberos/ccache.c
84
83
  - ext/rkerberos/policy.c
85
- - ext/rkerberos/config.c
86
- files:
87
- - Rakefile
88
- - README
89
- - rkerberos.gemspec
90
- - CHANGES
84
+ files:
85
+ - MANIFEST
86
+ - README.md
87
+ - test/test_config.rb
88
+ - test/test_krb5_keytab.rb
89
+ - test/test_keytab_entry.rb
90
+ - test/test_context.rb
91
91
  - test/test_principal.rb
92
92
  - test/test_credentials_cache.rb
93
- - test/test_config.rb
94
93
  - test/test_krb5.rb
95
- - test/test_context.rb
96
- - test/test_krb5_keytab.rb
97
94
  - test/test_kadm5.rb
98
- - test/test_keytab_entry.rb
99
95
  - test/test_policy.rb
100
- - MANIFEST
96
+ - Rakefile
97
+ - lib/rkerberos.so
101
98
  - ext/rkerberos/extconf.rb
99
+ - ext/rkerberos/rkerberos.h
100
+ - ext/rkerberos/context.c
101
+ - ext/rkerberos/keytab.c
102
102
  - ext/rkerberos/principal.c
103
- - ext/rkerberos/rkerberos.c
104
103
  - ext/rkerberos/kadm5.c
105
104
  - ext/rkerberos/keytab_entry.c
106
- - ext/rkerberos/context.c
107
- - ext/rkerberos/keytab.c
105
+ - ext/rkerberos/config.c
106
+ - ext/rkerberos/rkerberos.c
108
107
  - ext/rkerberos/ccache.c
109
108
  - ext/rkerberos/policy.c
110
- - ext/rkerberos/rkerberos.h
111
- - ext/rkerberos/config.c
112
- has_rdoc: true
113
- homepage: http://github.com/djberg96/rkerberos
114
- licenses:
109
+ - rkerberos.gemspec
110
+ - CHANGES
111
+ homepage: http://github.com/domcleal/rkerberos
112
+ licenses:
115
113
  - Artistic 2.0
116
114
  post_install_message:
117
115
  rdoc_options: []
118
-
119
- require_paths:
116
+ require_paths:
120
117
  - lib
121
- required_ruby_version: !ruby/object:Gem::Requirement
118
+ required_ruby_version: !ruby/object:Gem::Requirement
122
119
  none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- hash: 3
127
- segments:
128
- - 0
129
- version: "0"
130
- required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
125
  none: false
132
- requirements:
133
- - - ">="
134
- - !ruby/object:Gem::Version
135
- hash: 3
136
- segments:
137
- - 0
138
- version: "0"
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
139
130
  requirements: []
140
-
141
- rubyforge_project: rkerberos
142
- rubygems_version: 1.6.2
131
+ rubyforge_project:
132
+ rubygems_version: 1.8.25
143
133
  signing_key:
144
134
  specification_version: 3
145
135
  summary: A Ruby interface for the the Kerberos library
146
- test_files:
136
+ test_files:
137
+ - test/test_config.rb
138
+ - test/test_krb5_keytab.rb
139
+ - test/test_keytab_entry.rb
140
+ - test/test_context.rb
147
141
  - test/test_principal.rb
148
142
  - test/test_credentials_cache.rb
149
- - test/test_config.rb
150
143
  - test/test_krb5.rb
151
- - test/test_context.rb
152
- - test/test_krb5_keytab.rb
153
144
  - test/test_kadm5.rb
154
- - test/test_keytab_entry.rb
155
145
  - test/test_policy.rb