Formatting device module.

This commit is contained in:
louib
2020-01-05 16:27:30 -05:00
parent 5f01b660bd
commit a5a3f3b9a3
4 changed files with 174 additions and 159 deletions

View File

@@ -23,4 +23,4 @@ jobs:
- name: verifying code style - name: verifying code style
# TODO use check-format when all the code has been formatted. # TODO use check-format when all the code has been formatted.
# run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && make check-format # run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && make check-format
run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && clang-format -i -style=file src/context.h src/nwipe.c src/nwipe.h src/options.c src/options.h src/version.h src/version.c src/method.h src/method.c && git diff-index --quiet HEAD run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && clang-format -i -style=file src/context.h src/device.h src/device.c src/nwipe.c src/nwipe.h src/options.c src/options.h src/version.h src/version.c src/method.h src/method.c && git diff-index --quiet HEAD

View File

@@ -23,4 +23,4 @@ jobs:
- name: verifying code style - name: verifying code style
# TODO use check-format when all the code has been formatted. # TODO use check-format when all the code has been formatted.
# run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && make check-format # run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && make check-format
run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && clang-format -i -style=file src/context.h src/nwipe.c src/nwipe.h src/options.c src/options.h src/version.h src/version.c src/method.h src/method.c && git diff-index --quiet HEAD run: export PATH=$PATH:/usr/lib/llvm-5.0/bin && clang-format -i -style=file src/context.h src/device.h src/device.c src/nwipe.c src/nwipe.h src/options.c src/options.h src/version.h src/version.c src/method.h src/method.c && git diff-index --quiet HEAD

View File

