diff --git a/src/builtin_functions.c b/src/builtin_functions.c index f6e44c10f28c3ac733077c91846b66eeab5c74f5..09645c6ba55dfada3659fd4ae67f4e75f97e1037 100644 --- a/src/builtin_functions.c +++ b/src/builtin_functions.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: builtin_functions.c,v 1.142 1998/12/21 09:38:31 hubbe Exp $"); +RCSID("$Id: builtin_functions.c,v 1.143 1999/01/16 01:20:39 hubbe Exp $"); #include "interpret.h" #include "svalue.h" #include "pike_macros.h" @@ -37,6 +37,7 @@ RCSID("$Id: builtin_functions.c,v 1.142 1998/12/21 09:38:31 hubbe Exp $"); #include "opcodes.h" #include "cyclic.h" #include "signal_handler.h" +#include "security.h" #ifdef HAVE_POLL #ifdef HAVE_POLL_H @@ -352,6 +353,7 @@ void f_backtrace(INT32 args) void f_add_constant(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("add_constant: permission denied.\n")); if(args<1) PIKE_ERROR("add_constant", "Too few arguments.\n", sp, args); @@ -1084,6 +1086,7 @@ void f_throw(INT32 args) void f_exit(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("exit: permission denied.\n")); if(args < 1) PIKE_ERROR("exit", "Too few arguments.\n", sp, args); @@ -1097,6 +1100,7 @@ void f_exit(INT32 args) void f__exit(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_exit: permission denied.\n")); if(args < 1) PIKE_ERROR("_exit", "Too few arguments.\n", sp, args); @@ -1902,6 +1906,7 @@ void f_column(INT32 args) void f__verify_internals(INT32 args) { INT32 tmp=d_flag; + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_exit: permission denied.\n")); d_flag=0x7fffffff; do_debug(); d_flag=tmp; @@ -1912,6 +1917,7 @@ void f__verify_internals(INT32 args) void f__debug(INT32 args) { INT32 i=d_flag; + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_exit: permission denied.\n")); get_all_args("_debug",args,"%i",&d_flag); pop_n_elems(args); push_int(i); @@ -1923,6 +1929,7 @@ void f__compiler_trace(INT32 args) { extern int yydebug; INT32 i = yydebug; + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_exit: permission denied.\n")); get_all_args("_compiler_trace", args, "%i", &yydebug); pop_n_elems(args); push_int(i); @@ -3257,6 +3264,9 @@ void f__memory_usage(INT32 args) void f__next(INT32 args) { struct svalue tmp; + + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_next: permission denied.\n")); + if(!args) PIKE_ERROR("_next", "Too few arguments.\n", sp, args); @@ -3285,6 +3295,9 @@ void f__next(INT32 args) void f__prev(INT32 args) { struct svalue tmp; + + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("_prev: permission denied.\n")); + if(!args) PIKE_ERROR("_prev", "Too few arguments.\n", sp, args); @@ -3339,6 +3352,8 @@ void f__typeof(INT32 args) void f_replace_master(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("replace_master: permission denied.\n")); + if(!args) PIKE_ERROR("replace_master", "Too few arguments.\n", sp, 0); if(sp[-args].type != T_OBJECT) @@ -3576,7 +3591,7 @@ void f_transpose(INT32 args) out=allocate_array(sizeininner); for(i=0; i<sizein; i++) - type|=in->item->u.array->type_field; + type|=in->item[i].u.array->type_field; for(j=0; j<sizeininner; j++) { @@ -3603,6 +3618,7 @@ void f_transpose(INT32 args) #ifdef DEBUG_MALLOC void f__reset_dmalloc(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("replace_master: permission denied.\n")); pop_n_elems(args); reset_debug_malloc(); } @@ -3611,6 +3627,7 @@ void f__reset_dmalloc(INT32 args) #ifdef PIKE_DEBUG void f__locate_references(INT32 args) { + CHECK_SECURITY(0,SECURITY_BIT_SECURITY, ("replace_master: permission denied.\n")); if(args) locate_references(sp[-args].u.refs); pop_n_elems(args-1);