/* Chrysalide - Outil d'analyse de fichiers binaires * core.c - prototypes pour les informations de base pour tout élément ajouté * * Copyright (C) 2014 Cyrille Bagard * * This file is part of Chrysalide. * * OpenIDA 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 Foundation; either version 3 of the License, or * (at your option) any later version. * * OpenIDA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #include "core.h" #include #include #include #include #include #include #include #include "../../common/io.h" /****************************************************************************** * * * Paramètres : - * * * * Description : Détermine une fois pour toute la désignation de l'usager. * * * * Retour : Nom statique déterminé. * * * * Remarques : - * * * ******************************************************************************/ const char *get_local_author_name(void) { static char result[MAX_DB_AUTHOR_LEN]; /* Désignation à retourner */ char *chrysalide_user; /* Eventuel nom spécifique */ char *logname; /* Nom depuis l'environnement */ char hostname[HOST_NAME_MAX]; /* Nom de la machine courante */ int ret; /* Bilan d'un appel */ if (result[0] == '\0') { chrysalide_user = getenv("CHRYSALIDE_USER"); if (chrysalide_user != NULL) { strncpy(result, chrysalide_user, MAX_DB_AUTHOR_LEN - 1); result[MAX_DB_AUTHOR_LEN - 1] = '\0'; } else { logname = getenv("LOGNAME"); if (logname == NULL) logname = ""; ret = gethostname(hostname, HOST_NAME_MAX); if (ret != 0) hostname[0] = '\0'; if (logname != NULL && hostname[0] != '\0') snprintf(result, MAX_DB_AUTHOR_LEN, "%s@%s", logname, hostname); else if (logname != NULL && hostname[0] == '\0') snprintf(result, MAX_DB_AUTHOR_LEN, "%s", logname); else if (logname == NULL && hostname[0] != '\0') snprintf(result, MAX_DB_AUTHOR_LEN, "@%s", hostname); else snprintf(result, MAX_DB_AUTHOR_LEN, "anonymous"); } } return result; } /****************************************************************************** * * * Paramètres : info = informations à constituer. [OUT] * * type = type de l'élément à mettre en place. * * user = provenance des informations ou NULL si machine. * * * * Description : Initialise le coeur des informations d'un élément ajouté. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void init_core_db_info(core_db_info *info, uint64_t type, const char *user) { info->type = type; strncpy(info->user, user, MAX_DB_AUTHOR_LEN - 1); info->user[MAX_DB_AUTHOR_LEN - 1] = '\0'; info->created = time(NULL); info->modified = info->created; info->saved = 0; } /****************************************************************************** * * * Paramètres : info = informations à constituer. [OUT] * * type = type de l'élément, lu en avance de phase. * * fd = flux ouvert en lecture pour l'importation. * * * * Description : Importe le coeur des informations d'un élément ajouté. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool load_core_db_info(core_db_info *info, uint64_t type, int fd) { #if 0 ssize_t got; /* Quantité de données reçues */ uint64_t val64; /* Valeur sur 64 bits */ info->type = type; got = safe_recv(fd, info->user, MAX_DB_AUTHOR_LEN, MSG_WAITALL); if (got != MAX_DB_AUTHOR_LEN) return false; info->user[MAX_DB_AUTHOR_LEN - 1] = '\0'; got = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL); if (got != sizeof(uint64_t)) return false; info->created = be64toh(val64); got = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL); if (got != sizeof(uint64_t)) return false; info->modified = be64toh(val64); info->saved = info->modified; #endif return true; } /****************************************************************************** * * * Paramètres : info = informations à sauvegarer. * * fd = flux ouvert en écriture pour l'exportation. * * * * Description : Exporte le coeur des informations d'un élément ajouté. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool store_core_db_info(core_db_info *info, int fd) { #if 0 ssize_t got; /* Quantité de données reçues */ got = safe_send(fd, (uint64_t []) { htobe64(info->type) }, sizeof(uint64_t), MSG_WAITALL); if (got != sizeof(uint64_t)) return false; got = safe_send(fd, info->user, MAX_DB_AUTHOR_LEN, MSG_WAITALL); if (got != MAX_DB_AUTHOR_LEN) return false; got = safe_send(fd, (uint64_t []) { htobe64(info->created) }, sizeof(uint64_t), MSG_WAITALL); if (got != sizeof(uint64_t)) return false; got = safe_send(fd, (uint64_t []) { htobe64(info->modified) }, sizeof(uint64_t), MSG_WAITALL); if (got != sizeof(uint64_t)) return false; info->saved = time(NULL); #endif return true; }