* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.6 1987-06-30 20:04:43 wesommer
- * Free returned tuples when possible.
+ * Revision 1.8 1987-07-16 15:43:19 wesommer
+ * Fixed bug where the argv was not copied to private storage
+ * (it got changed out from under us before it got sent..).
*
+ * Revision 1.7 87/07/14 00:39:01 wesommer
+ * Rearranged loggin.
+ *
+ * Revision 1.6 87/06/30 20:04:43 wesommer
+ * Free returned tuples when possible.
+ *
* Revision 1.5 87/06/26 10:55:53 wesommer
* Added sms_access, now paiys attention to return code from
* sms_process_query, sms_check_access.
extern char buf1[];
extern int nclients;
extern char *whoami;
+extern char *malloc();
extern void clist_delete(), do_auth(), do_shutdown();
void do_call();
}
}
-#ifdef notdef
char *procnames[] = {
"noop",
"auth",
"shutdown",
"query",
- };
-#endif notdef
+ "access",
+};
+
void
do_call(cl)
cl->reply.sms_status = SMS_UNKNOWN_PROC;
return;
}
-#ifdef SMS_DBG
- fprintf(stderr, "[#%d] %s(", cl->id, procnames[pn]);
- for (i=0; i < cl->args->sms_argc; i++) {
- if (i) fputc(',', stderr);
- frequote(stderr,cl->args->sms_argv[i]);
- }
- fprintf(stderr, ")\n");
-#endif SMS_DBG
+ if (log_flags & LOG_ARGS)
+ log_args(procnames[pn], cl->args->sms_argc,
+ cl->args->sms_argv);
+ else if (log_flags & LOG_REQUESTS)
+ com_err(whoami, 0, procnames[pn]);
switch(pn) {
case SMS_NOOP:
cl->reply.sms_status = 0;
- com_err(whoami, 0, "noop");
return;
case SMS_AUTH:
register returned_tuples *t1=temp;
temp = t1->next;
if (t1 == cp->last) cp->last = NULL;
-#ifdef notdef
+
sms_destroy_reply(t1->retval);
-#endif notdef
+#ifdef notdef
if (t1->retval) {
register sms_params *p = t1->retval;
if (p->sms_flattened)
free(p->sms_argl);
free(p);
}
+#endif notdef
delete_operation(t1->op);
free(t1);
}
}
retr_callback(argc, argv, p_cp)
- int argc;
- char **argv;
+ register int argc;
+ register char **argv;
char *p_cp;
{
register client *cp = (client *)p_cp;
sms_params *arg_tmp = (sms_params *)db_alloc(sizeof(sms_params));
returned_tuples *tp = (returned_tuples *)
db_alloc(sizeof(returned_tuples));
+ register char **nargv = (char **)malloc(argc * sizeof(char *));
+ register int i;
OPERATION op_tmp = create_operation();
-#ifdef notdef /* We really don't want this logged */
- com_err(whoami, 0, "Returning next data:");
- log_args(argc, argv);
-#endif notdef
+ if (log_flags & LOG_RESP)
+ log_args("return: ", argc, argv);
+
tp->op = op_tmp;
tp->retval = arg_tmp;
tp->next = NULL;
arg_tmp->sms_status = SMS_MORE_DATA;
arg_tmp->sms_argc = argc;
- arg_tmp->sms_argv = argv;
+ arg_tmp->sms_argv = nargv;
+ for (i = 0; i < argc; i++) {
+ register int len = strlen(argv[i]) + 1;
+ nargv[i] = malloc(len);
+ bcopy(argv[i], nargv[i], len);
+ }
arg_tmp->sms_flattened = (char *)NULL;
arg_tmp->sms_argl = (int *)NULL;
{
cl->reply.sms_argc = 0;
cl->reply.sms_status = 0;
-#ifdef notdef
- if (!cl->clname) {
- com_err(whoami, 0, "Unauthenticated query rejected");
- cl->reply.sms_status = EACCES;
- return;
- }
-#endif notdef
- com_err(whoami, 0, "Processing query: ");
- log_args(cl->args->sms_argc, cl->args->sms_argv);
-
+
cl->reply.sms_status =
sms_process_query(cl,
cl->args->sms_argv[0],
cl->args->sms_argv+1,
retr_callback,
(char *)cl);
-
- com_err(whoami, 0, "Query complete.");
+ if (log_flags & LOG_RES)
+ com_err(whoami, 0, "Query complete.");
}
do_access(cl)
client *cl;
{
cl->reply.sms_argc = 0;
- cl->reply.sms_status = 0;
-#ifdef notdef
- if (!cl->clname) {
- com_err(whoami, 0, "Unauthenticated query rejected");
- cl->reply.sms_status = EACCES;
- return;
- }
-#endif notdef
- com_err(whoami, 0, "Checking access: ");
- log_args(cl->args->sms_argc, cl->args->sms_argv);
-
+
cl->reply.sms_status =
sms_check_access(cl,
cl->args->sms_argv[0],