Make connection failure message more clear
[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", admin_principal);
18
19     retval = kadm5_init_with_skey(admin_principal, NULL,
20                 KADM5_ADMIN_SERVICE, &params, KADM5_STRUCT_VERSION,
21                 KADM5_API_VERSION_2, NULL, &handle);
22     if (retval || !handle) {
23         com_err(prog, retval, "while initializing kadm5");
24         exit(1);
25     }
26 }
27
28 void ceo_kadm_cleanup() {
29     debug("kadmin: cleaning up");
30     kadm5_destroy(handle);
31 }
32
33 int ceo_add_princ(char *user, char *password) {
34     krb5_error_code retval;
35     kadm5_principal_ent_rec princ;
36     memset((void *) &princ, 0, sizeof(princ));
37
38     debug("kadmin: adding principal %s", user);
39
40     if ((retval = krb5_parse_name(context, user, &princ.principal))) {
41         com_err(prog, retval, "while parsing principal name");
42         return retval;
43     }
44
45     if ((retval = kadm5_create_principal(handle, &princ, KADM5_PRINCIPAL, password))) {
46         com_err(prog, retval, "while creating principal");
47         return retval;
48     }
49
50     krb5_free_principal(context, princ.principal);
51     return 0;
52 }
53
54 int ceo_del_princ(char *user) {
55     krb5_error_code retval;
56     krb5_principal princ;
57
58     debug("kadmin: deleting principal %s", user);
59
60     if ((retval = krb5_parse_name(context, user, &princ))) {
61         com_err(prog, retval, "while parsing principal name");
62         return retval;
63     }
64
65     retval = kadm5_delete_principal(handle, princ);
66     if (retval && retval != KADM5_UNK_PRINC) {
67         com_err(prog, retval, "while deleting principal");
68         return retval;
69     }
70
71     krb5_free_principal(context, princ);
72     return 0;
73 }