# HG changeset patch # User Andre Heinecke # Date 1392911049 0 # Node ID bc302bbceaf54c5b992fedb88d4056239d4a24d6 # Parent dc1e1e9e62ce7fdd358987e61cef326e8473fdff Move listutil again diff -r dc1e1e9e62ce -r bc302bbceaf5 CMakeLists.txt --- a/CMakeLists.txt Thu Feb 20 10:58:28 2014 +0000 +++ b/CMakeLists.txt Thu Feb 20 15:44:09 2014 +0000 @@ -22,7 +22,7 @@ ${CMAKE_SOURCE_DIR}/ui/certificate.cpp ${CMAKE_SOURCE_DIR}/ui/certificate_win.cpp ${CMAKE_SOURCE_DIR}/ui/certificate_linux.cpp - ${CMAKE_SOURCE_DIR}/cinst/listutil.c + ${CMAKE_SOURCE_DIR}/common/listutil.c ) set(M13UI_SOURCES diff -r dc1e1e9e62ce -r bc302bbceaf5 cinst/listutil.c --- a/cinst/listutil.c Thu Feb 20 10:58:28 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -#include "listutil.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define MAX_FILESIZE_KB 1024 - -void handle_errno() -{ - printf("Error: %s \n", strerror(errno)); -} - -list_status_t readList(const char *fileName, char **data, size_t *size) -{ - int fd = -1; - struct stat fileStat; - int rc = 0; - ssize_t bRead = 0; - - memset(&fileStat, 0, sizeof(fileStat)); - - list_status_t retval = UnknownError; - - fd = open(fileName, O_RDONLY); - if (fd == -1) { - handle_errno(); - retval = StatFailed; - goto cleanup; - } - - rc = fstat(fd, &fileStat); - if (rc < 0) { - printf ("Stat failed with rc: %i\n", rc); - retval = StatFailed; - goto cleanup; - } - - // Check the size of the file - if (!fileStat.st_size) { - printf("Size zero\n"); - retval = StatFailed; - goto cleanup; - } - - if (fileStat.st_size / 1024 > MAX_FILESIZE_KB && - fileStat.st_size > 0) { - printf("File too large\n"); - retval = TooLarge; - goto cleanup; - } - - *size = (size_t) fileStat.st_size; - - *data = (char*) malloc(*size); - - if (*data == NULL) { - printf("Malloc failed\n"); - retval = UnknownError; - goto cleanup; - } - - bRead = read(fd, *data, *size); - - if (bRead < 0 || (size_t) bRead != *size) { - printf("Read failed\n"); - if (bRead == -1) { - handle_errno(); - } - retval = UnknownError; - *size = 0; - if (*data) { - free(*data); - printf("Nulling data\n"); - *data = NULL; - } - goto cleanup; - } - - retval = UnknownValidity; -cleanup: - - if (fd && fd != -1) { - close(fd); - fd = -1; - } - - return retval; -} - -list_status_t readAndVerifyList(const char *fileName, char **data, size_t *size) -{ -// int validSig = 0; - char * signature = NULL; - - list_status_t retval = UnknownError; - *data = NULL; - *size = 0; - - retval = readList(fileName, data, size); - - if (retval != UnknownValidity) { - printf ("Readlist failed\n"); - return retval; - } - - if (!data || !*size) { - // should not have happend if readList works as specified - return UnknownError; - } - - signature = *data; - - if (*signature != 'S') { - printf("Does not start with S\n"); - retval = InvalidFormat; - goto cleanup; - } - -// TODO VERIFIY -retval = Valid; - -// Maybe check if all bytes are < 127 and > 0 - -cleanup: - if (retval != Valid && *data) { - free(*data); - *data = NULL; - *size = 0; - } - return retval; -} - diff -r dc1e1e9e62ce -r bc302bbceaf5 cinst/listutil.h --- a/cinst/listutil.h Thu Feb 20 10:58:28 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -#ifndef LISTUTIL_H -#define LISTUTIL_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/** - * @file listutil.h - * @brief Functions to work with the certificate list. - */ - -/** - * @brief Status of the List Operations - */ -typedef enum { - UnknownValidity = 0, // Not yet parsed - UnknownError = 1, // The expected unexpected - TooLarge = 2, // Failed because the file exeeds the limit - InvalidFormat = 3, // File does not appear to be in list format - InvalidSignature = 4, // Signature was invalid - StatFailed = 5, // Could not stat the file - ReadFailed = 6, // Could not read the file - IncompatibleVersion = 7, // The Format Version does not match - Valid = 8 // List is valid -} list_status_t; - -/** - * @brief Obtain the complete and verified Certificate list. - * - * This checks if the file fileName is a valid certificate - * list signed by the key specified in pubkey.h - * - * The caller has to free data. - * - * @param[in] fileName Name of the file (UTF-8 encoded). - * @param[out] data Newly allocated pointer to the file content. - * @param[out] size Size in Bytes of the file content. - * - * @return status of the operation. - */ -list_status_t readAndVerifyList(const char *fileName, char **data, size_t *size); -#ifdef __cplusplus -} -#endif -#endif diff -r dc1e1e9e62ce -r bc302bbceaf5 common/listutil.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/listutil.c Thu Feb 20 15:44:09 2014 +0000 @@ -0,0 +1,138 @@ +#include "listutil.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_FILESIZE_KB 1024 + +void handle_errno() +{ + printf("Error: %s \n", strerror(errno)); +} + +list_status_t readList(const char *fileName, char **data, size_t *size) +{ + int fd = -1; + struct stat fileStat; + int rc = 0; + ssize_t bRead = 0; + + memset(&fileStat, 0, sizeof(fileStat)); + + list_status_t retval = UnknownError; + + fd = open(fileName, O_RDONLY); + if (fd == -1) { + handle_errno(); + retval = StatFailed; + goto cleanup; + } + + rc = fstat(fd, &fileStat); + if (rc < 0) { + printf ("Stat failed with rc: %i\n", rc); + retval = StatFailed; + goto cleanup; + } + + // Check the size of the file + if (!fileStat.st_size) { + printf("Size zero\n"); + retval = StatFailed; + goto cleanup; + } + + if (fileStat.st_size / 1024 > MAX_FILESIZE_KB && + fileStat.st_size > 0) { + printf("File too large\n"); + retval = TooLarge; + goto cleanup; + } + + *size = (size_t) fileStat.st_size; + + *data = (char*) malloc(*size); + + if (*data == NULL) { + printf("Malloc failed\n"); + retval = UnknownError; + goto cleanup; + } + + bRead = read(fd, *data, *size); + + if (bRead < 0 || (size_t) bRead != *size) { + printf("Read failed\n"); + if (bRead == -1) { + handle_errno(); + } + retval = UnknownError; + *size = 0; + if (*data) { + free(*data); + printf("Nulling data\n"); + *data = NULL; + } + goto cleanup; + } + + retval = UnknownValidity; +cleanup: + + if (fd && fd != -1) { + close(fd); + fd = -1; + } + + return retval; +} + +list_status_t readAndVerifyList(const char *fileName, char **data, size_t *size) +{ +// int validSig = 0; + char * signature = NULL; + + list_status_t retval = UnknownError; + *data = NULL; + *size = 0; + + retval = readList(fileName, data, size); + + if (retval != UnknownValidity) { + printf ("Readlist failed\n"); + return retval; + } + + if (!data || !*size) { + // should not have happend if readList works as specified + return UnknownError; + } + + signature = *data; + + if (*signature != 'S') { + printf("Does not start with S\n"); + retval = InvalidFormat; + goto cleanup; + } + +// TODO VERIFIY +retval = Valid; + +// Maybe check if all bytes are < 127 and > 0 + +cleanup: + if (retval != Valid && *data) { + free(*data); + *data = NULL; + *size = 0; + } + return retval; +} + diff -r dc1e1e9e62ce -r bc302bbceaf5 common/listutil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/listutil.h Thu Feb 20 15:44:09 2014 +0000 @@ -0,0 +1,48 @@ +#ifndef LISTUTIL_H +#define LISTUTIL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** + * @file listutil.h + * @brief Functions to work with the certificate list. + */ + +/** + * @brief Status of the List Operations + */ +typedef enum { + UnknownValidity = 0, // Not yet parsed + UnknownError = 1, // The expected unexpected + TooLarge = 2, // Failed because the file exeeds the limit + InvalidFormat = 3, // File does not appear to be in list format + InvalidSignature = 4, // Signature was invalid + StatFailed = 5, // Could not stat the file + ReadFailed = 6, // Could not read the file + IncompatibleVersion = 7, // The Format Version does not match + Valid = 8 // List is valid +} list_status_t; + +/** + * @brief Obtain the complete and verified Certificate list. + * + * This checks if the file fileName is a valid certificate + * list signed by the key specified in pubkey.h + * + * The caller has to free data. + * + * @param[in] fileName Name of the file (UTF-8 encoded). + * @param[out] data Newly allocated pointer to the file content. + * @param[out] size Size in Bytes of the file content. + * + * @return status of the operation. + */ +list_status_t readAndVerifyList(const char *fileName, char **data, size_t *size); +#ifdef __cplusplus +} +#endif +#endif