44af9130758024d8952b16b0fa97ba66a0c0f714
[mspang/pyceo.git] / src / kadm.c
1 #include <kadm5/admin.h>
2
3 #include "kadm.h"
4 #include "krb5.h"
5 #include "util.h"
6 #include "config.h"
7
8 extern char *prog;
9
10 static void *handle;
11
12 void ceo_kadm_init() {
13     krb5_error_code retval;
14     kadm5_config_params params;
15     memset((void *) &params, 0, sizeof(params));
16
17     debug("kadmin: initializing using keytab for %s", krb5_admin_principal);
18
19     retval = kadm5_init_with_skey(
20 #ifdef KADM5_API_VERSION_3
21         context,
22 #endif
23         krb5_admin_principal, NULL,
24         KADM5_ADMIN_SERVICE, &params, KADM5_STRUCT_VERSION,
25         KADM5_API_VERSION_2, NULL, &handle);
26     if (retval || !handle) {
27         com_err(prog, retval, "while initializing kadm5");
28         exit(1);
29     }
30 }
31
32 void ceo_kadm_cleanup() {
33     debug("kadmin: cleaning up");
34     kadm5_destroy(handle);
35 }
36
37 int ceo_add_princ(char *user, char *password) {
38     krb5_error_code retval;
39     krb5_principal princ;
40     memset((void *) &princ, 0, sizeof(princ));
41
42     debug("kadmin: adding principal %s", user);
43
44     if ((retval = krb5_parse_name(context, user, &princ))) {
45         com_err(prog, retval, "while parsing principal name");
46         return retval;
47     }
48
49     if ((retval = kadm5_chpass_principal(handle, princ, password))) {
50         com_err(prog, retval, "while creating principal");
51         return retval;
52     }
53
54     krb5_free_principal(context, princ);
55     return 0;
56 }
57
58 int ceo_del_princ(char *user) {
59     krb5_error_code retval;
60     krb5_principal princ;
61
62     debug("kadmin: deleting principal %s", user);
63
64     if ((retval = krb5_parse_name(context, user, &princ))) {
65         com_err(prog, retval, "while parsing principal name");
66         return retval;
67     }
68
69     retval = kadm5_delete_principal(handle, princ);
70     if (retval && retval != KADM5_UNK_PRINC) {
71         com_err(prog, retval, "while deleting principal");
72         return retval;
73     }
74
75     krb5_free_principal(context, princ);
76     return 0;
77 }