Don't cast the return from calloc()
[openafs.git] / src / libadmin / adminutil / afs_utilAdmin.c
index 7049a46..7cfdd40 100644 (file)
@@ -9,14 +9,18 @@
 
 #include <afsconfig.h>
 #include <afs/param.h>
+#include <afs/stds.h>
 
+#include <roken.h>
+
+#include <rx/rx.h>
+#include <rx/rxstat.h>
+
+#ifdef AFS_NT40_ENV
+# include <afs/krb5_nt.h>
+#endif
 
-#include <afs/stds.h>
-#include <afs/afs_Admin.h>
-#include <stdio.h>
-#include <string.h>
 #include <afs/afs_Admin.h>
-#include "afs_AdminInternal.h"
 #include <afs/pthread_glock.h>
 #include <afs/cellconfig.h>
 #include <afs/dirpath.h>
 #include <afs/bnode.h>
 #include <afs/volser.h>
 #include <afs/afscbint.h>
-#include <rx/rx.h>
-#include <rx/rxstat.h>
-#ifdef AFS_NT40_ENV
-#include <winsock2.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#endif
+
+#include "afs_AdminInternal.h"
 #include "afs_utilAdmin.h"
 
 /*
@@ -79,9 +74,15 @@ init_once(void)
     initialize_AU_error_table();
     initialize_AV_error_table();
     initialize_VOLS_error_table();
+#ifdef AFS_KRB5_ERROR_ENV
+    initialize_krb5();
+#endif
     error_init_done = 1;
 }
 
+/*
+ * (*errorTextP) will not be freed by the caller.
+ */
 int ADMINAPI
 util_AdminErrorCodeTranslate(afs_status_t errorCode, int langId,
                             const char **errorTextP, afs_status_p st)
@@ -103,6 +104,13 @@ util_AdminErrorCodeTranslate(afs_status_t errorCode, int langId,
        pthread_once(&error_init_once, init_once);
     code = (afs_int32) errorCode;
     *errorTextP = afs_error_message(code);
+#ifdef AFS_KRB5_ERROR_ENV
+    if (strncmp(*errorTextP, "unknown", strlen("unknown")) == 0) {
+        const char *msg = fetch_krb5_error_message(code);
+        if (msg)
+            *errorTextP = msg;
+    }
+#endif
     rc = 1;
 
   fail_util_AdminErrorCodeTranslate:
@@ -220,8 +228,7 @@ util_DatabaseServerGetBegin(const char *cellName, void **iterationIdP,
     afs_status_t tst = 0;
     afs_admin_iterator_p iter =
        (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    database_server_get_p serv =
-       (database_server_get_p) calloc(1, sizeof(database_server_get_t));
+    database_server_get_p serv = calloc(1, sizeof(database_server_get_t));
     char copyCell[MAXCELLCHARS];
 
     /*
@@ -1197,13 +1204,13 @@ UnmarshallRPCStats(afs_uint32 serverVersion, afs_uint32 ** ptrP,
     s->stats_v1.func_index = *(ptr++);
     hi = *(ptr++);
     lo = *(ptr++);
-    hset64(s->stats_v1.invocations, hi, lo);
+    s->stats_v1.invocations = ((afs_uint64) hi << 32) + lo;
     hi = *(ptr++);
     lo = *(ptr++);
-    hset64(s->stats_v1.bytes_sent, hi, lo);
+    s->stats_v1.bytes_sent = ((afs_uint64) hi << 32) + lo;
     hi = *(ptr++);
     lo = *(ptr++);
-    hset64(s->stats_v1.bytes_rcvd, hi, lo);
+    s->stats_v1.bytes_rcvd = ((afs_uint64) hi << 32) + lo;
     s->stats_v1.queue_time_sum.sec = *(ptr++);
     s->stats_v1.queue_time_sum.usec = *(ptr++);
     s->stats_v1.queue_time_sum_sqr.sec = *(ptr++);
@@ -2018,7 +2025,7 @@ ListCellsRPC(void *rpc_specific, int slot, int *last_item,
         for (n=0; n<sl.serverList_len && n<UTIL_MAX_CELL_HOSTS; n++) {
             t->cell[slot].serverAddr[n] = sl.serverList_val[n];
         }
-        xdr_free(sl.serverList_val, sl.serverList_len);
+        xdr_free((xdrproc_t) xdr_serverList, &sl);
     }
 
     /*