/* -*-c-*-
- *
- * $Id$
*
* Key files and data
*
static void keyexc_raise(int err)
{
- PyObject *arg = Py_BuildValue("(i)", err);
+ PyObject *arg = Py_BuildValue("(is)", err, key_strerror(err));
if (arg) PyErr_SetObject(keyexc, arg);
Py_XDECREF(arg);
}
rc = 1;
goto end;
tyerr:
- TYERR("expected flag string or flag/mask pair");
+ TYERR("expected flag string or integer bitfield");
end:
return (rc);
}
RETURN_ME;
}
+static PyObject *kdmeth_copy(PyObject *me, PyObject *arg, PyObject *kw)
+{
+ key_filter f = { 0, 0 };
+ static char *kwlist[] = { "filter", 0 };
+ key_data *kd;
+
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:copy", kwlist,
+ convfilter, &f))
+ return (0);
+ if ((kd = key_copydata(KEYDATA_KD(me), &f)) == 0)
+ RETURN_NONE;
+ else
+ return (keydata_pywrap(kd));
+}
+
static PyObject *kdmeth_write(PyObject *me, PyObject *arg, PyObject *kw)
{
key_filter f = { 0, 0 };
METH (split, "KD.split()")
KWMETH(write, "KD.write(filter = <any>) -> STRING")
KWMETH(encode, "KD.encode(filter = <any>) -> BYTES")
+ KWMETH(copy, "KD.encode(filter = <any>) -> KD")
METH (plock, "KD.plock(TAG) -> ENCRYPTED-KD")
METH (lock, "KD.lock(KEY) -> ENCRYPTED-KD")
#undef METHNAME
PyObject *kfobj;
uint32 id;
char *type;
- long exptime = KEXP_FOREVER;
+ unsigned long exptime = KEXP_FOREVER;
static char *kwlist[] = { "keyfile", "id", "type", "exptime", 0 };
key *k;
int err;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&sl:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&s|O&:new", kwlist,
keyfile_pytype, &kfobj, convu32, &id,
- &type, &exptime))
+ &type, convulong, &exptime))
goto end;
- if ((err = key_new(KEYFILE_KF(kfobj), id, type, exptime, &k)) == 0)
+ if ((err = key_new(KEYFILE_KF(kfobj), id, type, exptime, &k)) != 0)
KEYERR(err);
return (key_dowrap(ty, kfobj, k));
end: