rlm_python from v3.1.x has been backported to the v3.0.x branch. This addresses all but 1 of the ~7 rlm_python issues that had accumulated in the issue tracker. Namely: - Instantiation and destruction with multiple instances is always clean, and should never result in a SEGV. - The module is 'threaded', without any side effects (race conditions or crashes). - Thread Local Storage is now distinct between instances of rlm_python - Multiple sub interpreters can be used, but this is disabled by default in v3.0.x because of compatibility issues with some C extensions to python. - Double quotes are no longer escaped. - Constants are synced with the server constants. In v3.1.x I also added conversion to proper Python types, i.e. unsigned/signed integers get converted to Python Long numbers, floats get converted to decimals, strings get converted from UTF-8 to UTF-16 (and are binary safe), octet strings are left in their original form (not converted to hex). Conversion back to C types is still done with string parsing. That can be addressed by someone sufficiently motivated. I don't think it's significantly more difficult than conversion to Python types. Encourage anyone that depends on Python in v3.0.x to test *before* 3.0.12 is released and report any issues. Thanks to Guillaume Pannatier for all the recent testing and automated test cases, and to all those that opened issues against rlm_python. No thanks to the Python team for creating an extraordinarily obtuse C API. My favourite, lease favourite part is this: /* * Initialise a new module, with our default methods */ inst->module = Py_InitModule3("radiusd", module_methods, "FreeRADIUS python module"); if (!inst->module) { error: python_error_log(); PyEval_SaveThread(); return -1; } /* * Py_InitModule3 returns a borrowed ref, the actual * module is owned by sys.modules, so we also need * to own the module to prevent it being freed early. */ Py_IncRef(inst->module); Just wow... -Arran Arran Cudbard-Bell <a.cudbardb@freeradius.org> FreeRADIUS Development Team FD31 3077 42EC 7FCD 32FE 5EE2 56CF 27F9 30A8 CAA2