OPENAFS-SA-2016-002 VldbListByAttributes information leak
[openafs.git] / src / libadmin / vos / afs_vosAdmin.c
index 492c461..49db8cb 100644 (file)
@@ -9,30 +9,30 @@
 
 #include <afsconfig.h>
 #include <afs/param.h>
+#include <afs/stds.h>
 
-RCSID
-    ("$Header$");
+#include <roken.h>
 
-#include <afs/stds.h>
-#include <stdio.h>
-#include <string.h>
 #include <ctype.h>
-#ifdef AFS_NT40_ENV
-#include <winsock2.h>
-#include <io.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#endif
-#include "afs_vosAdmin.h"
-#include "../adminutil/afs_AdminInternal.h"
+
 #include <afs/vlserver.h>
+#include <afs/afsint.h>
 #include <afs/volser.h>
 #include <afs/volint.h>
+
+#include "afs_vosAdmin.h"
+#include "../adminutil/afs_AdminInternal.h"
+
+/* File descriptors are HANDLE's on NT. The following typedef helps catch
+ * type errors. Duplicated from vol/ihandle.h
+ */
+#ifdef AFS_NT40_ENV
+typedef HANDLE FD_t;
+#else
+typedef int FD_t;
+#endif
+#define INVALID_FD ((FD_t)-1)
+
 #include <afs/partition.h>
 #include <rx/rx.h>
 #include <rx/rxstat.h>
