[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57327] trunk/blender: Python script auto-execution changes:

Campbell Barton ideasman42 at gmail.com
Mon Jun 10 02:42:17 CEST 2013


Revision: 57327
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57327
Author:   campbellbarton
Date:     2013-06-10 00:42:16 +0000 (Mon, 10 Jun 2013)
Log Message:
-----------
Python script auto-execution changes:

- script execution is off by default

- if a blend file attempts to execute a script
  this shows a message in the header with the action
  that was suppressed (script/driver/game-autostart) and 2 buttons to either reload the file trusted, or to ignore the message.

- the file selector will always default to use the trust setting in the user preferences,
  but reloading an open file will keep using the current setting (whatever was set before or set on the command-line).

- added SCons setting WITH_BF_PYTHON_SECURITY, this sets the default state for the user prefereces not to trust blend files on load.
  ... this option was in CMake before, but always off, now its enabled by default for SCons and CMake, and forced on in CMake for now.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/build_files/scons/tools/btools.py
    trunk/blender/release/scripts/startup/bl_ui/space_info.py
    trunk/blender/source/blender/blenkernel/BKE_global.h
    trunk/blender/source/blender/editors/space_script/script_edit.c
    trunk/blender/source/blender/editors/space_script/script_intern.h
    trunk/blender/source/blender/editors/space_script/script_ops.c
    trunk/blender/source/blender/python/intern/bpy_app.c
    trunk/blender/source/blender/python/intern/bpy_driver.c
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/windowmanager/SConscript
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/CMakeLists.txt	2013-06-10 00:42:16 UTC (rev 57327)
@@ -118,9 +118,10 @@
 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
 
 option(WITH_PYTHON        "Enable Embedded Python API  (only disable for development)" ON)
-option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default (recommend to leave off)" OFF)
+option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON) 
 mark_as_advanced(WITH_PYTHON)  # dont want people disabling this unless they really know what they are doing.
 mark_as_advanced(WITH_PYTHON_SECURITY)  # some distributions see this as a security issue, rather than have them patch it, make a build option.
+set(WITH_PYTHON_SECURITY ON CACHE BOOL "ON" FORCE) # temp force on. 
 
 option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF)
 option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development)" OFF)

Modified: trunk/blender/build_files/scons/tools/btools.py
===================================================================
--- trunk/blender/build_files/scons/tools/btools.py	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/build_files/scons/tools/btools.py	2013-06-10 00:42:16 UTC (rev 57327)
@@ -96,7 +96,7 @@
 
 def validate_arguments(args, bc):
     opts_list = [
-            'WITH_BF_FREESTYLE', 'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LIBPATH_ARCH', 'WITH_BF_STATICPYTHON', 'WITH_OSX_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL', 'BF_PYTHON_ABI_FLAGS',
+            'WITH_BF_FREESTYLE', 'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', 'WITH_BF_PYTHON_SECURITY', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LIBPATH_ARCH', 'WITH_BF_STATICPYTHON', 'WITH_OSX_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL', 'BF_PYTHON_ABI_FLAGS',
             'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
             'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
             'WITH_BF_JACK', 'BF_JACK', 'BF_JACK_INC', 'BF_JACK_LIB', 'BF_JACK_LIBPATH', 'WITH_BF_JACK_DYNLOAD',
@@ -254,6 +254,7 @@
         ('LIBDIR', 'Root dir of libs'),
         (BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
         (BoolVariable('WITH_BF_PYTHON_SAFETY', 'Internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency)', False)),
+        (BoolVariable('WITH_BF_PYTHON_SECURITY', 'Disables execution of scripts within blend files by default', True)),
         ('BF_PYTHON', 'Base path for python', ''),
         ('BF_PYTHON_VERSION', 'Python version to use', ''),
         ('BF_PYTHON_INC', 'Include path for Python headers', ''),

Modified: trunk/blender/release/scripts/startup/bl_ui/space_info.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_info.py	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/release/scripts/startup/bl_ui/space_info.py	2013-06-10 00:42:16 UTC (rev 57327)
@@ -64,6 +64,17 @@
         layout.template_reports_banner()
 
         row = layout.row(align=True)
+
+        if bpy.app.autoexec_fail is True and bpy.app.autoexec_fail_quiet is False:
+            layout.operator_context = 'EXEC_DEFAULT'
+            row.label("Script failed to auto-run", icon='ERROR')
+            props = row.operator("wm.open_mainfile", icon='SCREEN_BACK', text="Reload Trusted")
+            props.filepath = bpy.data.filepath
+            props.use_scripts = True
+            row.operator("script.autoexec_warn_clear", icon='CANCEL')
+            row.label("Skipping: (%s)" % bpy.app.autoexec_fail_message)
+            return
+
         row.operator("wm.splash", text="", icon='BLENDER', emboss=False)
         row.label(text=scene.statistics(), translate=False)
 

Modified: trunk/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_global.h	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/blenkernel/BKE_global.h	2013-06-10 00:42:16 UTC (rev 57327)
@@ -93,6 +93,9 @@
 
 	/* save the allowed windowstate of blender when using -W or -w (GHOST_TWindowState) */
 	int windowstate;
+
+	/* message to use when autoexec fails */
+	char autoexec_fail[200];
 } Global;
 
 /* **************** GLOBAL ********************* */
@@ -109,6 +112,8 @@
 
 #define G_SCRIPT_AUTOEXEC (1 << 13)
 #define G_SCRIPT_OVERRIDE_PREF (1 << 14) /* when this flag is set ignore the userprefs */
+#define G_SCRIPT_AUTOEXEC_FAIL (1 << 15)
+#define G_SCRIPT_AUTOEXEC_FAIL_QUIET (1 << 16)
 
 /* #define G_NOFROZEN	(1 << 17) also removed */
 /* #define G_GREASEPENCIL   (1 << 17)   also removed */

Modified: trunk/blender/source/blender/editors/space_script/script_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_edit.c	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/editors/space_script/script_edit.c	2013-06-10 00:42:16 UTC (rev 57327)
@@ -36,6 +36,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_context.h"
+#include "BKE_global.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -110,3 +111,23 @@
 	/* api callbacks */
 	ot->exec = script_reload_exec;
 }
