| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2021-03-19 15:12:26 -07:00
										 |  |  |  *  Copyright (C) 2013-2021 Cisco Systems, Inc. and/or its affiliates. All rights reserved. | 
					
						
							| 
									
										
										
										
											2019-01-25 10:15:50 -05:00
										 |  |  |  *  Copyright (C) 2007-2013 Sourcefire, Inc. | 
					
						
							| 
									
										
										
										
											2008-04-02 15:24:51 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  Authors: Nigel Horne | 
					
						
							| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  This program is free software; you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2008-04-02 15:24:51 +00:00
										 |  |  |  *  it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  *  published by the Free Software Foundation. | 
					
						
							| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  This program 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 this program; if not, write to the Free Software | 
					
						
							| 
									
										
										
										
											2006-04-09 19:59:28 +00:00
										 |  |  |  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | 
					
						
							|  |  |  |  *  MA 02110-1301, USA. | 
					
						
							| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-22 10:37:32 +00:00
										 |  |  | #ifndef __BLOB_H
 | 
					
						
							|  |  |  | #define __BLOB_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Resizable chunk of memory | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  | typedef struct blob { | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  |     char *name;          /* filename */ | 
					
						
							|  |  |  |     unsigned char *data; /* the stuff itself */ | 
					
						
							|  |  |  |     off_t len;           /* number of bytes of data so far */ | 
					
						
							|  |  |  |     off_t size;          /* number of bytes allocated to data so far */ | 
					
						
							|  |  |  |     int isClosed; | 
					
						
							|  |  |  | #ifdef CL_DEBUG
 | 
					
						
							|  |  |  |     object_type magic; /* verify that this is a blob */ | 
					
						
							| 
									
										
										
										
											2003-07-29 15:48:06 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | } blob; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  | blob *blobCreate(void); | 
					
						
							|  |  |  | void blobDestroy(blob *b); | 
					
						
							|  |  |  | void blobArrayDestroy(blob *b[], int n); | 
					
						
							|  |  |  | void *blobToMem(blob *b); | 
					
						
							|  |  |  | void blobSetFilename(blob *b, const char *dir, const char *filename); | 
					
						
							|  |  |  | int blobAddData(blob *b, const unsigned char *data, size_t len); | 
					
						
							| 
									
										
										
										
											2004-01-14 10:09:59 +00:00
										 |  |  | unsigned char *blobGetData(const blob *b); | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  | size_t blobGetDataSize(const blob *b); | 
					
						
							|  |  |  | void blobClose(blob *b); | 
					
						
							|  |  |  | int blobcmp(const blob *b1, const blob *b2); | 
					
						
							|  |  |  | int blobGrow(blob *b, size_t len); | 
					
						
							| 
									
										
										
										
											2004-08-22 10:37:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2007-08-27 23:05:16 +00:00
										 |  |  |  * Like a blob, but associated with a file stored in the temporary directory | 
					
						
							| 
									
										
										
										
											2004-08-22 10:37:32 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  | typedef struct fileblob { | 
					
						
							|  |  |  |     FILE *fp; | 
					
						
							|  |  |  |     int fd; | 
					
						
							|  |  |  |     blob b;         /*
 | 
					
						
							| 
									
										
										
										
											2007-08-27 23:05:16 +00:00
										 |  |  | 			 * b.name is the name of the attachment as stored in the | 
					
						
							|  |  |  | 			 * email, not the full path name of the temporary file | 
					
						
							|  |  |  | 			 */ | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  |     char *fullname; /* full pathname of the file */ | 
					
						
							|  |  |  |     cli_ctx *ctx;   /* When set we can scan the blob, otherwise NULL */ | 
					
						
							|  |  |  |     unsigned long bytes_scanned; | 
					
						
							|  |  |  |     unsigned int isNotEmpty : 1; | 
					
						
							|  |  |  |     unsigned int isInfected : 1; | 
					
						
							| 
									
										
										
										
											2004-08-22 10:37:32 +00:00
										 |  |  | } fileblob; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-03 12:40:13 -05:00
										 |  |  | fileblob *fileblobCreate(void); | 
					
						
							|  |  |  | int fileblobScanAndDestroy(fileblob *fb); | 
					
						
							|  |  |  | void fileblobDestructiveDestroy(fileblob *fb); | 
					
						
							|  |  |  | void fileblobDestroy(fileblob *fb); | 
					
						
							|  |  |  | void fileblobSetFilename(fileblob *fb, const char *dir, const char *filename); | 
					
						
							|  |  |  | void fileblobPartialSet(fileblob *fb, const char *fullname, const char *arg); | 
					
						
							|  |  |  | const char *fileblobGetFilename(const fileblob *fb); | 
					
						
							|  |  |  | void fileblobSetCTX(fileblob *fb, cli_ctx *ctx); | 
					
						
							|  |  |  | int fileblobAddData(fileblob *fb, const unsigned char *data, size_t len); | 
					
						
							|  |  |  | int fileblobScan(const fileblob *fb); | 
					
						
							|  |  |  | int fileblobInfected(const fileblob *fb); | 
					
						
							|  |  |  | void sanitiseName(char *name); | 
					
						
							| 
									
										
										
										
											2004-08-22 10:37:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /*_BLOB_H*/
 |