extern char buf1[];
extern int nclients;
extern char *whoami;
-extern char *malloc();
extern int errno;
extern void clist_delete(), do_auth(), do_shutdown();
void do_call();
+extern int ingres_errno, mr_errcode;
+static int row_count;
+
+/* Put this in a variable so that we can patch it if necessary */
+int max_row_count = 2048;
/*
* Welcome to the (finite state) machine (highest level).
client *cl;
{
int pn;
+ extern int ingres_errno;
cl->reply.mr_argc = 0;
cl->reply.mr_status = 0;
cl->reply.mr_version_no = cl->args->mr_version_no;
return;
}
+ /* make sure this gets cleared before every operation */
+ ingres_errno = 0;
+
switch(pn) {
case MR_NOOP:
cl->reply.mr_status = 0;
char *p_cp;
{
register client *cp = (client *)p_cp;
+ mr_params *arg_tmp;
+ returned_tuples *tp;
+ OPERATION op_tmp;
+ register char **nargv;
+ register int i;
+
+ if (row_count++ >= max_row_count) {
+ ingres_errno = mr_errcode = MR_NO_MEM;
+ return;
+ }
+
/*
* This takes too much advantage of the fact that
* serialization of the data happens during the queue operation.
*/
- mr_params *arg_tmp = (mr_params *)db_alloc(sizeof(mr_params));
- returned_tuples *tp = (returned_tuples *)
- db_alloc(sizeof(returned_tuples));
- register char **nargv = (char **)malloc(argc * sizeof(char *));
- register int i;
+ arg_tmp = (mr_params *)db_alloc(sizeof(mr_params));
+ tp = (returned_tuples *)db_alloc(sizeof(returned_tuples));
+ nargv = (char **)malloc(argc * sizeof(char *));
- OPERATION op_tmp = create_operation();
+ op_tmp = create_operation();
if (mr_trim_args(argc, argv) == MR_NO_MEM) {
com_err(whoami, MR_NO_MEM, "while trimming args");
extern client **clients;
extern char *inet_ntoa();
char *cp;
- char *index();
char *ctime();
for (i = 0; i < nclients; i++) {
cl->reply.mr_argc = 0;
cl->reply.mr_status = 0;
+ row_count = 0;
+ if (cl->args->mr_argc < 1) {
+ cl->reply.mr_status = MR_ARGS;
+ com_err(whoami, MR_ARGS, "got nameless query");
+ return;
+ }
queryname = cl->args->mr_argv[0];
if (cl->args->mr_version_no == MR_VERSION_2)
else {
cl->reply.mr_status =
mr_process_query(cl,
- cl->args->mr_argv[0],
+ queryname,
cl->args->mr_argc-1,
cl->args->mr_argv+1,
retr_callback,
(char *)cl);
}
+ if (row_count >= max_row_count) {
+ critical_alert("moirad", "attempted query %s with %d rows\n",
+ queryname, row_count);
+ }
+
if (log_flags & LOG_RES)
com_err(whoami, 0, "Query complete.");
}
do_access(cl)
client *cl;
{
+ if (cl->args->mr_argc < 1) {
+ cl->reply.mr_status = MR_ARGS;
+ com_err(whoami, MR_ARGS, "got nameless access");
+ return;
+ }
cl->reply.mr_argc = 0;
cl->reply.mr_status =
len = read(motd, buffer, sizeof(buffer) - 1);
close(motd);
buffer[len] = 0;
+ row_count = 0;
retr_callback(1, arg, cl);
cl->reply.mr_status = 0;
}