butc: Initialize RPC outputs at top of function 14/13314/2
authorBenjamin Kaduk <kaduk@mit.edu>
Sun, 9 Sep 2018 02:25:40 +0000 (21:25 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 30 Oct 2020 01:32:54 +0000 (21:32 -0400)
RPC handlers are a little bit special in that their output parameters
are discarded on error and an Rx abort is sent instead of the usual
response fields.  Nonetheless, it is good code hygeine to adhere to
the practices we use for the rest of the functions in the tree:
initialize output variables before the first return.

Change-Id: I6c2e25b04ccb6277bd28e398121723b92fe42b04
Reviewed-on: https://gerrit.openafs.org/13314
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/butc/tcprocs.c

index c51b1f1..5df0b42 100644 (file)
@@ -172,6 +172,7 @@ SLabelTape(struct rx_call *acid, struct tc_tapeLabel *label, afs_uint32 *taskId)
     statusP statusPtr = NULL;
     afs_int32 code;
 
+    *taskId = 0;
 #ifdef xbsa
     if (CONF_XBSA)
        return (TC_BADTASK);    /* LabelTape does not apply if XBSA */
@@ -261,12 +262,12 @@ SPerformDump(struct rx_call *rxCallId, struct tc_dumpInterface *tcdiPtr,
 #endif
     afs_int32 code = 0;
 
-    if (callPermitted(rxCallId) == 0)
-       return (TC_NOTPERMITTED);
-
     /* should be verifying parameter validity */
     *taskId = 0;
 
+    if (callPermitted(rxCallId) == 0)
+       return (TC_NOTPERMITTED);
+
     /* this creates a node in list, alots an id for it and prepares it for locking */
     CreateNode(&newNode);
 
@@ -365,6 +366,8 @@ SPerformRestore(struct rx_call *acid, char *dumpSetName,
     PROCESS pid;
 #endif
 
+    *taskID = 0;
+
     if (callPermitted(acid) == 0)
        return (TC_NOTPERMITTED);
 
@@ -482,6 +485,8 @@ SRestoreDb(struct rx_call *rxCall, afs_uint32 *taskId)
     statusP statusPtr;
     afs_int32 code = 0;
 
+    *taskId = 0;
+
 #ifdef xbsa
     if (CONF_XBSA)
        return (TC_BADTASK);    /* LabelTape does not apply if XBSA */
@@ -560,6 +565,8 @@ SSaveDb(struct rx_call *rxCall, Date archiveTime, afs_uint32 *taskId)
     afs_int32 code = 0;
     struct saveDbIf *ptr;
 
+    *taskId = 0;
+
 #ifdef xbsa
     if (CONF_XBSA)
        return (TC_BADTASK);    /* LabelTape does not apply if XBSA */
@@ -650,6 +657,8 @@ SScanDumps(struct rx_call *acid, afs_int32 addDbFlag, afs_uint32 *taskId)
     statusP statusPtr = NULL;
     afs_int32 code = 0;
 
+    *taskId = 0;
+
 #ifdef xbsa
     if (CONF_XBSA)
        return (TC_BADTASK);    /* ScanDumps does not apply if XBSA */
@@ -724,6 +733,8 @@ STC_TCInfo(struct rx_call *call, struct tc_tcInfo *ti)
 static afs_int32
 STCInfo(struct rx_call *acid, struct tc_tcInfo *tciptr)
 {
+    memset(tciptr, 0, sizeof(*tciptr));
+
     if (callPermitted(acid) == 0)
        return (TC_NOTPERMITTED);
 
@@ -761,6 +772,7 @@ SDeleteDump(struct rx_call *acid, afs_uint32 dumpID, afs_uint32 *taskId)
 #endif
 
     *taskId = 0;
+
     if (!CONF_XBSA)
        return (TC_BADTASK);    /* Only do if butc is started as XBSA */