/* -*-c-*-
- *
- * $Id$
*
* Key files and data
*
* (c) 2005 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of the Python interface to Catacomb.
*
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* Catacomb/Python is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with Catacomb/Python; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
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);
}
static PyObject *kdmeth_matchp(PyObject *me, PyObject *arg)
{
key_filter f;
-
+
if (!PyArg_ParseTuple(arg, "O&:matchp", convfilter, &f))
return (0);
return (getbool(KEY_MATCH(KEYDATA_KD(me), &f)));
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 };
int err;
PyObject *rc = 0;
key_data *kd;
-
+
if (!PyArg_ParseTuple(arg, "s:plock", &tag))
goto end;
if ((err = key_plock(&kd, KEYDATA_KD(me), tag)) != 0)
static PyObject *kdmeth_lock(PyObject *me, PyObject *arg)
{
char *p;
- int n;
+ Py_ssize_t n;
PyObject *rc = 0;
key_data *kd;
-
+
if (!PyArg_ParseTuple(arg, "s#:lock", &p, &n))
goto end;
key_lock(&kd, KEYDATA_KD(me), p, n);
static PyObject *meth__KeyData_decode(PyObject *me, PyObject *arg)
{
const char *p;
- int n;
+ Py_ssize_t n;
key_data *kd;
PyObject *rc = 0;
goto end;
if ((kd = key_decode(p, n)) == 0)
KEYERR(KERR_MALFORMED);
- rc = keydata_pywrap(kd);
+ rc = keydata_pywrap(kd);
end:
return (rc);
}
METH (split, "KD.split()")
KWMETH(write, "KD.write(filter = <any>) -> STRING")
KWMETH(encode, "KD.encode(filter = <any>) -> BYTES")
+ KWMETH(copy, "KD.copy(filter = <any>) -> KD")
METH (plock, "KD.plock(TAG) -> ENCRYPTED-KD")
METH (lock, "KD.lock(KEY) -> ENCRYPTED-KD")
#undef METHNAME
static PyTypeObject keydata_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyData", /* @tp_name@ */
+ "KeyData", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
PyObject *arg, PyObject *kw)
{
char *p;
- int n;
+ Py_ssize_t n;
unsigned f = 0;
keydata_pyobj *me = 0;
static char *kwlist[] = { "key", "flags", 0 };
static PyTypeObject keydatabin_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataBinary", /* @tp_name@ */
+ "KeyDataBinary", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
PyObject *arg, PyObject *kw)
{
char *p;
- int n;
+ Py_ssize_t n;
unsigned f = 0;
keydata_pyobj *me = 0;
static char *kwlist[] = { "key", "flags", 0 };
static PyObject *kdemeth_lock(PyObject *me, PyObject *arg)
{
char *hunoz;
- int hukairz;
+ Py_ssize_t hukairz;
if (!PyArg_ParseTuple(arg, "s#:lock", &hunoz, &hukairz)) goto end;
KEYERR(KERR_WRONGTYPE);
end:
int err;
PyObject *rc = 0;
key_data *kd;
-
+
if (!PyArg_ParseTuple(arg, "s:punlock", &tag))
goto end;
if ((err = key_punlock(&kd, KEYDATA_KD(me), tag)) != 0)
static PyObject *kdemeth_unlock(PyObject *me, PyObject *arg)
{
char *p;
- int n;
+ Py_ssize_t n;
int err;
PyObject *rc = 0;
key_data *kd;
-
+
if (!PyArg_ParseTuple(arg, "s#:unlock", &p, &n))
goto end;
if ((err = key_unlock(&kd, KEYDATA_KD(me), p, n)) != 0)
static PyTypeObject keydataenc_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataEncrypted", /* @tp_name@ */
+ "KeyDataEncrypted", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keydatamp_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataMP", /* @tp_name@ */
+ "KeyDataMP", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keydatastr_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataString", /* @tp_name@ */
+ "KeyDataString", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keydataec_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataECPt", /* @tp_name@ */
+ "KeyDataECPt", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject subkeyiter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.SubKeyIter", /* @tp_name@ */
+ "SubKeyIter", /* @tp_name@ */
sizeof(subkeyiter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
if ((tag = PyString_AsString(key)) == 0)
goto end;
+ key_split(&KEYDATA_KD(me));
if (value) {
if (!KEYDATA_PYCHECK(value))
TYERR("expected KeyData value");
static PyTypeObject keydatastruct_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataStructured", /* @tp_name@ */
+ "KeyDataStructured", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keyattriter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyAttributeIter", /* @tp_name@ */
+ "KeyAttributeIter", /* @tp_name@ */
sizeof(keyattriter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keyattrs_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyAttributes", /* @tp_name@ */
+ "KeyAttributes", /* @tp_name@ */
sizeof(keyattrs_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
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:
static PyObject *kmeth_delete(PyObject *me, PyObject *arg)
{
int err;
-
+
if (!PyArg_ParseTuple(arg, ":delete")) goto end;
if ((err = key_delete(KEY_KF(me), KEY_K(me))) != 0) KEYERR(err);
RETURN_ME;
static PyObject *kmeth_expire(PyObject *me, PyObject *arg)
{
int err;
-
+
if (!PyArg_ParseTuple(arg, ":expire")) goto end;
if ((err = key_expire(KEY_KF(me), KEY_K(me))) != 0) KEYERR(err);
RETURN_ME;
{
long t;
int err;
-
+
if (!PyArg_ParseTuple(arg, "l:used", &t)) goto end;
if ((err = key_used(KEY_KF(me), KEY_K(me), t)) != 0) KEYERR(err);
RETURN_ME;
key *k = KEY_K(me);
unsigned long et;
+ if (!x) NIERR("__del__");
if (!convulong(x, &et))
goto end;
if (!(KEY_KF(me)->f & KF_WRITE))
key *k = KEY_K(me);
unsigned long dt;
+ if (!x) NIERR("__del__");
if (!convulong(x, &dt))
goto end;
if (dt == KEXP_FOREVER && k->exp != KEXP_FOREVER)
static PyTypeObject key_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.Key", /* @tp_name@ */
+ "Key", /* @tp_name@ */
sizeof(key_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
if ((k = key_next(KEYITER_I(me))) == 0)
return (0);
- return (key_pywrap(KEYITER_KFOBJ(me), k));
+ return (getulong(k->id));
}
static void keyiter_pydealloc(PyObject *me)
static PyTypeObject keyiter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyFileIter", /* @tp_name@ */
+ "KeyFileIter", /* @tp_name@ */
sizeof(keyiter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
}
end:
return (rc);
-}
+}
static PyObject *kfmeth_newkey(PyObject *me, PyObject *arg, PyObject *kw)
{
key *k;
int err;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&sl:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&s|l:newkey", kwlist,
convu32, &id, &type, &exptime))
goto end;
- if ((err = key_new(KEYFILE_KF(me), id, type, exptime, &k)) == 0)
+ if ((err = key_new(KEYFILE_KF(me), id, type, exptime, &k)) != 0)
KEYERR(err);
return (key_pywrap(me, k));
end:
}
key_incref(*kd);
rc = Py_BuildValue("(s#NN)",
- d.buf, d.len,
+ d.buf, (Py_ssize_t)d.len,
key_pywrap(me, k),
keydata_pywrap(okd));
end:
static PyTypeObject keyfile_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyFile", /* @tp_name@ */
+ "KeyFile", /* @tp_name@ */
sizeof(keyfile_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
"KeyData.readflags(STRING) -> (FLAGS, MASK, REST)")
METH (_KeyData_writeflags, "KeyData.writeflags(FLAGS) -> STRING")
METH (_KeyData_read, "KeyData.read(STRING) -> (KD, REST)")
- METH (_KeyData_decode, "KeyData.read(BYTES) -> KD")
+ METH (_KeyData_decode, "KeyData.decode(BYTES) -> KD")
METH (barf, "barf(ERR)")
#undef METHNAME
{ 0 }