8 This class handles kadm5 client library.
12 self
.codes
= self
.getDefined("common/kadm_err.h")
13 self
.kadm
= cdll
.LoadLibrary('libkadm5clnt.so')
15 def getDefined(self
, filename
):
17 Reads error codes from filename and puts them to the dictionary
20 file = open(filename
, 'r')
22 pattern
= "(#define)\s+(\S+)\s+\((\S+)L\)"
23 if re
.match(pattern
, line
):
24 out
= re
.match(pattern
, line
)
25 codes
[out
.group(3)] = out
.group(2)
28 def checkResult(self
, result
):
30 Check the result returned by called libraries and print error if something went wrong
34 print self
.__class
__.__name
__ + ": " + self
.codes
.get(c
, 'unknown')+" ("+c
+")"
38 def krb5_chpass_principal(self
, pclient
, ppassw
, ppassw_new
, prealm
, pservice
):
40 Changes password for principal
43 client
= c_char_p(pclient
)
44 passw
= c_char_p(ppassw
)
45 passw_new
= c_char_p(ppassw_new
)
46 realm
= c_char_p(prealm
)
47 service
= c_char_p(pservice
)
52 context
= krb5_context()
53 krb5_err
= self
.kadm
.kadm5_init_krb5_context(byref(context
))
54 if not self
.checkResult(krb5_err
):
58 params
= kadm5_config_params()
59 krb5_err
= self
.kadm
.kadm5_get_config_params(
61 byref(params
), byref(params
))
62 if not self
.checkResult(krb5_err
):
63 self
.kadm
.krb5_free_context(context
)
67 krb5_err
= self
.kadm
.kadm5_init(
71 krb5_ui_4(0x12345601), krb5_ui_4(0x12345702),
72 pointer(db_args
), pointer(server_h
))
73 if not self
.checkResult(krb5_err
):
74 self
.kadm
.krb5_free_context(context
)
77 # get principal structure
78 principal
= krb5_principal()
79 krb5_err
= self
.kadm
.krb5_parse_name(
83 if not self
.checkResult(krb5_err
):
84 self
.kadm
.krb5_free_context(context
)
88 krb5_err
= self
.kadm
.kadm5_chpass_principal(
92 if not self
.checkResult(krb5_err
):
93 self
.kadm
.krb5_free_context(context
)
97 self
.kadm
.krb5_free_context(context
)
101 if __name__
== '__main__':
102 client
= "test@CDTEL.LOCAL"
103 passw
= "testovac9pass"
104 passw_new
= "dal39pass"
105 realm
= "CDTEL.LOCAL"
106 service
= "kadmin/cdtel00pceux509.uxkdc.cdtel.cz"
109 pwc
.krb5_chpass_principal(client
, passw
, passw_new
, realm
, service
)