kerberos 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,11 @@
1
+
2
+ To install find out where your kerberos libraries and header files are, then do the following:
3
+
4
+ ruby extconf.rb --with-kerberos-dir=/kerberos/install/path (/usr/local,/usr,etc..)
5
+ make
6
+ make install
7
+
8
+
9
+ If the compile fails make sure you have the libraries and krb5.h on your system, and that krb5.h is the MIT version, NOT Heimdal.
10
+
11
+
data/bin/example.rb ADDED
@@ -0,0 +1,55 @@
1
+
2
+ require 'kerberos'
3
+ include Kerberos
4
+
5
+ krb5 = Krb5.new
6
+ kadm5 = Kadm5.new
7
+
8
+ adminuser = 'test/admin'
9
+ adminpass = 'mypass'
10
+ user='test'
11
+ pass='pass'
12
+ pass2='pass2'
13
+
14
+ # Login as an administrative user
15
+ if kadm5.init_with_password(adminuser,adminpass)
16
+ p "Authenticated"
17
+ else
18
+ p kadm5.errstr
19
+ end
20
+
21
+ # Delete the principal if it exists
22
+ if kadm5.delete_principal(user)
23
+ p "User deleted"
24
+ else
25
+ p kadm5.errstr
26
+ p "User not deleted"
27
+ end
28
+
29
+ # Create a user, change their password, authenticate to the new password, then delete it when we are done.
30
+
31
+ #options = {'policy' =>'mypolicy'}
32
+ options = {'attributes' => Kadm5::KRB5_KDB_DISALLOW_PROXIABLE|Kadm5::KRB5_KDB_PWCHANGE_SERVICE}
33
+ if kadm5.create_principal(user,pass,options)
34
+ p "User created"
35
+ res = nil
36
+ if krb5.change_password(user,pass,pass2)
37
+ p "Password changed"
38
+ if krb5.get_init_creds_password(user,pass2)
39
+ p "Authenticated with new password"
40
+ end
41
+ else
42
+ p krb5.errstr
43
+ p "Password not changed"
44
+ end
45
+ if kadm5.delete_principal(user)
46
+ p "User deleted"
47
+ else
48
+ p kadm5.errstr
49
+ p "User not deleted"
50
+ end
51
+ else
52
+ p "User not created"
53
+ p kadm5.errstr
54
+ end
55
+
data/ext/admin.h ADDED
@@ -0,0 +1,517 @@
1
+ /*
2
+ * Copyright 2001 by the Massachusetts Institute of Technology.
3
+ * All Rights Reserved.
4
+ *
5
+ * Export of this software from the United States of America may
6
+ * require a specific license from the United States Government.
7
+ * It is the responsibility of any person or organization contemplating
8
+ * export to obtain such a license before exporting.
9
+ *
10
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
11
+ * distribute this software and its documentation for any purpose and
12
+ * without fee is hereby granted, provided that the above copyright
13
+ * notice appear in all copies and that both that copyright notice and
14
+ * this permission notice appear in supporting documentation, and that
15
+ * the name of M.I.T. not be used in advertising or publicity pertaining
16
+ * to distribution of the software without specific, written prior
17
+ * permission. Furthermore if you modify this software you must label
18
+ * your software as modified software and not distribute it in such a
19
+ * fashion that it might be confused with the original M.I.T. software.
20
+ * M.I.T. makes no representations about the suitability of
21
+ * this software for any purpose. It is provided "as is" without express
22
+ * or implied warranty.
23
+ *
24
+ * $Id: admin.h,v 1.6 2003/01/30 13:28:36 ajk Exp $
25
+ *
26
+ * Header file for Perl interface to libkadm5clnt
27
+ *
28
+ * The file admin.h from the MIT Kerberos 5 distribution does not get
29
+ * installed by default and it depends on other header files that
30
+ * don't get installed. This file contains only what we need from
31
+ * admin.h, kadm_err.h, and k5-int.h.
32
+ */
33
+
34
+ #if !defined(USE_KADM5_API_VERSION)
35
+ #define USE_KADM5_API_VERSION 2
36
+ #endif
37
+
38
+ /* only what we need from k5-int.h */
39
+
40
+ /*
41
+ * Note --- these structures cannot be modified without changing the
42
+ * database version number in libkdb.a, but should be expandable by
43
+ * adding new tl_data types.
44
+ */
45
+ typedef struct _krb5_tl_data {
46
+ struct _krb5_tl_data* tl_data_next; /* NOT saved */
47
+ krb5_int16 tl_data_type;
48
+ krb5_int16 tl_data_length;
49
+ krb5_octet * tl_data_contents;
50
+ } krb5_tl_data;
51
+
52
+ /*
53
+ * If this ever changes up the version number and make the arrays be as
54
+ * big as necessary.
55
+ *
56
+ * Currently the first type is the enctype and the second is the salt type.
57
+ */
58
+ typedef struct _krb5_key_data {
59
+ krb5_int16 key_data_ver; /* Version */
60
+ krb5_int16 key_data_kvno; /* Key Version */
61
+ krb5_int16 key_data_type[2]; /* Array of types */
62
+ krb5_int16 key_data_length[2]; /* Array of lengths */
63
+ krb5_octet * key_data_contents[2]; /* Array of pointers */
64
+ } krb5_key_data;
65
+
66
+ /* only what we need from admin.h */
67
+
68
+ #define KADM5_ADMIN_SERVICE "kadmin/admin"
69
+ #define KADM5_CHANGEPW_SERVICE "kadmin/changepw"
70
+ #define KADM5_HIST_PRINCIPAL "kadmin/history"
71
+
72
+ typedef char *kadm5_policy_t;
73
+ typedef long kadm5_ret_t;
74
+
75
+ /*
76
+ * Succsessfull return code
77
+ */
78
+ #define KADM5_OK 0
79
+
80
+ /*
81
+ * Field masks
82
+ */
83
+
84
+ /* kadm5_principal_ent_t */
85
+ #define KADM5_PRINCIPAL 0x000001
86
+ #define KADM5_PRINC_EXPIRE_TIME 0x000002
87
+ #define KADM5_PW_EXPIRATION 0x000004
88
+ #define KADM5_LAST_PWD_CHANGE 0x000008
89
+ #define KADM5_ATTRIBUTES 0x000010
90
+ #define KADM5_MAX_LIFE 0x000020
91
+ #define KADM5_MOD_TIME 0x000040
92
+ #define KADM5_MOD_NAME 0x000080
93
+ #define KADM5_KVNO 0x000100
94
+ #define KADM5_MKVNO 0x000200
95
+ #define KADM5_AUX_ATTRIBUTES 0x000400
96
+ #define KADM5_POLICY 0x000800
97
+ #define KADM5_POLICY_CLR 0x001000
98
+ /* version 2 masks */
99
+ #define KADM5_MAX_RLIFE 0x002000
100
+ #define KADM5_LAST_SUCCESS 0x004000
101
+ #define KADM5_LAST_FAILED 0x008000
102
+ #define KADM5_FAIL_AUTH_COUNT 0x010000
103
+ #define KADM5_KEY_DATA 0x020000
104
+ #define KADM5_TL_DATA 0x040000
105
+ /* all but KEY_DATA and TL_DATA */
106
+ #define KADM5_PRINCIPAL_NORMAL_MASK 0x01ffff
107
+
108
+ /* kadm5_policy_ent_t */
109
+ #define KADM5_PW_MAX_LIFE 0x004000
110
+ #define KADM5_PW_MIN_LIFE 0x008000
111
+ #define KADM5_PW_MIN_LENGTH 0x010000
112
+ #define KADM5_PW_MIN_CLASSES 0x020000
113
+ #define KADM5_PW_HISTORY_NUM 0x040000
114
+ #define KADM5_REF_COUNT 0x080000
115
+
116
+ /* kadm5_config_params */
117
+ #define KADM5_CONFIG_REALM 0x000001
118
+ #define KADM5_CONFIG_DBNAME 0x000002
119
+ #define KADM5_CONFIG_MKEY_NAME 0x000004
120
+ #define KADM5_CONFIG_MAX_LIFE 0x000008
121
+ #define KADM5_CONFIG_MAX_RLIFE 0x000010
122
+ #define KADM5_CONFIG_EXPIRATION 0x000020
123
+ #define KADM5_CONFIG_FLAGS 0x000040
124
+ #define KADM5_CONFIG_ADMIN_KEYTAB 0x000080
125
+ #define KADM5_CONFIG_STASH_FILE 0x000100
126
+ #define KADM5_CONFIG_ENCTYPE 0x000200
127
+ #define KADM5_CONFIG_ADBNAME 0x000400
128
+ #define KADM5_CONFIG_ADB_LOCKFILE 0x000800
129
+ #define KADM5_CONFIG_PROFILE 0x001000
130
+ #define KADM5_CONFIG_ACL_FILE 0x002000
131
+ #define KADM5_CONFIG_KADMIND_PORT 0x004000
132
+ #define KADM5_CONFIG_ENCTYPES 0x008000
133
+ #define KADM5_CONFIG_ADMIN_SERVER 0x010000
134
+ #define KADM5_CONFIG_DICT_FILE 0x020000
135
+ #define KADM5_CONFIG_MKEY_FROM_KBD 0x040000
136
+ #define KADM5_CONFIG_KPASSWD_PORT 0x080000
137
+
138
+ /*
139
+ * permission bits
140
+ */
141
+ #define KADM5_PRIV_GET 0x01
142
+ #define KADM5_PRIV_ADD 0x02
143
+ #define KADM5_PRIV_MODIFY 0x04
144
+ #define KADM5_PRIV_DELETE 0x08
145
+
146
+ /*
147
+ * API versioning constants
148
+ */
149
+
150
+ #define KADM5_MASK_BITS 0xffffff00
151
+
152
+ #define KADM5_STRUCT_VERSION_MASK 0x12345600
153
+ #define KADM5_STRUCT_VERSION_1 (KADM5_STRUCT_VERSION_MASK|0x01)
154
+ #define KADM5_STRUCT_VERSION KADM5_STRUCT_VERSION_1
155
+
156
+ #define KADM5_API_VERSION_MASK 0x12345700
157
+ #define KADM5_API_VERSION_1 (KADM5_API_VERSION_MASK|0x01)
158
+ #define KADM5_API_VERSION_2 (KADM5_API_VERSION_MASK|0x02)
159
+
160
+ typedef struct _kadm5_principal_ent_t_v2 {
161
+ krb5_principal principal;
162
+ krb5_timestamp princ_expire_time;
163
+ krb5_timestamp last_pwd_change;
164
+ krb5_timestamp pw_expiration;
165
+ krb5_deltat max_life;
166
+ krb5_principal mod_name;
167
+ krb5_timestamp mod_date;
168
+ krb5_flags attributes;
169
+ krb5_kvno kvno;
170
+ krb5_kvno mkvno;
171
+ char *policy;
172
+ long aux_attributes;
173
+
174
+ /* version 2 fields */
175
+ krb5_deltat max_renewable_life;
176
+ krb5_timestamp last_success;
177
+ krb5_timestamp last_failed;
178
+ krb5_kvno fail_auth_count;
179
+ krb5_int16 n_key_data;
180
+ krb5_int16 n_tl_data;
181
+ krb5_tl_data *tl_data;
182
+ krb5_key_data *key_data;
183
+ } kadm5_principal_ent_rec_v2, *kadm5_principal_ent_t_v2;
184
+
185
+ typedef struct _kadm5_principal_ent_t_v1 {
186
+ krb5_principal principal;
187
+ krb5_timestamp princ_expire_time;
188
+ krb5_timestamp last_pwd_change;
189
+ krb5_timestamp pw_expiration;
190
+ krb5_deltat max_life;
191
+ krb5_principal mod_name;
192
+ krb5_timestamp mod_date;
193
+ krb5_flags attributes;
194
+ krb5_kvno kvno;
195
+ krb5_kvno mkvno;
196
+ char *policy;
197
+ long aux_attributes;
198
+ } kadm5_principal_ent_rec_v1, *kadm5_principal_ent_t_v1;
199
+
200
+ #if USE_KADM5_API_VERSION == 1
201
+ typedef struct _kadm5_principal_ent_t_v1
202
+ kadm5_principal_ent_rec, *kadm5_principal_ent_t;
203
+ #else
204
+ typedef struct _kadm5_principal_ent_t_v2
205
+ kadm5_principal_ent_rec, *kadm5_principal_ent_t;
206
+ #endif
207
+
208
+ typedef struct _kadm5_policy_ent_t {
209
+ char *policy;
210
+ long pw_min_life;
211
+ long pw_max_life;
212
+ long pw_min_length;
213
+ long pw_min_classes;
214
+ long pw_history_num;
215
+ long policy_refcnt;
216
+ } kadm5_policy_ent_rec, *kadm5_policy_ent_t;
217
+
218
+ typedef struct __krb5_key_salt_tuple {
219
+ krb5_enctype ks_enctype;
220
+ krb5_int32 ks_salttype;
221
+ } krb5_key_salt_tuple;
222
+
223
+ /*
224
+ * Data structure returned by kadm5_get_config_params()
225
+ */
226
+ typedef struct _kadm5_config_params {
227
+ long mask;
228
+ char *realm;
229
+ char *profile;
230
+ int kadmind_port;
231
+ int kpasswd_port;
232
+
233
+ char *admin_server;
234
+
235
+ char *dbname;
236
+ char *admin_dbname;
237
+ char *admin_lockfile;
238
+ char *admin_keytab;
239
+ char *acl_file;
240
+ char *dict_file;
241
+
242
+ int mkey_from_kbd;
243
+ char *stash_file;
244
+ char *mkey_name;
245
+ krb5_enctype enctype;
246
+ krb5_deltat max_life;
247
+ krb5_deltat max_rlife;
248
+ krb5_timestamp expiration;
249
+ krb5_flags flags;
250
+ krb5_key_salt_tuple *keysalts;
251
+ krb5_int32 num_keysalts;
252
+ } kadm5_config_params;
253
+
254
+ /* Salt types */
255
+ #define KRB5_KDB_SALTTYPE_NORMAL 0
256
+ #define KRB5_KDB_SALTTYPE_V4 1
257
+ #define KRB5_KDB_SALTTYPE_NOREALM 2
258
+ #define KRB5_KDB_SALTTYPE_ONLYREALM 3
259
+ #define KRB5_KDB_SALTTYPE_SPECIAL 4
260
+ #define KRB5_KDB_SALTTYPE_AFS3 5
261
+
262
+ /* Database attributes */
263
+ #define KRB5_KDB_DISALLOW_POSTDATED 0x00000001
264
+ #define KRB5_KDB_DISALLOW_FORWARDABLE 0x00000002
265
+ #define KRB5_KDB_DISALLOW_TGT_BASED 0x00000004
266
+ #define KRB5_KDB_DISALLOW_RENEWABLE 0x00000008
267
+ #define KRB5_KDB_DISALLOW_PROXIABLE 0x00000010
268
+ #define KRB5_KDB_DISALLOW_DUP_SKEY 0x00000020
269
+ #define KRB5_KDB_DISALLOW_ALL_TIX 0x00000040
270
+ #define KRB5_KDB_REQUIRES_PRE_AUTH 0x00000080
271
+ #define KRB5_KDB_REQUIRES_HW_AUTH 0x00000100
272
+ #define KRB5_KDB_REQUIRES_PWCHANGE 0x00000200
273
+ #define KRB5_KDB_DISALLOW_SVR 0x00001000
274
+ #define KRB5_KDB_PWCHANGE_SERVICE 0x00002000
275
+ #define KRB5_KDB_SUPPORT_DESMD5 0x00004000
276
+ #define KRB5_KDB_NEW_PRINC 0x00008000
277
+
278
+ /* Error table values */
279
+ #define KADM5_FAILURE (43787520L)
280
+ #define KADM5_AUTH_GET (43787521L)
281
+ #define KADM5_AUTH_ADD (43787522L)
282
+ #define KADM5_AUTH_MODIFY (43787523L)
283
+ #define KADM5_AUTH_DELETE (43787524L)
284
+ #define KADM5_AUTH_INSUFFICIENT (43787525L)
285
+ #define KADM5_BAD_DB (43787526L)
286
+ #define KADM5_DUP (43787527L)
287
+ #define KADM5_RPC_ERROR (43787528L)
288
+ #define KADM5_NO_SRV (43787529L)
289
+ #define KADM5_BAD_HIST_KEY (43787530L)
290
+ #define KADM5_NOT_INIT (43787531L)
291
+ #define KADM5_UNK_PRINC (43787532L)
292
+ #define KADM5_UNK_POLICY (43787533L)
293
+ #define KADM5_BAD_MASK (43787534L)
294
+ #define KADM5_BAD_CLASS (43787535L)
295
+ #define KADM5_BAD_LENGTH (43787536L)
296
+ #define KADM5_BAD_POLICY (43787537L)
297
+ #define KADM5_BAD_PRINCIPAL (43787538L)
298
+ #define KADM5_BAD_AUX_ATTR (43787539L)
299
+ #define KADM5_BAD_HISTORY (43787540L)
300
+ #define KADM5_BAD_MIN_PASS_LIFE (43787541L)
301
+ #define KADM5_PASS_Q_TOOSHORT (43787542L)
302
+ #define KADM5_PASS_Q_CLASS (43787543L)
303
+ #define KADM5_PASS_Q_DICT (43787544L)
304
+ #define KADM5_PASS_REUSE (43787545L)
305
+ #define KADM5_PASS_TOOSOON (43787546L)
306
+ #define KADM5_POLICY_REF (43787547L)
307
+ #define KADM5_INIT (43787548L)
308
+ #define KADM5_BAD_PASSWORD (43787549L)
309
+ #define KADM5_PROTECT_PRINCIPAL (43787550L)
310
+ #define KADM5_BAD_SERVER_HANDLE (43787551L)
311
+ #define KADM5_BAD_STRUCT_VERSION (43787552L)
312
+ #define KADM5_OLD_STRUCT_VERSION (43787553L)
313
+ #define KADM5_NEW_STRUCT_VERSION (43787554L)
314
+ #define KADM5_BAD_API_VERSION (43787555L)
315
+ #define KADM5_OLD_LIB_API_VERSION (43787556L)
316
+ #define KADM5_OLD_SERVER_API_VERSION (43787557L)
317
+ #define KADM5_NEW_LIB_API_VERSION (43787558L)
318
+ #define KADM5_NEW_SERVER_API_VERSION (43787559L)
319
+ #define KADM5_SECURE_PRINC_MISSING (43787560L)
320
+ #define KADM5_NO_RENAME_SALT (43787561L)
321
+ #define KADM5_BAD_CLIENT_PARAMS (43787562L)
322
+ #define KADM5_BAD_SERVER_PARAMS (43787563L)
323
+ #define KADM5_AUTH_LIST (43787564L)
324
+ #define KADM5_AUTH_CHANGEPW (43787565L)
325
+ #define KADM5_GSS_ERROR (43787566L)
326
+ #define KADM5_BAD_TL_TYPE (43787567L)
327
+ #define KADM5_MISSING_CONF_PARAMS (43787568L)
328
+ #define KADM5_BAD_SERVER_NAME (43787569L)
329
+ #define KADM5_AUTH_SETKEY (43787570L)
330
+ #define KADM5_SETKEY_DUP_ENCTYPES (43787571L)
331
+ #define KADM5_SETV4KEY_INVAL_ENCTYPE (43787572L)
332
+ #define KADM5_SETKEY3_ETYPE_MISMATCH (43787573L)
333
+
334
+
335
+
336
+ /*
337
+ * functions
338
+ */
339
+
340
+ #if USE_KADM5_API_VERSION > 1
341
+ krb5_error_code kadm5_get_config_params(krb5_context context,
342
+ char *kdcprofile, char *kdcenv,
343
+ kadm5_config_params *params_in,
344
+ kadm5_config_params *params_out);
345
+
346
+ krb5_error_code kadm5_free_config_params(krb5_context context,
347
+ kadm5_config_params *params);
348
+
349
+ krb5_error_code kadm5_free_realm_params(krb5_context kcontext,
350
+ kadm5_config_params *params);
351
+
352
+ krb5_error_code kadm5_get_admin_service_name(krb5_context, char *,
353
+ char *, size_t);
354
+ #endif
355
+
356
+ kadm5_ret_t kadm5_init(char *client_name, char *pass,
357
+ char *service_name,
358
+ #if USE_KADM5_API_VERSION == 1
359
+ char *realm,
360
+ #else
361
+ kadm5_config_params *params,
362
+ #endif
363
+ krb5_ui_4 struct_version,
364
+ krb5_ui_4 api_version,
365
+ void **server_handle);
366
+ kadm5_ret_t kadm5_init_with_password(char *client_name,
367
+ char *pass,
368
+ char *service_name,
369
+ #if USE_KADM5_API_VERSION == 1
370
+ char *realm,
371
+ #else
372
+ kadm5_config_params *params,
373
+ #endif
374
+ krb5_ui_4 struct_version,
375
+ krb5_ui_4 api_version,
376
+ void **server_handle);
377
+ kadm5_ret_t kadm5_init_with_skey(char *client_name,
378
+ char *keytab,
379
+ char *service_name,
380
+ #if USE_KADM5_API_VERSION == 1
381
+ char *realm,
382
+ #else
383
+ kadm5_config_params *params,
384
+ #endif
385
+ krb5_ui_4 struct_version,
386
+ krb5_ui_4 api_version,
387
+ void **server_handle);
388
+ #if USE_KADM5_API_VERSION > 1
389
+ kadm5_ret_t kadm5_init_with_creds(char *client_name,
390
+ krb5_ccache cc,
391
+ char *service_name,
392
+ kadm5_config_params *params,
393
+ krb5_ui_4 struct_version,
394
+ krb5_ui_4 api_version,
395
+ void **server_handle);
396
+ #endif
397
+ kadm5_ret_t kadm5_lock(void *server_handle);
398
+ kadm5_ret_t kadm5_unlock(void *server_handle);
399
+ kadm5_ret_t kadm5_flush(void *server_handle);
400
+ kadm5_ret_t kadm5_destroy(void *server_handle);
401
+ kadm5_ret_t kadm5_create_principal(void *server_handle,
402
+ kadm5_principal_ent_t ent,
403
+ long mask, char *pass);
404
+ kadm5_ret_t kadm5_create_principal_3(void *server_handle,
405
+ kadm5_principal_ent_t ent,
406
+ long mask,
407
+ int n_ks_tuple,
408
+ krb5_key_salt_tuple *ks_tuple,
409
+ char *pass);
410
+ kadm5_ret_t kadm5_delete_principal(void *server_handle,
411
+ krb5_principal principal);
412
+ kadm5_ret_t kadm5_modify_principal(void *server_handle,
413
+ kadm5_principal_ent_t ent,
414
+ long mask);
415
+ kadm5_ret_t kadm5_rename_principal(void *server_handle,
416
+ krb5_principal,krb5_principal);
417
+ #if USE_KADM5_API_VERSION == 1
418
+ kadm5_ret_t kadm5_get_principal(void *server_handle,
419
+ krb5_principal principal,
420
+ kadm5_principal_ent_t *ent);
421
+ #else
422
+ kadm5_ret_t kadm5_get_principal(void *server_handle,
423
+ krb5_principal principal,
424
+ kadm5_principal_ent_t ent,
425
+ long mask);
426
+ #endif
427
+ kadm5_ret_t kadm5_chpass_principal(void *server_handle,
428
+ krb5_principal principal,
429
+ char *pass);
430
+ kadm5_ret_t kadm5_chpass_principal_3(void *server_handle,
431
+ krb5_principal principal,
432
+ krb5_boolean keepold,
433
+ int n_ks_tuple,
434
+ krb5_key_salt_tuple *ks_tuple,
435
+ char *pass);
436
+ #if USE_KADM5_API_VERSION == 1
437
+ kadm5_ret_t kadm5_randkey_principal(void *server_handle,
438
+ krb5_principal principal,
439
+ krb5_keyblock **keyblock);
440
+ #else
441
+ kadm5_ret_t kadm5_randkey_principal(void *server_handle,
442
+ krb5_principal principal,
443
+ krb5_keyblock **keyblocks,
444
+ int *n_keys);
445
+ kadm5_ret_t kadm5_randkey_principal_3(void *server_handle,
446
+ krb5_principal principal,
447
+ krb5_boolean keepold,
448
+ int n_ks_tuple,
449
+ krb5_key_salt_tuple *ks_tuple,
450
+ krb5_keyblock **keyblocks,
451
+ int *n_keys);
452
+ #endif
453
+ kadm5_ret_t kadm5_setv4key_principal(void *server_handle,
454
+ krb5_principal principal,
455
+ krb5_keyblock *keyblock);
456
+
457
+ kadm5_ret_t kadm5_setkey_principal(void *server_handle,
458
+ krb5_principal principal,
459
+ krb5_keyblock *keyblocks,
460
+ int n_keys);
461
+
462
+ kadm5_ret_t kadm5_setkey_principal_3(void *server_handle,
463
+ krb5_principal principal,
464
+ krb5_boolean keepold,
465
+ int n_ks_tuple,
466
+ krb5_key_salt_tuple *ks_tuple,
467
+ krb5_keyblock *keyblocks,
468
+ int n_keys);
469
+
470
+ kadm5_ret_t kadm5_create_policy(void *server_handle,
471
+ kadm5_policy_ent_t ent,
472
+ long mask);
473
+
474
+ kadm5_ret_t kadm5_delete_policy(void *server_handle,
475
+ kadm5_policy_t policy);
476
+ kadm5_ret_t kadm5_modify_policy(void *server_handle,
477
+ kadm5_policy_ent_t ent,
478
+ long mask);
479
+
480
+ #if USE_KADM5_API_VERSION == 1
481
+ kadm5_ret_t kadm5_get_policy(void *server_handle,
482
+ kadm5_policy_t policy,
483
+ kadm5_policy_ent_t *ent);
484
+ #else
485
+ kadm5_ret_t kadm5_get_policy(void *server_handle,
486
+ kadm5_policy_t policy,
487
+ kadm5_policy_ent_t ent);
488
+ #endif
489
+ kadm5_ret_t kadm5_get_privs(void *server_handle,
490
+ long *privs);
491
+
492
+ kadm5_ret_t kadm5_chpass_principal_util(void *server_handle,
493
+ krb5_principal princ,
494
+ char *new_pw,
495
+ char **ret_pw,
496
+ char *msg_ret,
497
+ unsigned int msg_len);
498
+
499
+ kadm5_ret_t kadm5_free_principal_ent(void *server_handle,
500
+ kadm5_principal_ent_t
501
+ ent);
502
+ kadm5_ret_t kadm5_free_policy_ent(void *server_handle,
503
+ kadm5_policy_ent_t ent);
504
+
505
+ kadm5_ret_t kadm5_get_principals(void *server_handle,
506
+ char *exp, char ***princs,
507
+ int *count);
508
+
509
+ kadm5_ret_t kadm5_get_policies(void *server_handle,
510
+ char *exp, char ***pols,
511
+ int *count);
512
+
513
+
514
+ kadm5_ret_t kadm5_free_name_list(void *server_handle, char **names,
515
+ int count);
516
+
517
+
data/ext/extconf.rb ADDED
@@ -0,0 +1,12 @@
1
+
2
+ require 'mkmf'
3
+ extension_name = 'kerberos'
4
+ dir_config(extension_name)
5
+ have_header("krb5.h")
6
+ have_header("admin.h")
7
+ have_header("ruby_kerberos.h")
8
+ have_library("c", "main")
9
+ have_library("krb5","krb5_init_context")
10
+ have_library("kadm5clnt","kadm5_init_with_password")
11
+ create_makefile('ruby_kerberos')
12
+