Imported Upstream version 2.5.1
[ossec-hids.git] / src / shared / agent_op.c
1 /* @(#) $Id$ */
2
3 /* Copyright (C) 2009 Trend Micro Inc.
4  * All rights reserved.
5  *
6  * This program is a free software; you can redistribute it
7  * and/or modify it under the terms of the GNU General Public
8  * License (version 2) as published by the FSF - Free Software
9  * Foundation
10  */
11
12
13 #include "shared.h"
14
15
16
17 /** Checks if syscheck is to be executed/restarted.
18  *  Returns 1 on success or 0 on failure (shouldn't be executed now).
19  */
20 int os_check_restart_syscheck() 
21 {
22     struct stat restart_status;
23
24     /* If the restart is not present, return 0.
25      */
26
27     if(isChroot())
28     {
29         if(stat(SYSCHECK_RESTART, &restart_status) == -1)
30             return(0);
31         
32         unlink(SYSCHECK_RESTART);    
33     }
34     else
35     {
36         if(stat(SYSCHECK_RESTART_PATH, &restart_status) == -1)
37             return(0);
38         
39         unlink(SYSCHECK_RESTART_PATH);    
40     }
41     
42
43     return(1);    
44 }
45
46
47
48 /** Sets syscheck to be restarted.
49  *  Returns 1 on success or 0 on failure.
50  */
51 int os_set_restart_syscheck()
52 {
53     FILE *fp;
54
55     fp = fopen(SYSCHECK_RESTART, "w");
56     if(!fp)
57     {
58         merror(FOPEN_ERROR, __local_name, SYSCHECK_RESTART);
59         return(0);
60     }
61
62     fprintf(fp, "%s\n", SYSCHECK_RESTART);
63     fclose(fp);
64
65
66     return(1);
67 }
68
69
70
71 /** char *os_read_agent_name()
72  *  Reads the agent name for the current agent.
73  *  Returns NULL on error.
74  */
75 char* os_read_agent_name()
76 {
77     char buf[1024 + 1];
78     FILE *fp = NULL;
79
80     if(isChroot())
81         fp = fopen(AGENT_INFO_FILE, "r");
82     else
83         fp = fopen(AGENT_INFO_FILEP, "r");
84         
85     /* We give 1 second for the file to be created... */ 
86     if(!fp)
87     {
88         sleep(1);
89
90         if(isChroot())
91             fp = fopen(AGENT_INFO_FILE, "r");
92         else
93             fp = fopen(AGENT_INFO_FILEP, "r");        
94     }
95     
96     if(!fp)
97     {
98         debug1(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
99         return(NULL);
100     }
101
102     buf[1024] = '\0';
103
104
105     /* Getting name */
106     if(fgets(buf, 1024, fp))
107     {
108         char *ret = NULL;
109         os_strdup(buf, ret);
110         fclose(fp);
111         
112         return(ret);
113     }
114
115     fclose(fp);
116     return(NULL);
117 }
118
119
120
121 /** char *os_read_agent_ip()
122  *  Reads the agent ip for the current agent.
123  *  Returns NULL on error.
124  */
125 char *os_read_agent_ip()
126 {
127     char buf[1024 + 1];
128     FILE *fp;
129
130     fp = fopen(AGENT_INFO_FILE, "r");
131     if(!fp)
132     {
133         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
134         return(NULL);
135     }
136
137     buf[1024] = '\0';
138
139
140     /* Getting IP */
141     if(fgets(buf, 1024, fp) && fgets(buf, 1024, fp))
142     {
143         char *ret = NULL;
144         os_strdup(buf, ret);
145         fclose(fp);
146
147         return(ret);
148     }
149
150     fclose(fp);
151     return(NULL);
152 }
153
154
155
156 /** char *os_read_agent_id()
157  *  Reads the agent id for the current agent.
158  *  Returns NULL on error.
159  */
160 char *os_read_agent_id()
161 {
162     char buf[1024 + 1];
163     FILE *fp;
164
165     fp = fopen(AGENT_INFO_FILE, "r");
166     if(!fp)
167     {
168         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
169         return(NULL);
170     }
171
172     buf[1024] = '\0';
173
174
175     /* Getting id */
176     if(fgets(buf, 1024, fp) && fgets(buf, 1024, fp) && fgets(buf, 1024, fp))
177     {
178         char *ret = NULL;
179         os_strdup(buf, ret);
180         fclose(fp);
181
182         return(ret);
183     }
184
185     fclose(fp);
186     return(NULL);
187 }
188
189
190
191 /** int os_write_agent_info(char *agent_name, char *agent_ip, char *agent_id)
192  *  Writes the agent info inside the queue, for the other processes to read.
193  *  Returns 1 on success or <= 0 on failure.
194  */
195 int os_write_agent_info(char *agent_name, char *agent_ip, char *agent_id)
196 {
197     FILE *fp;
198
199     fp = fopen(AGENT_INFO_FILE, "w");
200     if(!fp)
201     {
202         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
203         return(0);
204     }
205
206     fprintf(fp, "%s\n-\n%s\n", agent_name, agent_id);
207     fclose(fp);
208     return(1);
209 }
210
211
212
213 int os_agent_config_changed()
214 {
215     return(0);
216 }
217
218
219 /* EOF */