@@ -2,9 +2,9 @@
* device.c: Device routines for nwipe. * device.c: Device routines for nwipe.
* *
* Copyright Darik Horn <dajhorn-dban@vanadac.com>. * Copyright Darik Horn <dajhorn-dban@vanadac.com>.
* *
* Modifications to original dwipe Copyright Andy Beverley <andy@andybev.com> * Modifications to original dwipe Copyright Andy Beverley <andy@andybev.com>
* *
* This program is free software; you can redistribute it and/or modify it under * This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software * the terms of the GNU General Public License as published by the Free Software
* Foundation, version 2. * Foundation, version 2.
@@ -16,7 +16,7 @@
* *
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., * this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
*/ */
@@ -28,7 +28,7 @@
#include "options.h" #include "options.h"
#include "logging.h" #include "logging.h"
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <linux/hdreg.h> //Drive specific defs #include <linux/hdreg.h> // Drive specific defs
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@@ -39,183 +39,201 @@
#include <parted/debug.h> #include <parted/debug.h>
int check_device( nwipe_context_t*** c, PedDevice* dev, int dcount ); int check_device( nwipe_context_t*** c, PedDevice* dev, int dcount );
char *trim(char *str); char* trim( char* str );
int nwipe_device_scan( nwipe_context_t*** c ) int nwipe_device_scan( nwipe_context_t*** c )
{ {
/** /**
* Scans the filesystem for storage device names. * Scans the filesystem for storage device names.
* *
* @parameter device_names A reference to a null array pointer. * @parameter device_names A reference to a null array pointer.
* @modifies device_names Populates device_names with an array of nwipe_contect_t * @modifies device_names Populates device_names with an array of nwipe_contect_t
* @returns The number of strings in the device_names array. * @returns The number of strings in the device_names array.
* *
*/ */
PedDevice* dev = NULL; PedDevice* dev = NULL;
ped_device_probe_all(); ped_device_probe_all();
int dcount = 0;
while ((dev = ped_device_get_next (dev))) int dcount = 0;
{
if (check_device(c, dev, dcount))
dcount++;
}
/* Return the number of devices that were found. */ while( ( dev = ped_device_get_next( dev ) ) )
return dcount; {
if( check_device( c, dev, dcount ) )
dcount++;
}
/* Return the number of devices that were found. */
return dcount;
} /* nwipe_device_scan */ } /* nwipe_device_scan */
int nwipe_device_get( nwipe_context_t*** c, char **devnamelist, int ndevnames ) int nwipe_device_get( nwipe_context_t*** c, char** devnamelist, int ndevnames )
{ {
/** /**
* Gets information about devices * Gets information about devices
* *
* @parameter device_names A reference to a null array pointer. * @parameter device_names A reference to a null array pointer.
* @parameter devnamelist An array of string pointers to the device names * @parameter devnamelist An array of string pointers to the device names
* @parameter ndevnames Number of elements in devnamelist * @parameter ndevnames Number of elements in devnamelist
* @modifies device_names Populates device_names with an array of nwipe_contect_t * @modifies device_names Populates device_names with an array of nwipe_contect_t
* @returns The number of strings in the device_names array. * @returns The number of strings in the device_names array.
* *
*/ */
PedDevice* dev = NULL; PedDevice* dev = NULL;
int i;
int dcount = 0;
for(i = 0; i < ndevnames; i++) { int i;
int dcount = 0;
dev = ped_device_get(devnamelist[i]); for( i = 0; i < ndevnames; i++ )
if (!dev) {
{
nwipe_log( NWIPE_LOG_WARNING, "Device %s not found", devnamelist[i] );
continue;
}
if (check_device(c, dev, dcount)) dev = ped_device_get( devnamelist[i] );
dcount++; if( !dev )
} {
nwipe_log( NWIPE_LOG_WARNING, "Device %s not found", devnamelist[i] );
continue;
}
/* Return the number of devices that were found. */ if( check_device( c, dev, dcount ) )
return dcount; dcount++;
}
/* Return the number of devices that were found. */
return dcount;
} /* nwipe_device_get */ } /* nwipe_device_get */
int check_device( nwipe_context_t*** c, PedDevice* dev, int dcount ) int check_device( nwipe_context_t*** c, PedDevice* dev, int dcount )
{ {
/* Populate this struct, then assign it to overall array of structs. */ /* Populate this struct, then assign it to overall array of structs. */
nwipe_context_t* next_device; nwipe_context_t* next_device;
int fd; int fd;
int idx; int idx;
/* Check whether this drive is on the excluded drive list ? */ /* Check whether this drive is on the excluded drive list ? */
idx=0; idx = 0;
while ( idx < 10 ) while( idx < 10 )
{ {
if ( !strcmp( dev->path, nwipe_options.exclude[idx++] )) if( !strcmp( dev->path, nwipe_options.exclude[idx++] ) )
{ {
nwipe_log( NWIPE_LOG_NOTICE, "Device %s excluded as per command line option -e", dev->path ); nwipe_log( NWIPE_LOG_NOTICE, "Device %s excluded as per command line option -e", dev->path );
return 0; return 0;
} }
} }
/* Try opening the device to see if it's valid. Close on completion. */ /* Try opening the device to see if it's valid. Close on completion. */
if (!ped_device_open(dev)) if( !ped_device_open( dev ) )
{ {
nwipe_log( NWIPE_LOG_FATAL, "Unable to open device" ); nwipe_log( NWIPE_LOG_FATAL, "Unable to open device" );
return 0; return 0;
} }
ped_device_close(dev); ped_device_close( dev );
/* New device, reallocate memory for additional struct pointer */
*c = realloc (*c, (dcount+1) * sizeof(nwipe_context_t *));
next_device = malloc (sizeof(nwipe_context_t));
/* Check the allocation. */ /* New device, reallocate memory for additional struct pointer */
if( ! next_device ) *c = realloc( *c, ( dcount + 1 ) * sizeof( nwipe_context_t* ) );
{
nwipe_perror( errno, __FUNCTION__, "malloc" );
nwipe_log( NWIPE_LOG_FATAL, "Unable to create the array of enumeration contexts." );
return 0;
}
/* Zero the allocation. */ next_device = malloc( sizeof( nwipe_context_t ) );
memset( next_device , 0, sizeof( nwipe_context_t ) );
/* Get device information */ /* Check the allocation. */
next_device->label = dev->model; if( !next_device )
next_device->device_name = dev->path; {
next_device->device_size = dev->length * dev->sector_size; nwipe_perror( errno, __FUNCTION__, "malloc" );
next_device->device_size_text = ped_unit_format_byte(dev, dev->length * dev->sector_size); nwipe_log( NWIPE_LOG_FATAL, "Unable to create the array of enumeration contexts." );
next_device->result = -2; return 0;
/* Attempt to get serial number of device. */ }
if ( (fd = open ( next_device->device_name = dev->path, O_RDONLY)) == ERR )
{
nwipe_log( NWIPE_LOG_WARNING, "Unable to open device %s to obtain serial number", next_device->device_name );
}
/* We don't check the ioctl return status because there are plenty of situations where a serial number may not be
* returned by ioctl such as USB drives, logical volumes, encryted volumes, so the log file would have multiple
* benign ioctl errors reported which isn't necessarily a problem.
*/
ioctl(fd, HDIO_GET_IDENTITY, &next_device->identity);
close( fd );
for (idx=0; idx<20; idx++) next_device->serial_no[idx]=next_device->identity.serial_no[idx]; /* Zero the allocation. */
memset( next_device, 0, sizeof( nwipe_context_t ) );
next_device->serial_no[20]=0; /* terminate the string */
trim ( (char*) next_device->serial_no ); /* Remove leading/training whitespace from serial number and left justify */
nwipe_log( NWIPE_LOG_INFO,"Found drive model=\"%s\", device path=\"%s\", size=\"%s\", serial number=\"%s\"", next_device->label, next_device->device_name, next_device->device_size_text, next_device->serial_no); /* Get device information */
next_device->label = dev->model;
next_device->device_name = dev->path;
next_device->device_size = dev->length * dev->sector_size;
next_device->device_size_text = ped_unit_format_byte( dev, dev->length * dev->sector_size );
next_device->result = -2;
(*c)[dcount] = next_device; /* Attempt to get serial number of device. */
return 1; if( ( fd = open( next_device->device_name = dev->path, O_RDONLY ) ) == ERR )
{
nwipe_log( NWIPE_LOG_WARNING, "Unable to open device %s to obtain serial number", next_device->device_name );
}
/*
* We don't check the ioctl return status because there are plenty of situations where a serial number may not be
* returned by ioctl such as USB drives, logical volumes, encryted volumes, so the log file would have multiple
* benign ioctl errors reported which isn't necessarily a problem.
*/
ioctl( fd, HDIO_GET_IDENTITY, &next_device->identity );
close( fd );
for( idx = 0; idx < 20; idx++ )
next_device->serial_no[idx] = next_device->identity.serial_no[idx];
next_device->serial_no[20] = 0; /* terminate the string */
trim( (char*) next_device->serial_no ); /* Remove leading/training whitespace from serial number and left justify */
nwipe_log( NWIPE_LOG_INFO,
"Found drive model=\"%s\", device path=\"%s\", size=\"%s\", serial number=\"%s\"",
next_device->label,
next_device->device_name,
next_device->device_size_text,
next_device->serial_no );
( *c )[dcount] = next_device;
return 1;
} }
/* Remove leading/training whitespace from a string and left justify result */ /* Remove leading/training whitespace from a string and left justify result */
char *trim(char *str) char* trim( char* str )
{ {
size_t len = 0; size_t len = 0;
char *frontp = str; char* frontp = str;
char *endp = NULL; char* endp = NULL;
if( str == NULL ) if( str == NULL )
{ {
return NULL; return NULL;
} }
if( str[0] == '\0' ) if( str[0] == '\0' )
{ {
return str; return str;
} }
len = strlen(str); len = strlen( str );
endp = str + len; endp = str + len;
/* Move the front and back pointers to address the first non-whitespace /*
* characters from each end. * Move the front and back pointers to address the first non-whitespace
*/ * characters from each end.
while( isspace((unsigned char) *frontp) ) { ++frontp; } */
if( endp != frontp ) while( isspace( (unsigned char) *frontp ) )
{ {
while( isspace((unsigned char) *(--endp)) && endp != frontp ) {} ++frontp;
} }
if( str + len - 1 != endp ) if( endp != frontp )
*(endp + 1) = '\0'; {
else if( frontp != str && endp == frontp ) while( isspace( (unsigned char) *( --endp ) ) && endp != frontp )
*str = '\0'; {
/* Shift the string so that it starts at str so that if it's dynamically }
* allocated, we can still free it on the returned pointer. Note the reuse }
* of endp to mean the front of the string buffer now. if( str + len - 1 != endp )
*/ *( endp + 1 ) = '\0';
endp = str; else if( frontp != str && endp == frontp )
if( frontp != str ) *str = '\0';
{ /*
while( *frontp ) { *endp++ = *frontp++; } * Shift the string so that it starts at str so that if it's dynamically
*endp = '\0'; * allocated, we can still free it on the returned pointer. Note the reuse
} * of endp to mean the front of the string buffer now.
return str; */
endp = str;
if( frontp != str )
{
while( *frontp )
{
*endp++ = *frontp++;
}
*endp = '\0';
}
return str;
} }
/* eof */

View File

@@ -2,7 +2,7 @@
* device.h: Device routines for nwipe. * device.h: Device routines for nwipe.
* *
* Copyright Darik Horn <dajhorn-dban@vanadac.com>. * Copyright Darik Horn <dajhorn-dban@vanadac.com>.
* *
* Modifications to original dwipe Copyright Andy Beverley <andy@andybev.com> * Modifications to original dwipe Copyright Andy Beverley <andy@andybev.com>
* *
* This program is free software; you can redistribute it and/or modify it under * This program is free software; you can redistribute it and/or modify it under
@@ -16,18 +16,15 @@
* *
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., * this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
*/ */
#ifndef DEVICE_H_ #ifndef DEVICE_H_
#define DEVICE_H_ #define DEVICE_H_
void nwipe_device_identify( nwipe_context_t* c ); /* Get hardware information about the device. */ void nwipe_device_identify( nwipe_context_t* c ); // Get hardware information about the device.
int nwipe_device_scan( nwipe_context_t*** c ); /* Find devices that we can wipe. */ int nwipe_device_scan( nwipe_context_t*** c ); // Find devices that we can wipe.
int nwipe_device_get( nwipe_context_t*** c, char **devnamelist, int ndevnames ); /* Get info about devices to wipe */ int nwipe_device_get( nwipe_context_t*** c, char** devnamelist, int ndevnames ); // Get info about devices to wipe.
#endif /* DEVICE_H_ */ #endif /* DEVICE_H_ */
/* eof */