xref: /illumos-gate/usr/src/cmd/vscan/vscand/vs_incl.h (revision 2a8bcb4e)
1911106dfSjm199354 /*
2911106dfSjm199354  * CDDL HEADER START
3911106dfSjm199354  *
4911106dfSjm199354  * The contents of this file are subject to the terms of the
5911106dfSjm199354  * Common Development and Distribution License (the "License").
6911106dfSjm199354  * You may not use this file except in compliance with the License.
7911106dfSjm199354  *
8911106dfSjm199354  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9911106dfSjm199354  * or http://www.opensolaris.org/os/licensing.
10911106dfSjm199354  * See the License for the specific language governing permissions
11911106dfSjm199354  * and limitations under the License.
12911106dfSjm199354  *
13911106dfSjm199354  * When distributing Covered Code, include this CDDL HEADER in each
14911106dfSjm199354  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15911106dfSjm199354  * If applicable, add the following below this CDDL HEADER, with the
16911106dfSjm199354  * fields enclosed by brackets "[]" replaced with your own identifying
17911106dfSjm199354  * information: Portions Copyright [yyyy] [name of copyright owner]
18911106dfSjm199354  *
19911106dfSjm199354  * CDDL HEADER END
20911106dfSjm199354  */
21911106dfSjm199354 /*
2253c11029Sjm199354  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23911106dfSjm199354  * Use is subject to license terms.
24911106dfSjm199354  */
25911106dfSjm199354 
26911106dfSjm199354 /*
27911106dfSjm199354  * Includes private to the vscan daemon.
28911106dfSjm199354  * vs_icap.c also has its own private include file: vs_icap.h
29911106dfSjm199354  */
30911106dfSjm199354 
31911106dfSjm199354 #ifndef _VS_INCL_H
32911106dfSjm199354 #define	_VS_INCL_H
33911106dfSjm199354 
34911106dfSjm199354 #ifdef __cplusplus
35911106dfSjm199354 extern "C" {
36911106dfSjm199354 #endif
37911106dfSjm199354 
38911106dfSjm199354 #include <stdio.h>
39911106dfSjm199354 #include <sys/types.h>
40911106dfSjm199354 #include <netdb.h>
41911106dfSjm199354 #include <sys/vscan.h>
42911106dfSjm199354 #include <libvscan.h>
43911106dfSjm199354 
4453c11029Sjm199354 /* vscan result code - "vsr_rc" field of vs_result_t */
45911106dfSjm199354 #define	VS_RESULT_SE_ERROR    	-2 /* scan engine i/f error */
46911106dfSjm199354 #define	VS_RESULT_ERROR    	-1
47911106dfSjm199354 #define	VS_RESULT_UNDEFINED	0
48911106dfSjm199354 #define	VS_RESULT_CLEAN		1 /* clean (no infection found) */
49911106dfSjm199354 #define	VS_RESULT_CLEANED	2 /* infections found and cleaned */
50911106dfSjm199354 #define	VS_RESULT_FORBIDDEN	3 /* infected and NOT cleaned */
51911106dfSjm199354 
52911106dfSjm199354 /* "Resolution" field of violation_rec */
53911106dfSjm199354 #define	VS_RES_FILE_NOT_REPAIRED	0
54911106dfSjm199354 #define	VS_RES_FILE_REPAIRED		1
55911106dfSjm199354 #define	VS_RES_POLICY_VIOLATION		2
56911106dfSjm199354 
57911106dfSjm199354 #define	VS_MAX_VIOLATIONS		10
58911106dfSjm199354 #define	VS_DESCRIPTION_MAX		64
59911106dfSjm199354 
60911106dfSjm199354 /* number of retries on failure to communicate with a scan engine */
61911106dfSjm199354 #define	VS_MAX_RETRY			1
62911106dfSjm199354 #define	VS_ENG_WAIT_DFLT		30 /* seconds */
63911106dfSjm199354 
64911106dfSjm199354 /* flags */
65911106dfSjm199354 #define	VS_NO_REPAIR	0x01
66911106dfSjm199354 
67911106dfSjm199354 
68911106dfSjm199354 /* vscan daemon state */
69911106dfSjm199354 typedef enum {
70911106dfSjm199354 	VS_STATE_INIT, VS_STATE_RUNNING, VS_STATE_SHUTDOWN
71911106dfSjm199354 } vs_daemon_state_t;
72911106dfSjm199354 
73911106dfSjm199354 
74911106dfSjm199354 /* violation record - populated as part of result returned from vs_icap.c */
75911106dfSjm199354 typedef struct vs_vrec {
76911106dfSjm199354 	int vr_id;
77911106dfSjm199354 	int vr_res;
78911106dfSjm199354 	char vr_desc[VS_DESCRIPTION_MAX];
79911106dfSjm199354 } vs_vrec_t;
80911106dfSjm199354 
81911106dfSjm199354 
82911106dfSjm199354 /* scan result - populate by vs_icap.c */
83911106dfSjm199354 typedef struct vs_result {
84911106dfSjm199354 	int vsr_rc;
85911106dfSjm199354 	vs_scanstamp_t vsr_scanstamp;
86911106dfSjm199354 	int vsr_nviolations;
87911106dfSjm199354 	vs_vrec_t vsr_vrec[VS_MAX_VIOLATIONS];
88911106dfSjm199354 } vs_result_t;
89911106dfSjm199354 
90911106dfSjm199354 
91*bfc848c6Sjm199354 /* scan engine connection context */
92*bfc848c6Sjm199354 typedef struct vs_eng_ctx {
93*bfc848c6Sjm199354 	int vse_eidx;	/* engine index */
94*bfc848c6Sjm199354 	int vse_cidx;	/* connection index */
95*bfc848c6Sjm199354 	char vse_engid[VS_SE_NAME_LEN];
96*bfc848c6Sjm199354 	char vse_host[MAXHOSTNAMELEN];
97*bfc848c6Sjm199354 	int vse_port;
98*bfc848c6Sjm199354 	int vse_sockfd;
99*bfc848c6Sjm199354 } vs_eng_ctx_t;
100911106dfSjm199354 
101911106dfSjm199354 
102911106dfSjm199354 /* Function Prototypes */
103911106dfSjm199354 vs_daemon_state_t vscand_get_state(void);
104911106dfSjm199354 char *vscand_viruslog(void);
105*bfc848c6Sjm199354 int vscand_kernel_result(vs_scan_rsp_t *);
106911106dfSjm199354 
107911106dfSjm199354 int vs_door_init(void);
108911106dfSjm199354 void vs_door_fini(void);
109911106dfSjm199354 
110*bfc848c6Sjm199354 int vs_svc_init(uint32_t);
111911106dfSjm199354 void vs_svc_fini(void);
112*bfc848c6Sjm199354 int vs_svc_queue_scan_req(vs_scan_req_t *);
113*bfc848c6Sjm199354 void vs_svc_terminate(void);
114911106dfSjm199354 
115911106dfSjm199354 void vs_eng_init(void);
116911106dfSjm199354 void vs_eng_fini(void);
117911106dfSjm199354 void vs_eng_config(vs_props_all_t *);
118*bfc848c6Sjm199354 void vs_eng_set_error(vs_eng_ctx_t *, int);
119*bfc848c6Sjm199354 int vs_eng_get(vs_eng_ctx_t *, boolean_t);
120*bfc848c6Sjm199354 void vs_eng_release(const vs_eng_ctx_t *);
121*bfc848c6Sjm199354 void vs_eng_close_connections(void);
122911106dfSjm199354 int vs_eng_scanstamp_current(vs_scanstamp_t);
123911106dfSjm199354 
124911106dfSjm199354 void vs_icap_init(void);
125911106dfSjm199354 void vs_icap_fini(void);
126911106dfSjm199354 void vs_icap_config(int, char *, int);
127*bfc848c6Sjm199354 int vs_icap_scan_file(vs_eng_ctx_t *, char *, char *, uint64_t,
128911106dfSjm199354     int, vs_result_t *);
129911106dfSjm199354 void vs_icap_print_options(int);
130911106dfSjm199354 int vs_icap_compare_scanstamp(int, vs_scanstamp_t);
131911106dfSjm199354 
132911106dfSjm199354 int vs_stats_init();
133911106dfSjm199354 void vs_stats_fini();
134911106dfSjm199354 void vs_stats_set(int);
135911106dfSjm199354 void vs_stats_eng_err(char *);
136911106dfSjm199354 void vs_stats_config(vs_props_all_t *);
137911106dfSjm199354 
138911106dfSjm199354 #ifdef __cplusplus
139911106dfSjm199354 }
140911106dfSjm199354 #endif
141911106dfSjm199354 
142911106dfSjm199354 #endif /* _VS_INCL_H */
143