Make possible to disallow SELECT statement.
authorMarko Kreen <markokr@gmail.com>
Mon, 6 Sep 2010 10:49:29 +0000 (13:49 +0300)
committerMarko Kreen <markokr@gmail.com>
Mon, 6 Sep 2010 10:49:29 +0000 (13:49 +0300)
  make NO_SELECT=1
  make install

Makefile
src/parser.y

index a01f0815e524d0e362c0416df2a6843ae0b4e530..48029b436c92da0b40aafd2f6c2301de258283b0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,9 @@
 # PL/Proxy version
 PLPROXY_VERSION = 2.1
 
+# set to 1 to disallow functions containing SELECT
+NO_SELECT = 0
+
 # libpq config
 PG_CONFIG = pg_config
 PQINC = $(shell $(PG_CONFIG) --includedir)
@@ -18,7 +21,7 @@ SRCS = src/cluster.c src/execute.c src/function.c src/main.c \
 OBJS = src/scanner.o src/parser.tab.o $(SRCS:.c=.o)
 DATA_built = plproxy.sql
 EXTRA_CLEAN = src/scanner.[ch] src/parser.tab.[ch] plproxy.sql.in
-PG_CPPFLAGS = -I$(PQINC)
+PG_CPPFLAGS = -I$(PQINC) -DNO_SELECT=$(NO_SELECT)
 SHLIB_LINK = -L$(PQLIB) -lpq
 
 TARNAME = plproxy-$(PLPROXY_VERSION)
index cd5f327e20bd368ae0823e9a7af364355aa01a88..13c7295dd28e0c3ea636c1cac8f1427e702c033d 100644 (file)
@@ -231,6 +231,12 @@ void plproxy_run_parser(ProxyFunction *func, const char *body, int len)
                        yyerror("CLUSTER statement missing");
        }
 
+       /* disallow SELECT if requested */
+#if NO_SELECT
+       if (select_sql)
+               yyerror("SELECT statement not allowed");
+#endif
+
        /* release scanner resources */
        plproxy_yylex_destroy();