@@ -150,10 +150,10 @@ GetServerAndPart(struct nvldbentry *entry, int voltype, afs_int32 * server,
 
     /* Doesn't check for non-existance of backup volume */
     if ((voltype == RWVOL) || (voltype == BACKVOL)) {
-       vtype = ITSRWVOL;
+       vtype = VLSF_RWVOL;
        istart = 0;             /* seach the entire entry */
     } else {
-       vtype = ITSROVOL;
+       vtype = VLSF_ROVOL;
        /* Seach from beginning of entry or pick up where we left off */
        istart = ((*previdx < 0) ? 0 : *previdx + 1);
     }
@@ -240,7 +240,7 @@ vos_BackupVolumeCreate(const void *cellHandle, vos_MessageCallBack_t callBack,
      * same server as volumeId
      */
 
-    if (rw_vol_entry.flags & BACK_EXISTS) {
+    if (rw_vol_entry.flags & VLF_BACKEXISTS) {
        if (!GetVolumeInfo
            (c_handle, rw_vol_entry.volumeId[BACKVOL], &bk_vol_entry,
             &bk_server, &bk_partition, &bk_vol_type, &tst)) {
@@ -318,14 +318,15 @@ vos_BackupVolumeCreateMultiple(const void *cellHandle,
     size_t prefix_len = 0;
     nbulkentries arrayEntries;
     afs_int32 nentries = 0;
-    register struct nvldbentry *entry;
+    struct nvldbentry *entry;
     int i;
     afs_int32 rw_volid, rw_server, rw_partition;
     int previdx;
     int equal = 0;
     char backbuf[1024];
 
-    memset((void *)&attr, 0, sizeof(attr));
+    memset(&attr, 0, sizeof(attr));
+    memset(&arrayEntries, 0, sizeof(arrayEntries));
 
     /*
      * Validate arguments
@@ -371,8 +372,6 @@ vos_BackupVolumeCreateMultiple(const void *cellHandle,
        prefix_len = strlen(volumePrefix);
     }
 
-    memset((void *)&arrayEntries, 0, sizeof(arrayEntries));
-
     /*
      * Get a list of all the volumes in the cell
      */
@@ -393,7 +392,7 @@ vos_BackupVolumeCreateMultiple(const void *cellHandle,
         * Skip entries that don't have a RW volume
         */
 
-       if (!(entry->flags & RW_EXISTS)) {
+       if (!(entry->flags & VLF_RWEXISTS)) {
            if (callBack != NULL) {
                const char *messageText;
                if (util_AdminErrorCodeTranslate
@@ -688,10 +687,8 @@ vos_PartitionGetBegin(const void *cellHandle, const void *serverHandle,
     int rc = 0;
     afs_status_t tst = 0;
     file_server_p f_server = (file_server_p) serverHandle;
-    afs_admin_iterator_p iter =
-       (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    partition_get_p part =
-       (partition_get_p) calloc(1, sizeof(partition_get_t));
+    afs_admin_iterator_p iter = malloc(sizeof(afs_admin_iterator_t));
+    partition_get_p part = calloc(1, sizeof(partition_get_t));
 
     /*
      * Validate arguments
@@ -877,7 +874,7 @@ vos_ServerOpen(const void *cellHandle, const char *serverName,
     int rc = 0;
     afs_status_t tst = 0;
     afs_cell_handle_p c_handle = (afs_cell_handle_p) cellHandle;
-    file_server_p f_server = (file_server_p) malloc(sizeof(file_server_t));
+    file_server_p f_server = malloc(sizeof(file_server_t));
     int server_address;
     struct rx_securityClass *sc[3];
     int scIndex;
@@ -1070,8 +1067,9 @@ vos_ServerSync(const void *cellHandle, const void *serverHandle,
 
 int ADMINAPI
 vos_FileServerAddressChange(const void *cellHandle,
-                           vos_MessageCallBack_t callBack, int oldAddress,
-                           int newAddress, afs_status_p st)
+                           vos_MessageCallBack_t callBack,
+                           unsigned int oldAddress,
+                           unsigned int newAddress, afs_status_p st)
 {
     int rc = 0;
     afs_status_t tst = 0;
@@ -1086,8 +1084,7 @@ vos_FileServerAddressChange(const void *cellHandle,
     }
 
     tst =
-       ubik_Call_New(VL_ChangeAddr, c_handle->vos, 0, oldAddress,
-                     newAddress);
+       ubik_VL_ChangeAddr(c_handle->vos, 0, oldAddress, newAddress);
     if (tst) {
        goto fail_vos_FileServerAddressChange;
     }
@@ -1125,13 +1122,14 @@ vos_FileServerAddressChange(const void *cellHandle,
 
 int ADMINAPI
 vos_FileServerAddressRemove(const void *cellHandle,
-                           vos_MessageCallBack_t callBack, int serverAddress,
+                           vos_MessageCallBack_t callBack,
+                           unsigned int serverAddress,
                            afs_status_p st)
 {
     int rc = 0;
     afs_status_t tst = 0;
     afs_cell_handle_p c_handle = (afs_cell_handle_p) cellHandle;
-    int dummyAddress = 0xffffffff;
+    unsigned int dummyAddress = 0xffffffff;
 
     /*
      * Validate arguments
@@ -1142,7 +1140,7 @@ vos_FileServerAddressRemove(const void *cellHandle,
     }
 
     tst =
-       ubik_Call_New(VL_ChangeAddr, c_handle->vos, 0, dummyAddress,
+       ubik_VL_ChangeAddr(c_handle->vos, 0, dummyAddress,
                      serverAddress);
     if (tst) {
        goto fail_vos_FileServerAddressRemove;
@@ -1334,9 +1332,8 @@ vos_FileServerGetBegin(const void *cellHandle, vos_MessageCallBack_t callBack,
     int rc = 0;
     afs_status_t tst = 0;
     afs_cell_handle_p c_handle = (afs_cell_handle_p) cellHandle;
-    afs_admin_iterator_p iter =
-       (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    server_get_p serv = (server_get_p) calloc(1, sizeof(server_get_t));
+    afs_admin_iterator_p iter = malloc(sizeof(afs_admin_iterator_t));
+    server_get_p serv = calloc(1, sizeof(server_get_t));
     struct VLCallBack unused;
 
 
@@ -1363,7 +1360,7 @@ vos_FileServerGetBegin(const void *cellHandle, vos_MessageCallBack_t callBack,
 
     serv->vldb = c_handle->vos;
     tst =
-       ubik_Call_New(VL_GetAddrs, c_handle->vos, 0, 0, 0, &unused,
+       ubik_VL_GetAddrs(c_handle->vos, 0, 0, 0, &unused,
                      &serv->total_addresses, &serv->addresses);
 
     if (tst) {
@@ -1673,10 +1670,8 @@ vos_ServerTransactionStatusGetBegin(const void *cellHandle,
     int rc = 0;
     afs_status_t tst = 0;
     file_server_p f_server = (file_server_p) serverHandle;
-    afs_admin_iterator_p iter =
-       (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    transaction_get_p tran =
-       (transaction_get_p) calloc(1, sizeof(transaction_get_t));
+    afs_admin_iterator_p iter = malloc(sizeof(afs_admin_iterator_t));
+    transaction_get_p tran = calloc(1, sizeof(transaction_get_t));
 
 
     /*
@@ -1884,19 +1879,19 @@ copyVLDBEntry(struct nvldbentry *source, vos_vldbEntry_p dest,
        dest->volumeSites[i].serverPartition = source->serverPartition[i];
        dest->volumeSites[i].serverFlags = 0;
 
-       if (source->serverFlags[i] & NEW_REPSITE) {
+       if (source->serverFlags[i] & VLSF_NEWREPSITE) {
            dest->volumeSites[i].serverFlags |= VOS_VLDB_NEW_REPSITE;
        }
-       if (source->serverFlags[i] & ITSROVOL) {
+       if (source->serverFlags[i] & VLSF_ROVOL) {
            dest->volumeSites[i].serverFlags |= VOS_VLDB_READ_ONLY;
        }
-       if (source->serverFlags[i] & ITSRWVOL) {
+       if (source->serverFlags[i] & VLSF_RWVOL) {
            dest->volumeSites[i].serverFlags |= VOS_VLDB_READ_WRITE;
        }
-       if (source->serverFlags[i] & ITSBACKVOL) {
+       if (source->serverFlags[i] & VLSF_BACKVOL) {
            dest->volumeSites[i].serverFlags |= VOS_VLDB_BACKUP;
        }
-       if (source->serverFlags[i] & RO_DONTUSE) {
+       if (source->serverFlags[i] & VLSF_DONTUSE) {
            dest->volumeSites[i].serverFlags |= VOS_VLDB_DONT_USE;
        }
 
@@ -1938,7 +1933,7 @@ copyVLDBEntry(struct nvldbentry *source, vos_vldbEntry_p dest,
 
 int ADMINAPI
 vos_VLDBGet(const void *cellHandle, vos_MessageCallBack_t callBack,
-           const unsigned int *volumeId, const char *volumeName,
+           const unsigned int *volumeId, char *volumeName,
            vos_vldbEntry_p vldbEntry, afs_status_p st)
 {
     int rc = 0;
@@ -2123,10 +2118,8 @@ vos_VLDBGetBegin(const void *cellHandle, const void *serverHandle,
     afs_status_t tst = 0;
     afs_cell_handle_p c_handle = (afs_cell_handle_p) cellHandle;
     file_server_p f_server = (file_server_p) serverHandle;
-    afs_admin_iterator_p iter =
-       (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    vldb_entry_get_p entry =
-       (vldb_entry_get_p) calloc(1, sizeof(vldb_entry_get_t));
+    afs_admin_iterator_p iter = malloc(sizeof(afs_admin_iterator_t));
+    vldb_entry_get_p entry = calloc(1, sizeof(vldb_entry_get_t));
     struct VldbListByAttributes attr;
 
     attr.Mask = 0;
@@ -2868,7 +2861,7 @@ vos_VLDBSync(const void *cellHandle, const void *serverHandle,
 int ADMINAPI
 vos_VolumeCreate(const void *cellHandle, const void *serverHandle,
                 vos_MessageCallBack_t callBack, unsigned int partition,
-                const char *volumeName, unsigned int quota,
+                char *volumeName, unsigned int quota,
                 unsigned int *volumeId, afs_status_p st)
 {
     int rc = 0;
@@ -3040,7 +3033,7 @@ vos_VolumeDelete(const void *cellHandle, const void *serverHandle,
 
 int ADMINAPI
 vos_VolumeRename(const void *cellHandle, vos_MessageCallBack_t callBack,
-                unsigned int readWriteVolumeId, const char *newVolumeName,
+                unsigned int readWriteVolumeId, char *newVolumeName,
                 afs_status_p st)
 {
     int rc = 0;
@@ -3210,7 +3203,7 @@ vos_VolumeDump(const void *cellHandle, const void *serverHandle,
 int ADMINAPI
 vos_VolumeRestore(const void *cellHandle, const void *serverHandle,
                  vos_MessageCallBack_t callBack, unsigned int partition,
-                 unsigned int *volumeId, const char *volumeName,
+                 unsigned int *volumeId, char *volumeName,
                  const char *dumpFile, vos_volumeRestoreType_t dumpType,
                  afs_status_p st)
 {
@@ -3496,7 +3489,7 @@ copyvolintXInfo(struct volintXInfo *source, vos_volumeEntry_p dest,
      * user from seeing stale data from a previous call
      */
 
-    memset(dest, 0, sizeof(dest));
+    memset(dest, 0, sizeof(*dest));
 
     switch (source->status) {
     case VOK:
@@ -3804,9 +3797,8 @@ vos_VolumeGetBegin(const void *cellHandle, const void *serverHandle,
     int rc = 0;
     afs_status_t tst = 0;
     file_server_p f_server = (file_server_p) serverHandle;
-    afs_admin_iterator_p iter =
-       (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t));
-    volume_get_p entry = (volume_get_p) calloc(1, sizeof(volume_get_t));
+    afs_admin_iterator_p iter = malloc(sizeof(afs_admin_iterator_t));
+    volume_get_p entry = calloc(1, sizeof(volume_get_t));
 
     /*
      * Validate arguments