+
+static int script_autoexec_warn_clear_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
+{
+	G.f |= G_SCRIPT_AUTOEXEC_FAIL_QUIET;
+	return OPERATOR_FINISHED;
+}
+
+void SCRIPT_OT_autoexec_warn_clear(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Continue Untrusted";
+	ot->description = "Ignore autoexec warning";
+	ot->idname = "SCRIPT_OT_autoexec_warn_clear";
+
+	/* flags */
+	ot->flag = OPTYPE_INTERNAL;
+
+	/* api callbacks */
+	ot->exec = script_autoexec_warn_clear_exec;
+}

Modified: trunk/blender/source/blender/editors/space_script/script_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_intern.h	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/editors/space_script/script_intern.h	2013-06-10 00:42:16 UTC (rev 57327)
@@ -40,6 +40,7 @@
 /* script_edit.c */
 void SCRIPT_OT_reload(struct wmOperatorType *ot);
 void SCRIPT_OT_python_file_run(struct wmOperatorType *ot);
+void SCRIPT_OT_autoexec_warn_clear(struct wmOperatorType *ot);
 
 #endif /* __SCRIPT_INTERN_H__ */
 

Modified: trunk/blender/source/blender/editors/space_script/script_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_ops.c	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/editors/space_script/script_ops.c	2013-06-10 00:42:16 UTC (rev 57327)
@@ -56,6 +56,7 @@
 {
 	WM_operatortype_append(SCRIPT_OT_python_file_run);
 	WM_operatortype_append(SCRIPT_OT_reload);
+	WM_operatortype_append(SCRIPT_OT_autoexec_warn_clear);
 }
 
 void script_keymap(wmKeyConfig *keyconf)

Modified: trunk/blender/source/blender/python/intern/bpy_app.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_app.c	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/python/intern/bpy_app.c	2013-06-10 00:42:16 UTC (rev 57327)
@@ -219,6 +219,12 @@
 	return 0;
 }
 
+static PyObject *bpy_app_global_flag_get(PyObject *UNUSED(self), void *closure)
+{
+	const int flag = GET_INT_FROM_POINTER(closure);
+	return PyBool_FromLong(G.f & flag);
+}
+
 PyDoc_STRVAR(bpy_app_tempdir_doc,
 "String, the temp directory used by blender (read-only)"
 );
@@ -243,7 +249,12 @@
 	return bpy_pydriver_Dict;
 }
 
+static PyObject *bpy_app_autoexec_fail_message_get(PyObject *UNUSED(self), void *UNUSED(closure))
+{
+	return PyC_UnicodeFromByte(G.autoexec_fail);
+}
 
+
 static PyGetSetDef bpy_app_getsets[] = {
 	{(char *)"debug",           bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG},
 	{(char *)"debug_ffmpeg",    bpy_app_debug_get, bpy_app_debug_set, (char *)bpy_app_debug_doc, (void *)G_DEBUG_FFMPEG},
@@ -256,6 +267,11 @@
 	{(char *)"debug_value", bpy_app_debug_value_get, bpy_app_debug_value_set, (char *)bpy_app_debug_value_doc, NULL},
 	{(char *)"tempdir", bpy_app_tempdir_get, NULL, (char *)bpy_app_tempdir_doc, NULL},
 	{(char *)"driver_namespace", bpy_app_driver_dict_get, NULL, (char *)bpy_app_driver_dict_doc, NULL},
+
+	/* security */
+	{(char *)"autoexec_fail", bpy_app_global_flag_get, NULL, NULL, (void *)G_SCRIPT_AUTOEXEC_FAIL},
+	{(char *)"autoexec_fail_quiet", bpy_app_global_flag_get, NULL, NULL, (void *)G_SCRIPT_AUTOEXEC_FAIL_QUIET},
+	{(char *)"autoexec_fail_message", bpy_app_autoexec_fail_message_get, NULL, NULL, NULL},
 	{NULL, NULL, NULL, NULL, NULL}
 };
 

Modified: trunk/blender/source/blender/python/intern/bpy_driver.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_driver.c	2013-06-10 00:01:52 UTC (rev 57326)
+++ trunk/blender/source/blender/python/intern/bpy_driver.c	2013-06-10 00:42:16 UTC (rev 57327)
@@ -37,6 +37,7 @@
 
 #include "BLI_listbase.h"
 #include "BLI_math_base.h"
+#include "BLI_string.h"
 
 #include "BKE_fcurve.h"
 #include "BKE_global.h"
@@ -189,7 +190,12 @@
 		return 0.0f;
 
 	if (!(G.f & G_SCRIPT_AUTOEXEC)) {
-		printf("skipping driver '%s', automatic scripts are disabled\n", driver->expression);
+		if (!(G.f & G_SCRIPT_AUTOEXEC_FAIL_QUIET)) {
+			G.f |= G_SCRIPT_AUTOEXEC_FAIL;
+			BLI_snprintf(G.autoexec_fail, sizeof(G.autoexec_fail), "Driver '%s'", driver->expression);
+
+			printf("skipping driver '%s', automatic scripts are disabled\n", driver->expression);
+		}
 		return 0.0f;
 	}
 


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list