s4-python: fixed annoyance where control-C doesn't kill our python scripts
authorAndrew Tridgell <tridge@samba.org>
Fri, 23 Oct 2009 06:12:48 +0000 (17:12 +1100)
committerAndrew Tridgell <tridge@samba.org>
Sun, 25 Oct 2009 02:15:18 +0000 (13:15 +1100)
We want our scripts to die immediately when a user hits
control-C. Otherwise we not only annoy the hell out of the user, we
also risk db corruption as the control-C could get delivered as an
exception which gets mis-interpreted (eg. as a missing db object). We
use transactions for all our databases, so the right thing to do in
all our command line tools is to die immediately.

source4/scripting/python/pyglue.c

index 71203d301cf49909fcad5d2059d603f0323767af..2f7023ea5d7d40d6c7577b6d81959e3bdce8963c 100644 (file)
@@ -549,5 +549,15 @@ void initglue(void)
        PyModule_AddObject(m, "DS_DC_FUNCTION_2003", PyInt_FromLong(DS_DC_FUNCTION_2003));
        PyModule_AddObject(m, "DS_DC_FUNCTION_2008", PyInt_FromLong(DS_DC_FUNCTION_2008));
        PyModule_AddObject(m, "DS_DC_FUNCTION_2008_R2", PyInt_FromLong(DS_DC_FUNCTION_2008_R2));
        PyModule_AddObject(m, "DS_DC_FUNCTION_2003", PyInt_FromLong(DS_DC_FUNCTION_2003));
        PyModule_AddObject(m, "DS_DC_FUNCTION_2008", PyInt_FromLong(DS_DC_FUNCTION_2008));
        PyModule_AddObject(m, "DS_DC_FUNCTION_2008_R2", PyInt_FromLong(DS_DC_FUNCTION_2008_R2));
+
+       /* one of the most annoying things about python scripts is
+          that they don't die when you hit control-C. This fixes that
+          sillyness. As we do all database operations using
+          transactions, this is also safe. In fact, not dying
+          immediately is unsafe as we could end up treating the
+          control-C exception as a different error and try to modify
+          as database incorrectly 
+       */
+       signal(SIGINT, SIG_DFL);
 }
 
 }