Imported Upstream version 2.3
[ossec-hids.git] / src / shared / agent_op.c
1 /* @(#) $Id: agent_op.c,v 1.8 2009/12/01 20:27:01 dcid Exp $ */
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 3) 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     int i = 0;
78     char buf[1024 + 1];
79     FILE *fp = NULL;
80
81     if(isChroot())
82         fp = fopen(AGENT_INFO_FILE, "r");
83     else
84         fp = fopen(AGENT_INFO_FILEP, "r");
85         
86     /* We give 1 second for the file to be created... */ 
87     if(!fp)
88     {
89         sleep(1);
90
91         if(isChroot())
92             fp = fopen(AGENT_INFO_FILE, "r");
93         else
94             fp = fopen(AGENT_INFO_FILEP, "r");        
95     }
96     
97     if(!fp)
98     {
99         debug1(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
100         return(NULL);
101     }
102
103     buf[1024] = '\0';
104
105
106     /* Getting name */
107     if(fgets(buf, 1024, fp))
108     {
109         char *ret = NULL;
110         os_strdup(buf, ret);
111         fclose(fp);
112         
113         return(ret);
114     }
115
116     fclose(fp);
117     return(NULL);
118 }
119
120
121
122 /** char *os_read_agent_ip()
123  *  Reads the agent ip for the current agent.
124  *  Returns NULL on error.
125  */
126 char *os_read_agent_ip()
127 {
128     char buf[1024 + 1];
129     FILE *fp;
130
131     fp = fopen(AGENT_INFO_FILE, "r");
132     if(!fp)
133     {
134         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
135         return(NULL);
136     }
137
138     buf[1024] = '\0';
139
140
141     /* Getting IP */
142     if(fgets(buf, 1024, fp) && fgets(buf, 1024, fp))
143     {
144         char *ret = NULL;
145         os_strdup(buf, ret);
146         fclose(fp);
147
148         return(ret);
149     }
150
151     fclose(fp);
152     return(NULL);
153 }
154
155
156
157 /** char *os_read_agent_id()
158  *  Reads the agent id for the current agent.
159  *  Returns NULL on error.
160  */
161 char *os_read_agent_id()
162 {
163     char buf[1024 + 1];
164     FILE *fp;
165
166     fp = fopen(AGENT_INFO_FILE, "r");
167     if(!fp)
168     {
169         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
170         return(NULL);
171     }
172
173     buf[1024] = '\0';
174
175
176     /* Getting id */
177     if(fgets(buf, 1024, fp) && fgets(buf, 1024, fp) && fgets(buf, 1024, fp))
178     {
179         char *ret = NULL;
180         os_strdup(buf, ret);
181         fclose(fp);
182
183         return(ret);
184     }
185
186     fclose(fp);
187     return(NULL);
188 }
189
190
191
192 /** int os_write_agent_info(char *agent_name, char *agent_ip, char *agent_id)
193  *  Writes the agent info inside the queue, for the other processes to read.
194  *  Returns 1 on success or <= 0 on failure.
195  */
196 int os_write_agent_info(char *agent_name, char *agent_ip, char *agent_id)
197 {
198     FILE *fp;
199
200     fp = fopen(AGENT_INFO_FILE, "w");
201     if(!fp)
202     {
203         merror(FOPEN_ERROR, __local_name, AGENT_INFO_FILE);
204         return(0);
205     }
206
207     fprintf(fp, "%s\n-\n%s\n", agent_name, agent_id);
208     fclose(fp);
209     return(1);
210 }
211
212
213
214 int os_agent_config_changed()
215 {
216     return(0);
217 }
218
219
220 /* EOF */