1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-21 09:34:19 +03:00

pidl/Python: allow ndr_print(print_secrets=True)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
Stefan Metzmacher 2024-11-22 15:00:23 +01:00
parent a69310eeab
commit 377db59ce9

View File

@ -336,14 +336,36 @@ sub PythonStruct($$$$$$)
$self->pidl("}");
$self->pidl("");
$self->pidl("static PyObject *py_$name\_ndr_print(PyObject *py_obj, PyObject *Py_UNUSED(ignored))");
$self->pidl("static PyObject *py_$name\_ndr_print(PyObject *py_obj, PyObject *args, PyObject *kwargs)");
$self->pidl("{");
$self->indent;
$self->pidl("$cname *object = pytalloc_get_ptr(py_obj);");
$self->pidl("const char * const kwnames[] = { \"print_secrets\", NULL };");
$self->pidl("PyObject *py_print_secrets = NULL;");
$self->pidl("PyObject *ret;");
$self->pidl("char *retstr;");
$self->pidl("bool ok;");
$self->pidl("");
$self->pidl("ok = PyArg_ParseTupleAndKeywords(args, kwargs, \"|O:__ndr_print__\",");
$self->indent;
$self->pidl("discard_const_p(char *, kwnames),");
$self->pidl("&py_print_secrets);");
$self->deindent;
$self->pidl("if (!ok) {");
$self->indent;
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
$self->pidl("");
$self->pidl("if (py_print_secrets != NULL && PyObject_IsTrue(py_print_secrets)) {");
$self->indent;
$self->pidl("retstr = ndr_print_struct_secret_string(pytalloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_$name, \"$name\", object);");
$self->deindent;
$self->pidl("} else {");
$self->indent;
$self->pidl("retstr = ndr_print_struct_string(pytalloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_$name, \"$name\", object);");
$self->pidl("}");
$self->deindent;
$self->pidl("ret = PyUnicode_FromString(retstr);");
$self->pidl("talloc_free(retstr);");
$self->pidl("");
@ -357,7 +379,7 @@ sub PythonStruct($$$$$$)
$self->indent;
$self->pidl("{ \"__ndr_pack__\", (PyCFunction)py_$name\_ndr_pack, METH_NOARGS, \"S.ndr_pack(object) -> blob\\nNDR pack\" },");
$self->pidl("{ \"__ndr_unpack__\", PY_DISCARD_FUNC_SIG(PyCFunction,py_$name\_ndr_unpack), METH_VARARGS|METH_KEYWORDS, \"S.ndr_unpack(class, blob, allow_remaining=False) -> None\\nNDR unpack\" },");
$self->pidl("{ \"__ndr_print__\", (PyCFunction)py_$name\_ndr_print, METH_NOARGS, \"S.ndr_print(object) -> None\\nNDR print\" },");
$self->pidl("{ \"__ndr_print__\", PY_DISCARD_FUNC_SIG(PyCFunction,py_$name\_ndr_print), METH_VARARGS|METH_KEYWORDS, \"S.ndr_print(object, print_secrets=False) -> String\\nNDR print\" },");
$self->pidl("{ NULL, NULL, 0, NULL }");
$self->deindent;
$self->pidl("};");
@ -823,13 +845,27 @@ sub PythonFunctionStruct($$$$)
$self->pidl("}");
$self->pidl("");
$self->pidl("static PyObject *py_$name\_ndr_print(PyObject *py_obj, const char *name, ndr_flags_type ndr_inout_flags)");
$self->pidl("static PyObject *py_$name\_ndr_print(PyObject *py_obj, PyObject *args, PyObject *kwargs, const char *name, ndr_flags_type ndr_inout_flags)");
$self->pidl("{");
$self->indent;
$self->pidl("$ndr_call");
$self->pidl("$object_ptr");
$self->pidl("const char * const kwnames[] = { \"print_secrets\", NULL };");
$self->pidl("PyObject *py_print_secrets = NULL;");
$self->pidl("PyObject *ret;");
$self->pidl("char *retstr;");
$self->pidl("bool ok;");
$self->pidl("");
$self->pidl("ok = PyArg_ParseTupleAndKeywords(args, kwargs, \"|O:__ndr_print__\",");
$self->indent;
$self->pidl("discard_const_p(char *, kwnames),");
$self->pidl("&py_print_secrets);");
$self->deindent;
$self->pidl("if (!ok) {");
$self->indent;
$self->pidl("return NULL;");
$self->deindent;
$self->pidl("}");
$self->pidl("");
$self->pidl("if (ndr_table_$iface\.num_calls < " . ($fn->{OPNUM}+1) .
") {");
@ -840,7 +876,15 @@ sub PythonFunctionStruct($$$$)
$self->pidl("}");
$self->pidl("call = &ndr_table_$iface\.calls[$fn->{OPNUM}];");
$self->pidl("");
$self->pidl("if (py_print_secrets != NULL && PyObject_IsTrue(py_print_secrets)) {");
$self->indent;
$self->pidl("retstr = ndr_print_function_secret_string(pytalloc_get_mem_ctx(py_obj), call->ndr_print, name, ndr_inout_flags, object);");
$self->deindent;
$self->pidl("} else {");
$self->indent;
$self->pidl("retstr = ndr_print_function_string(pytalloc_get_mem_ctx(py_obj), call->ndr_print, name, ndr_inout_flags, object);");
$self->deindent;
$self->pidl("}");
$self->pidl("ret = PyUnicode_FromString(retstr);");
$self->pidl("TALLOC_FREE(retstr);");
$self->pidl("");
@ -849,18 +893,18 @@ sub PythonFunctionStruct($$$$)
$self->pidl("}");
$self->pidl("");
$self->pidl("static PyObject *py_$name\_ndr_print_in(PyObject *py_obj, PyObject *Py_UNUSED(ignored))");
$self->pidl("static PyObject *py_$name\_ndr_print_in(PyObject *py_obj, PyObject *args, PyObject *kwargs)");
$self->pidl("{");
$self->indent;
$self->pidl("return py_$name\_ndr_print(py_obj, \"$name\_in\", NDR_IN);");
$self->pidl("return py_$name\_ndr_print(py_obj, args, kwargs, \"$name\_in\", NDR_IN);");
$self->deindent;
$self->pidl("}");
$self->pidl("");
$self->pidl("static PyObject *py_$name\_ndr_print_out(PyObject *py_obj, PyObject *Py_UNUSED(ignored))");
$self->pidl("static PyObject *py_$name\_ndr_print_out(PyObject *py_obj, PyObject *args, PyObject *kwargs)");
$self->pidl("{");
$self->indent;
$self->pidl("return py_$name\_ndr_print(py_obj, \"$name\_out\", NDR_OUT);");
$self->pidl("return py_$name\_ndr_print(py_obj, args, kwargs, \"$name\_out\", NDR_OUT);");
$self->deindent;
$self->pidl("}");
$self->pidl("");
@ -888,8 +932,14 @@ sub PythonFunctionStruct($$$$)
$self->indent;
$self->pidl("\"S.ndr_unpack_out(class, blob, bigendian=False, ndr64=False, allow_remaining=False) -> None\\nNDR unpack output\" },");
$self->deindent;
$self->pidl("{ \"__ndr_print_in__\", (PyCFunction)py_$name\_ndr_print_in, METH_NOARGS, \"S.ndr_print_in(object) -> None\\nNDR print input\" },");
$self->pidl("{ \"__ndr_print_out__\", (PyCFunction)py_$name\_ndr_print_out, METH_NOARGS, \"S.ndr_print_out(object) -> None\\nNDR print output\" },");
$self->pidl("{ \"__ndr_print_in__\", PY_DISCARD_FUNC_SIG(PyCFunction,py_$name\_ndr_print_in), METH_VARARGS|METH_KEYWORDS,");
$self->indent;
$self->pidl("\"S.ndr_print_in(object, print_secrets=False) -> String\\nNDR print input\" },");
$self->deindent;
$self->pidl("{ \"__ndr_print_out__\", PY_DISCARD_FUNC_SIG(PyCFunction,py_$name\_ndr_print_out), METH_VARARGS|METH_KEYWORDS,");
$self->indent;
$self->pidl("\"S.ndr_print_out(object, print_secrets=False) -> String\\nNDR print output\" },");
$self->deindent;
$self->pidl("{ NULL, NULL, 0, NULL }");
$self->deindent;
$self->pidl("};");