File: | krb5module.c |
Function: | Context_recvauth |
Error: | ob_refcnt of '*ctx' is 1 too high |
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254 krb5_context kctx = NULL;
1255 PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256 krb5_auth_context ac_out = NULL;
1257 krb5_keytab kt;
1258 krb5_principal pserver;
1259 krb5_ticket *cticket;
1260 krb5_flags ap_req_options = 0;
1261 krb5_error_code rc = 0;
1262 int free_keytab = 0;
1263 int fd;
1264 char *appl_version;
1265 krb5_pointer fd_ptr = &fd;
1266
1267 if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268 return NULL;
1269
1270 fd = obj_to_fd(fd_obj);
1271 if(fd < 0)
when considering range: 0 <= value <= 0x7fffffff
taking False path
1272 return NULL;
1273
1274 ctx = PyObject_GetAttrString(self, "_ctx");
when PyObject_GetAttrString() succeeds
new ref from call to PyObject_GetAttrString allocated at: ctx = PyObject_GetAttrString(self, "_ctx");
ob_refcnt is now refs: 1 + N where N >= 0
1275 kctx = PyCObject_AsVoidPtr(ctx);
when PyCObject_AsVoidPtr() returns
1276
1277 if(kw)
taking True path
1278 {
1279 options = PyDict_GetItemString(kw, "options");
when PyDict_GetItemString() succeeds
1280 server = PyDict_GetItemString(kw, "server");
when PyDict_GetItemString() succeeds
1281 keytab = PyDict_GetItemString(kw, "keytab");
when PyDict_GetItemString() succeeds
1282 }
1283
1284 if(!keytab || keytab == Py_None)
taking False path
taking False path
1285 {
1286 PyObject *subargs;
1287 subargs = Py_BuildValue("(O)", self);
1288 keytab = Context_kt_default(unself, subargs, NULL);
1289 Py_DECREF(subargs);
1290 free_keytab = 1;
1291 }
1292 tmp = PyObject_GetAttrString(keytab, "_keytab");
when PyObject_GetAttrString() succeeds
1293 kt = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1294 if(free_keytab)
taking False path
1295 {
1296 Py_DECREF(keytab);
1297 }
1298
1299 if(server)
taking True path
1300 {
1301 tmp = PyObject_GetAttrString(server, "_princ");
when PyObject_GetAttrString() succeeds
1302 pserver = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1303 }
1304 else
1305 {
1306 PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307 return NULL;
1308 }
1309 if(options)
taking True path
1310 ap_req_options = PyInt_AsLong(options);
when PyInt_AsLong() succeeds
1311
1312 Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
1313 rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314 Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
1315 if(rc)
when considering value == (krb5_error_code)0 from krb5module.c:1313
taking False path
1316 return pk_error(rc);
1317
1318 retval = PyTuple_New(2);
when PyTuple_New() succeeds
1319
1320 if (cticket->enc_part2)
when treating unknown struct krb5_ticket * * from krb5module.c:1313 as non-NULL
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1320 as non-NULL
taking True path
1321 {
1322 PyObject *cprinc;
1323
1324 if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1324 as non-NULL
when make_principal() succeeds
taking False path
1325 {
1326 Py_DECREF(retval);
1327 krb5_free_ticket(kctx, cticket);
1328 return NULL;
1329 }
1330 PyTuple_SetItem(retval, 1, cprinc);
when PyTuple_SetItem() succeeds
1331 }
1332 else
1333 {
1334 PyTuple_SetItem(retval, 1, Py_None);
1335 Py_INCREF(Py_None);
1336 }
1337 krb5_free_ticket(kctx, cticket);
1338
1339
1340 {
1341 PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342
1343 subargs = Py_BuildValue("()");
when Py_BuildValue() succeeds
1344 mykw = PyDict_New();
when PyDict_New() succeeds
1345 PyDict_SetItemString(mykw, "context", self);
when PyDict_SetItemString() succeeds
1346 otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
when PyCObject_FromVoidPtrAndDesc() succeeds
1347 PyDict_SetItemString(mykw, "ac", otmp);
when PyDict_SetItemString() succeeds
1348 auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
when treating unknown struct PyObject * from krb5module.c:34 as non-NULL
when PyEval_CallObjectWithKeywords() fails
1349 PyTuple_SetItem(retval, 0, auth_context);
when PyTuple_SetItem() succeeds
1350 Py_DECREF(otmp);
when taking False path
calling tp_dealloc on PyCObject allocated at krb5module.c:1346
1351 Py_DECREF(subargs);
when taking True path
1352 Py_XDECREF(mykw);
taking False path
when taking True path
1353 }
1354
1355 return retval;
1356 } /* KrbV.Context.recvauth() */
ob_refcnt of '*ctx' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 15 similar trace(s) to this
File: | krb5module.c |
Function: | Context_recvauth |
Error: | ob_refcnt of new ref from call to PyObject_GetAttrString is 1 too high |
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254 krb5_context kctx = NULL;
1255 PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256 krb5_auth_context ac_out = NULL;
1257 krb5_keytab kt;
1258 krb5_principal pserver;
1259 krb5_ticket *cticket;
1260 krb5_flags ap_req_options = 0;
1261 krb5_error_code rc = 0;
1262 int free_keytab = 0;
1263 int fd;
1264 char *appl_version;
1265 krb5_pointer fd_ptr = &fd;
1266
1267 if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268 return NULL;
1269
1270 fd = obj_to_fd(fd_obj);
1271 if(fd < 0)
when considering range: 0 <= value <= 0x7fffffff
taking False path
1272 return NULL;
1273
1274 ctx = PyObject_GetAttrString(self, "_ctx");
when PyObject_GetAttrString() succeeds
1275 kctx = PyCObject_AsVoidPtr(ctx);
when PyCObject_AsVoidPtr() returns
1276
1277 if(kw)
taking True path
1278 {
1279 options = PyDict_GetItemString(kw, "options");
when PyDict_GetItemString() succeeds
1280 server = PyDict_GetItemString(kw, "server");
when PyDict_GetItemString() succeeds
1281 keytab = PyDict_GetItemString(kw, "keytab");
when PyDict_GetItemString() succeeds
1282 }
1283
1284 if(!keytab || keytab == Py_None)
taking False path
taking False path
1285 {
1286 PyObject *subargs;
1287 subargs = Py_BuildValue("(O)", self);
1288 keytab = Context_kt_default(unself, subargs, NULL);
1289 Py_DECREF(subargs);
1290 free_keytab = 1;
1291 }
1292 tmp = PyObject_GetAttrString(keytab, "_keytab");
when PyObject_GetAttrString() succeeds
new ref from call to PyObject_GetAttrString allocated at: tmp = PyObject_GetAttrString(keytab, "_keytab");
ob_refcnt is now refs: 1 + N where N >= 0
1293 kt = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1294 if(free_keytab)
taking False path
1295 {
1296 Py_DECREF(keytab);
1297 }
1298
1299 if(server)
taking True path
1300 {
1301 tmp = PyObject_GetAttrString(server, "_princ");
when PyObject_GetAttrString() succeeds
1302 pserver = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1303 }
1304 else
1305 {
1306 PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307 return NULL;
1308 }
1309 if(options)
taking True path
1310 ap_req_options = PyInt_AsLong(options);
when PyInt_AsLong() succeeds
1311
1312 Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
1313 rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314 Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
1315 if(rc)
when considering value == (krb5_error_code)0 from krb5module.c:1313
taking False path
1316 return pk_error(rc);
1317
1318 retval = PyTuple_New(2);
when PyTuple_New() succeeds
1319
1320 if (cticket->enc_part2)
when treating unknown struct krb5_ticket * * from krb5module.c:1313 as non-NULL
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1320 as non-NULL
taking True path
1321 {
1322 PyObject *cprinc;
1323
1324 if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1324 as non-NULL
when make_principal() succeeds
taking False path
1325 {
1326 Py_DECREF(retval);
1327 krb5_free_ticket(kctx, cticket);
1328 return NULL;
1329 }
1330 PyTuple_SetItem(retval, 1, cprinc);
when PyTuple_SetItem() succeeds
1331 }
1332 else
1333 {
1334 PyTuple_SetItem(retval, 1, Py_None);
1335 Py_INCREF(Py_None);
1336 }
1337 krb5_free_ticket(kctx, cticket);
1338
1339
1340 {
1341 PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342
1343 subargs = Py_BuildValue("()");
when Py_BuildValue() succeeds
1344 mykw = PyDict_New();
when PyDict_New() succeeds
1345 PyDict_SetItemString(mykw, "context", self);
when PyDict_SetItemString() succeeds
1346 otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
when PyCObject_FromVoidPtrAndDesc() succeeds
1347 PyDict_SetItemString(mykw, "ac", otmp);
when PyDict_SetItemString() succeeds
1348 auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
when treating unknown struct PyObject * from krb5module.c:34 as non-NULL
when PyEval_CallObjectWithKeywords() fails
1349 PyTuple_SetItem(retval, 0, auth_context);
when PyTuple_SetItem() succeeds
1350 Py_DECREF(otmp);
when taking False path
calling tp_dealloc on PyCObject allocated at krb5module.c:1346
1351 Py_DECREF(subargs);
when taking True path
1352 Py_XDECREF(mykw);
taking False path
when taking True path
1353 }
1354
1355 return retval;
1356 } /* KrbV.Context.recvauth() */
ob_refcnt of new ref from call to PyObject_GetAttrString is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 31 similar trace(s) to this
File: | krb5module.c |
Function: | Context_recvauth |
Error: | returning (PyObject*)NULL without setting an exception |
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254 krb5_context kctx = NULL;
1255 PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256 krb5_auth_context ac_out = NULL;
1257 krb5_keytab kt;
1258 krb5_principal pserver;
1259 krb5_ticket *cticket;
1260 krb5_flags ap_req_options = 0;
1261 krb5_error_code rc = 0;
1262 int free_keytab = 0;
1263 int fd;
1264 char *appl_version;
1265 krb5_pointer fd_ptr = &fd;
1266
1267 if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268 return NULL;
1269
1270 fd = obj_to_fd(fd_obj);
1271 if(fd < 0)
when considering range: -0x80000000 <= value <= -1
taking True path
1272 return NULL;
1273
1274 ctx = PyObject_GetAttrString(self, "_ctx");
1275 kctx = PyCObject_AsVoidPtr(ctx);
1276
1277 if(kw)
1278 {
1279 options = PyDict_GetItemString(kw, "options");
1280 server = PyDict_GetItemString(kw, "server");
1281 keytab = PyDict_GetItemString(kw, "keytab");
1282 }
1283
1284 if(!keytab || keytab == Py_None)
1285 {
1286 PyObject *subargs;
1287 subargs = Py_BuildValue("(O)", self);
1288 keytab = Context_kt_default(unself, subargs, NULL);
1289 Py_DECREF(subargs);
1290 free_keytab = 1;
1291 }
1292 tmp = PyObject_GetAttrString(keytab, "_keytab");
1293 kt = PyCObject_AsVoidPtr(tmp);
1294 if(free_keytab)
1295 {
1296 Py_DECREF(keytab);
1297 }
1298
1299 if(server)
1300 {
1301 tmp = PyObject_GetAttrString(server, "_princ");
1302 pserver = PyCObject_AsVoidPtr(tmp);
1303 }
1304 else
1305 {
1306 PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307 return NULL;
1308 }
1309 if(options)
1310 ap_req_options = PyInt_AsLong(options);
1311
1312 Py_BEGIN_ALLOW_THREADS
1313 rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314 Py_END_ALLOW_THREADS
1315 if(rc)
1316 return pk_error(rc);
1317
1318 retval = PyTuple_New(2);
1319
1320 if (cticket->enc_part2)
1321 {
1322 PyObject *cprinc;
1323
1324 if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
1325 {
1326 Py_DECREF(retval);
1327 krb5_free_ticket(kctx, cticket);
1328 return NULL;
1329 }
1330 PyTuple_SetItem(retval, 1, cprinc);
1331 }
1332 else
1333 {
1334 PyTuple_SetItem(retval, 1, Py_None);
1335 Py_INCREF(Py_None);
1336 }
1337 krb5_free_ticket(kctx, cticket);
1338
1339
1340 {
1341 PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342
1343 subargs = Py_BuildValue("()");
1344 mykw = PyDict_New();
1345 PyDict_SetItemString(mykw, "context", self);
1346 otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
1347 PyDict_SetItemString(mykw, "ac", otmp);
1348 auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
1349 PyTuple_SetItem(retval, 0, auth_context);
1350 Py_DECREF(otmp);
1351 Py_DECREF(subargs);
1352 Py_XDECREF(mykw);
1353 }
1354
1355 return retval;
1356 } /* KrbV.Context.recvauth() */
returning (PyObject*)NULL without setting an exception