]> andersk Git - moira.git/blobdiff - server/mr_scall.c
Use unsigned char rather than char to prevent sign extension
[moira.git] / server / mr_scall.c
index 1589426bc960075e4678c0fc91114b59377b22cf..5aac2566f4805a0900c43d9ce5545dc8ec7a7138 100644 (file)
@@ -6,9 +6,16 @@
  *     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.
@@ -37,6 +44,7 @@ static char *rcsid_sms_scall_c = "$Header$";
 extern char buf1[];
 extern int nclients;
 extern char *whoami;
+extern char *malloc();
 
 extern void clist_delete(), do_auth(), do_shutdown();
 void do_call();
@@ -77,14 +85,14 @@ do_client(cp)
        }
 }              
 
-#ifdef notdef
 char *procnames[] = {
         "noop",
         "auth",
         "shutdown",
         "query",
-        };
-#endif notdef
+        "access",
+};
+
 
 void
 do_call(cl)
@@ -99,19 +107,15 @@ 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:
@@ -140,9 +144,9 @@ free_rtn_tuples(cp)
                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)
@@ -151,6 +155,7 @@ free_rtn_tuples(cp)
                                free(p->sms_argl);
                        free(p);
                }
+#endif notdef
                delete_operation(t1->op);
                free(t1);
        }
@@ -158,8 +163,8 @@ free_rtn_tuples(cp)
 }      
 
 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;
@@ -170,20 +175,26 @@ retr_callback(argc, argv, 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;
 
@@ -206,16 +217,7 @@ do_retr(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, "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],
@@ -223,25 +225,15 @@ do_retr(cl)
                            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],
This page took 0.098428 seconds and 4 git commands to generate.