📄 fs_name.c
字号:
/*** fs_name** The Sleuth Kit **** Display and manipulate directory entries ** This file contains generic functions that call the appropriate function** depending on the file system type.**** Brian Carrier [carrier <at> sleuthkit [dot] org]** Copyright (c) 2006-2008 Brian Carrier. All Rights reserved** Copyright (c) 2003-2005 Brian Carrier. All rights reserved **** TASK** Copyright (c) 2002 Brian Carrier, @stake Inc. All rights reserved**** TCTUTILs** Copyright (c) 2001 Brian Carrier. All rights reserved**** This software is distributed under the Common Public License 1.0*//** * \file fs_name.c * Code to allocate and free the TSK_FS_NAME structures. */#include "tsk_fs_i.h"char tsk_fs_name_type_str[TSK_FS_NAME_TYPE_STR_MAX][2] = { "-", "p", "c", "d", "b", "r", "l", "s", "h", "w", "v"};/** * \internal * Allocate a fs_name structure */TSK_FS_NAME *tsk_fs_name_alloc(size_t norm_namelen, size_t shrt_namelen){ TSK_FS_NAME *fs_name; fs_name = (TSK_FS_NAME *) tsk_malloc(sizeof(*fs_name)); if (fs_name == NULL) return NULL; fs_name->name = (char *) tsk_malloc(norm_namelen + 1); if (fs_name->name == NULL) { free(fs_name); return NULL; } fs_name->name_size = norm_namelen; fs_name->flags = 0; fs_name->shrt_name_size = shrt_namelen; if (shrt_namelen == 0) { fs_name->shrt_name = NULL; } else { fs_name->shrt_name = (char *) tsk_malloc(shrt_namelen + 1); if (fs_name->shrt_name == NULL) { free(fs_name->name); free(fs_name); return NULL; } } fs_name->type = TSK_FS_NAME_TYPE_UNDEF; fs_name->tag = TSK_FS_NAME_TAG; return fs_name;}/** * \internal * returns 1 on error */uint8_ttsk_fs_name_realloc(TSK_FS_NAME * fs_name, size_t namelen){ if ((fs_name == NULL) || (fs_name->tag != TSK_FS_NAME_TAG)) return 1; if (fs_name->name_size >= namelen) return 0; fs_name->name = (char *) tsk_realloc(fs_name->name, namelen + 1); if (fs_name->name == NULL) { fs_name->name_size = 0; return 1; } fs_name->type = TSK_FS_NAME_TYPE_UNDEF; fs_name->name_size = namelen; return 0;}/** * \internal * reset the values in the TSK_FS_NAME structure * @param a_fs_name Name structure to reset */voidtsk_fs_name_reset(TSK_FS_NAME * a_fs_name){ if (a_fs_name->name) a_fs_name->name[0] = '\0'; if (a_fs_name->shrt_name) a_fs_name->shrt_name[0] = '\0'; a_fs_name->meta_addr = 0; a_fs_name->meta_seq = 0; a_fs_name->type = 0; a_fs_name->flags = 0;}/** * \internal */voidtsk_fs_name_free(TSK_FS_NAME * fs_name){ if ((!fs_name) || (fs_name->tag != TSK_FS_NAME_TAG)) return; if (fs_name->name) { free(fs_name->name); fs_name->name = NULL; } if (fs_name->shrt_name) { free(fs_name->shrt_name); fs_name->shrt_name = NULL; } free(fs_name);}/** \internal * Copy the contents of a TSK_FS_NAME structure to another * structure. * @param a_fs_name_to Destination structure to copy to * @param a_fs_name_from Source structure to copy from * @returns 1 on error */uint8_ttsk_fs_name_copy(TSK_FS_NAME * a_fs_name_to, const TSK_FS_NAME * a_fs_name_from){ if ((a_fs_name_to == NULL) || (a_fs_name_from == NULL)) return 1; /* If the source has a full name, copy it */ if (a_fs_name_from->name) { // make sure there is enough space if (strlen(a_fs_name_from->name) >= a_fs_name_to->name_size) { a_fs_name_to->name_size = strlen(a_fs_name_from->name) + 16; a_fs_name_to->name = (char *) tsk_realloc(a_fs_name_to->name, a_fs_name_to->name_size); if (a_fs_name_to->name == NULL) return 1; } strncpy(a_fs_name_to->name, a_fs_name_from->name, a_fs_name_to->name_size); } else { if (a_fs_name_to->name_size > 0) a_fs_name_to->name[0] = '\0'; } // copy the short name, if one exists if (a_fs_name_from->shrt_name) { if (strlen(a_fs_name_from->shrt_name) >= a_fs_name_to->shrt_name_size) { a_fs_name_to->shrt_name_size = strlen(a_fs_name_from->shrt_name) + 16; a_fs_name_to->shrt_name = (char *) tsk_realloc(a_fs_name_to->shrt_name, a_fs_name_to->shrt_name_size); if (a_fs_name_to->shrt_name == NULL) return 1; } strncpy(a_fs_name_to->shrt_name, a_fs_name_from->shrt_name, a_fs_name_to->shrt_name_size); } else { if (a_fs_name_to->shrt_name_size > 0) a_fs_name_to->shrt_name[0] = '\0'; } a_fs_name_to->meta_addr = a_fs_name_from->meta_addr; a_fs_name_to->meta_seq = a_fs_name_from->meta_seq; a_fs_name_to->type = a_fs_name_from->type; a_fs_name_to->flags = a_fs_name_from->flags; return 0;}/*********************************************************************** * Printing functions ***********************************************************************//** * \internal * make the ls -l output from the mode * * ls must be 12 bytes or more! */voidtsk_fs_make_ls(TSK_FS_META * a_fs_meta, char *ls){ /* put the default values in */ strcpy(ls, "----------"); if (a_fs_meta->type < TSK_FS_META_TYPE_STR_MAX) ls[0] = tsk_fs_meta_type_str[a_fs_meta->type][0]; /* user perms */ if (a_fs_meta->mode & TSK_FS_META_MODE_IRUSR) ls[1] = 'r'; if (a_fs_meta->mode & TSK_FS_META_MODE_IWUSR) ls[2] = 'w'; /* set uid */ if (a_fs_meta->mode & TSK_FS_META_MODE_ISUID) { if (a_fs_meta->mode & TSK_FS_META_MODE_IXUSR) ls[3] = 's'; else ls[3] = 'S'; } else if (a_fs_meta->mode & TSK_FS_META_MODE_IXUSR) ls[3] = 'x'; /* group perms */ if (a_fs_meta->mode & TSK_FS_META_MODE_IRGRP) ls[4] = 'r'; if (a_fs_meta->mode & TSK_FS_META_MODE_IWGRP) ls[5] = 'w'; /* set gid */ if (a_fs_meta->mode & TSK_FS_META_MODE_ISGID) { if (a_fs_meta->mode & TSK_FS_META_MODE_IXGRP) ls[6] = 's'; else ls[6] = 'S'; } else if (a_fs_meta->mode & TSK_FS_META_MODE_IXGRP) ls[6] = 'x'; /* other perms */ if (a_fs_meta->mode & TSK_FS_META_MODE_IROTH) ls[7] = 'r'; if (a_fs_meta->mode & TSK_FS_META_MODE_IWOTH) ls[8] = 'w'; /* sticky bit */ if (a_fs_meta->mode & TSK_FS_META_MODE_ISVTX) { if (a_fs_meta->mode & TSK_FS_META_MODE_IXOTH) ls[9] = 't'; else ls[9] = 'T'; } else if (a_fs_meta->mode & TSK_FS_META_MODE_IXOTH) ls[9] = 'x';}static voidtsk_fs_print_time(FILE * hFile, time_t time){ if (time <= 0) { tsk_fprintf(hFile, "0000-00-00 00:00:00 (UTC)"); } else { struct tm *tmTime = localtime(&time); tsk_fprintf(hFile, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d (%s)", (int) tmTime->tm_year + 1900, (int) tmTime->tm_mon + 1, (int) tmTime->tm_mday, tmTime->tm_hour, (int) tmTime->tm_min, (int) tmTime->tm_sec,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -