From f1e892791280adbb49669f6e26bc15837562a12d Mon Sep 17 00:00:00 2001 From: Robert Bigelow Date: Fri, 11 Apr 2014 15:59:27 -0400 Subject: [PATCH 1/3] Added pwexpire function to set password expiration dates --- PyKAdminPrincipalObject.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/PyKAdminPrincipalObject.c b/PyKAdminPrincipalObject.c index 8b12278..03c66af 100644 --- a/PyKAdminPrincipalObject.c +++ b/PyKAdminPrincipalObject.c @@ -101,6 +101,25 @@ static PyObject *KAdminPrincipal_set_expire(PyKAdminPrincipalObject *self, PyObj Py_RETURN_TRUE; } +static PyObject *KAdminPrincipal_set_pwexpire(PyKAdminPrincipalObject *self, PyObject *args, PyObject *kwds) { + + kadm5_ret_t retval; + time_t date = 0; + char *expire = NULL; + + if (!PyArg_ParseTuple(args, "s", &expire)) + return NULL; + + date = get_date(expire); + + self->entry.pw_expiration = date; + + retval = kadm5_modify_principal(self->kadmin->server_handle, &self->entry, KADM5_PW_EXPIRATION); + if (retval != 0x0) { PyKAdmin_RaiseKAdminError(retval, "kadm5_modify_principal"); return NULL; } + + Py_RETURN_TRUE; +} + static PyObject *KAdminPrincipal_set_policy(PyKAdminPrincipalObject *self, PyObject *args, PyObject *kwds) { kadm5_ret_t retval; @@ -227,6 +246,7 @@ static PyMethodDef KAdminPrincipal_methods[] = { {"randomize_key", (PyCFunction)KAdminPrincipal_randomize_key, METH_VARARGS, ""}, {"expire", (PyCFunction)KAdminPrincipal_set_expire, METH_VARARGS, ""}, + {"pwexpire", (PyCFunction)KAdminPrincipal_set_pwexpire, METH_VARARGS, ""}, {"set_policy", (PyCFunction)KAdminPrincipal_set_policy, METH_VARARGS, ""}, {"clear_policy", (PyCFunction)KAdminPrincipal_clear_policy, METH_VARARGS, ""}, From d59c4168862222598878e802e31d5e4b0c382119 Mon Sep 17 00:00:00 2001 From: Robert Bigelow Date: Tue, 17 Jun 2014 12:16:34 -0400 Subject: [PATCH 2/3] Bugfix: Memory wasn't being allocated for policy name string --- PyKAdminPrincipalObject.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/PyKAdminPrincipalObject.c b/PyKAdminPrincipalObject.c index 03c66af..1d05ea5 100644 --- a/PyKAdminPrincipalObject.c +++ b/PyKAdminPrincipalObject.c @@ -8,6 +8,11 @@ #define IS_NULL(ptr) (ptr == NULL) static void KAdminPrincipal_dealloc(PyKAdminPrincipalObject *self) { + + // If policy string was allocated, free it + if (self->entry.policy != NULL) { + free(self->entry.policy); + } kadm5_free_principal_ent(self->kadmin->server_handle, &self->entry); @@ -128,7 +133,13 @@ static PyObject *KAdminPrincipal_set_policy(PyKAdminPrincipalObject *self, PyObj if (!PyArg_ParseTuple(args, "s", &policy)) return NULL; - strcpy(self->entry.policy, policy); + // If we already allocated a policy string, free it + if (self->entry.policy != NULL) { + free(self->entry.policy); + } + + // Copy the string so we can use it after Python frees it + self->entry.policy = strdup(policy); retval = kadm5_modify_principal(self->kadmin->server_handle, &self->entry, KADM5_POLICY); if (retval != 0x0) { PyKAdmin_RaiseKAdminError(retval, "kadm5_modify_principal"); return NULL; } From d965b80f55273b2f491e8c977a0ef15b410ac667 Mon Sep 17 00:00:00 2001 From: Robert Bigelow Date: Wed, 18 Jun 2014 10:46:34 -0400 Subject: [PATCH 3/3] Bugfix: Don't free self->entry on dealloc, python autofrees it --- PyKAdminPrincipalObject.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/PyKAdminPrincipalObject.c b/PyKAdminPrincipalObject.c index 1d05ea5..2a647e8 100644 --- a/PyKAdminPrincipalObject.c +++ b/PyKAdminPrincipalObject.c @@ -9,11 +9,6 @@ static void KAdminPrincipal_dealloc(PyKAdminPrincipalObject *self) { - // If policy string was allocated, free it - if (self->entry.policy != NULL) { - free(self->entry.policy); - } - kadm5_free_principal_ent(self->kadmin->server_handle, &self->entry); Py_XDECREF(self->kadmin);