source: tags/4.1.0/include/sh_utils.h

Last change on this file was 382, checked in by katerina, 9 years ago

Fix for ticket #280 (Memory leak in inotify related code).

File size: 6.2 KB
Line 
1/* SAMHAIN file system integrity testing                                   */
2/* Copyright (C) 1999 Rainer Wichmann                                      */
3/*                                                                         */
4/*  This program is free software; you can redistribute it                 */
5/*  and/or modify                                                          */
6/*  it under the terms of the GNU General Public License as                */
7/*  published by                                                           */
8/*  the Free Software Foundation; either version 2 of the License, or      */
9/*  (at your option) any later version.                                    */
10/*                                                                         */
11/*  This program is distributed in the hope that it will be useful,        */
12/*  but WITHOUT ANY WARRANTY; without even the implied warranty of         */
13/*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
14/*  GNU General Public License for more details.                           */
15/*                                                                         */
16/*  You should have received a copy of the GNU General Public License      */
17/*  along with this program; if not, write to the Free Software            */
18/*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.              */
19
20
21#ifndef SH_UTILS_H
22#define SH_UTILS_H
23
24#include <stdarg.h>
25
26#include "slib.h"
27
28#include "sh_error.h"
29#include "sh_unix.h"
30
31#define S_FMT_STRING   1
32#define S_FMT_ULONG    2
33#define S_FMT_TIME     3
34#define S_FMT_LONG     4
35
36
37typedef struct ft_struc {
38  char            fchar;
39  int             type;
40  unsigned long   data_ulong;
41  long            data_long;
42  char           *data_str;
43} st_format;
44
45/* returns allocated string
46 */
47char * sh_util_formatted (const char * fmt, st_format * ftab);
48
49typedef struct sh_timeout_struct {
50  UINT64   time_last;
51  UINT64   time_dist;
52  int      flag_ok;
53} SH_TIMEOUT;
54
55int sh_util_timeout_check (SH_TIMEOUT * sh_timer);
56
57/*  This is a maximally equidistributed combined Tausworthe
58 *  generator.
59 */
60UINT32 taus_get            (void); 
61double taus_get_double     (void *vstate);  /* fast */
62int    taus_seed           (void);
63
64/* returns allocated memory
65 */
66char * sh_util_strdup (const char * str) SH_GNUC_MALLOC;
67char * sh_util_strdup_track (const char * str, 
68                             char * file, int line) SH_GNUC_MALLOC;
69
70/* returns allocated memory
71 */
72char * sh_util_strdup_l (const char * str, size_t len) SH_GNUC_MALLOC;
73
74/* returns pointer within str
75 */
76char * sh_util_strsep (char **str, const char *delim);
77
78/* compactify verbose acl text, returns allocated memory
79 */
80char * sh_util_acl_compact (char * buf, ssize_t len);
81
82/* set signature type HASH-TIGER/HMAC-TIGER
83 */
84int sh_util_sigtype (const char * c);
85
86/* compute a signature
87 */
88char * sh_util_siggen (char * hexkey, 
89                       char * text, size_t textlen, 
90                       char * sigbuf, size_t sigbuflen);
91
92/* eval boolean input
93 */
94int sh_util_flagval(const char * c, int * fval);
95
96/* ask if a file should be updated (returns S_TRUE/S_FALSE)
97 */
98int sh_util_ask_update(const char * path);
99int sh_util_set_interactive(const char * str);
100int sh_util_update_file (const char * str);
101
102/* don't log output files
103 */
104int sh_util_hidesetup(const char * c);
105
106/* valif utf-8 string
107 */
108int sh_util_valid_utf8 (const unsigned char * str);
109
110/* filenames are utf8
111 */
112int sh_util_obscure_utf8 (const char * c);
113
114/* exceptions to obscure name check
115 */
116int sh_util_obscure_ok (const char * str);
117
118/* output a hexchar[2]; i2h must be char[2]
119 */
120char * sh_util_charhex( unsigned char c, char * i2h );
121
122/* read a hexchar, return int value (0-15)
123 */
124int sh_util_hexchar( char c ) SH_GNUC_CONST;
125
126/* change verifier
127 */
128int sh_util_set_newkey (const char * str);
129
130/* server mode
131 */
132int sh_util_setserver (const char * dummy);
133
134/* a simple compressor
135 */
136size_t sh_util_compress (char * dest, char * src, size_t dest_size);
137
138/* an even simpler en-/decoder
139 */
140void sh_util_encode (char * data, char * salt, int mode, char fill);
141
142/* copy len ( < 4) bytes from (char *) (long src) to (char *) dest,
143 * determine the four LSB's and use them (independent of sizeof(long))
144 */
145void sh_util_cpylong (char * dest, const char * src, int len );
146
147/* set timer for main loop
148 */
149int sh_util_setlooptime (const char * str);
150
151/* whether init or check the database
152 */
153int  sh_util_setchecksum (const char * str);
154
155/* compare an in_string against a regular expression regex_str
156   return GOOD on successful match
157*/
158int sh_util_regcmp (char * regex_str, char * in_str);
159
160
161/* returns freshly allocated memory, return value should be free'd.
162 * Argument list must be NULL terminated.
163 */
164char * sh_util_strconcat (const char * arg1, ...) SH_GNUC_MALLOC SH_GNUC_SENTINEL;
165
166/* check if string is numeric only
167 */
168int sh_util_isnum (const char *str) SH_GNUC_PURE;
169
170/* init a key w/random string
171 */
172int sh_util_keyinit (char * buf, long size);
173
174
175/* returns freshly allocated memory, return value should be free'd
176 */
177char * sh_util_dirname(const char * fullpath);
178
179/* returns freshly allocated memory, return value should be free'd
180 */
181char * sh_util_safe_name (const char * name) SH_GNUC_MALLOC SH_GNUC_PURE;
182
183char * sh_util_safe_name_keepspace (const char * name) SH_GNUC_MALLOC SH_GNUC_PURE;
184
185/* check max size of printf result string
186 */
187int sh_util_printf_maxlength (const char * fmt, va_list  vl);
188
189/* check for obscure filenames
190 */
191int sh_util_obscurename (ShErrLevel level, const char * name, int flag);
192
193/* returns freshly allocated memory, return value should be free'd
194 */
195char * sh_util_basename(const char * fullpath);
196
197/* required size (including terminating NULL) for string of strlen l
198 */
199#define SH_B64_SIZ(l)  (1 + ((((l) + 2) / 3) * 4))
200
201/* return len of encoded string
202 */
203size_t sh_util_base64_enc (unsigned char * out, const unsigned char * instr, 
204                           size_t lin);
205
206/* return allocated encoded string in out, return its len
207 */
208size_t sh_util_base64_enc_alloc (char **out, const char *in, size_t inlen);
209
210/* return len of decoded string
211 */ 
212size_t sh_util_base64_dec (unsigned char *out, const unsigned char *in, size_t lin);
213
214/* return allocated decoded string in out, return its len
215 */ 
216size_t sh_util_base64_dec_alloc (unsigned char **out, const unsigned char *in, size_t lin);
217
218#endif
Note: See TracBrowser for help on using the repository browser.