@@ -47,22 +47,29 @@ void ramd_config_set_defaults(ramd_config_t* config)
4747
4848 strncpy (config -> postgresql_bin_dir , pgbin ? pgbin : RAMD_DEFAULT_PG_BIN_DIR ,
4949 sizeof (config -> postgresql_bin_dir ) - 1 );
50+ config -> postgresql_bin_dir [sizeof (config -> postgresql_bin_dir ) - 1 ] = '\0' ;
5051 strncpy (config -> postgresql_data_dir ,
5152 pgdata ? pgdata : RAMD_DEFAULT_PG_DATA_DIR ,
5253 sizeof (config -> postgresql_data_dir ) - 1 );
54+ config -> postgresql_data_dir [sizeof (config -> postgresql_data_dir ) - 1 ] = '\0' ;
5355 strncpy (config -> postgresql_log_dir , pglog ? pglog : RAMD_DEFAULT_PG_LOG_DIR ,
5456 sizeof (config -> postgresql_log_dir ) - 1 );
57+ config -> postgresql_log_dir [sizeof (config -> postgresql_log_dir ) - 1 ] = '\0' ;
5558
5659 pgdb = getenv ("PGDATABASE" );
5760 pguser = getenv ("PGUSER" );
5861 strncpy (config -> database_name , pgdb ? pgdb : RAMD_DEFAULT_PG_DATABASE ,
5962 sizeof (config -> database_name ) - 1 );
63+ config -> database_name [sizeof (config -> database_name ) - 1 ] = '\0' ;
6064 strncpy (config -> database_user , pguser ? pguser : RAMD_DEFAULT_PG_USER ,
6165 sizeof (config -> database_user ) - 1 );
66+ config -> database_user [sizeof (config -> database_user ) - 1 ] = '\0' ;
6267 strncpy (config -> postgresql_user , pguser ? pguser : RAMD_DEFAULT_PG_USER ,
6368 sizeof (config -> postgresql_user ) - 1 );
69+ config -> postgresql_user [sizeof (config -> postgresql_user ) - 1 ] = '\0' ;
6470 strncpy (config -> cluster_name , RAMD_DEFAULT_CLUSTER_NAME ,
6571 sizeof (config -> cluster_name ) - 1 );
72+ config -> cluster_name [sizeof (config -> cluster_name ) - 1 ] = '\0' ;
6673
6774 config -> cluster_size = RAMD_DEFAULT_CLUSTER_SIZE ;
6875 config -> auto_failover_enabled = true;
@@ -93,6 +100,7 @@ void ramd_config_set_defaults(ramd_config_t* config)
93100
94101 strncpy (config -> http_bind_address , RAMD_DEFAULT_HTTP_BIND_ADDRESS ,
95102 sizeof (config -> http_bind_address ) - 1 );
103+ config -> http_bind_address [sizeof (config -> http_bind_address ) - 1 ] = '\0' ;
96104}
97105
98106bool ramd_config_load_file (ramd_config_t * config , const char * config_file )
@@ -203,33 +211,57 @@ bool ramd_config_parse_key_value(ramd_config_t* config, const char* key,
203211 if (strcmp (key , "node_id" ) == 0 )
204212 config -> node_id = atoi (value );
205213 else if (strcmp (key , "hostname" ) == 0 )
214+ {
206215 strncpy (config -> hostname , value , sizeof (config -> hostname ) - 1 );
216+ config -> hostname [sizeof (config -> hostname ) - 1 ] = '\0' ;
217+ }
207218 else if (strcmp (key , "postgresql_port" ) == 0 )
208219 config -> postgresql_port = atoi (value );
209220 else if (strcmp (key , "rale_port" ) == 0 )
210221 config -> rale_port = atoi (value );
211222 else if (strcmp (key , "dstore_port" ) == 0 )
212223 config -> dstore_port = atoi (value );
213224 else if (strcmp (key , "postgresql_bin_dir" ) == 0 )
225+ {
214226 strncpy (config -> postgresql_bin_dir , value ,
215227 sizeof (config -> postgresql_bin_dir ) - 1 );
228+ config -> postgresql_bin_dir [sizeof (config -> postgresql_bin_dir ) - 1 ] = '\0' ;
229+ }
216230 else if (strcmp (key , "postgresql_data_dir" ) == 0 )
231+ {
217232 strncpy (config -> postgresql_data_dir , value ,
218233 sizeof (config -> postgresql_data_dir ) - 1 );
234+ config -> postgresql_data_dir [sizeof (config -> postgresql_data_dir ) - 1 ] = '\0' ;
235+ }
219236 else if (strcmp (key , "database_name" ) == 0 )
237+ {
220238 strncpy (config -> database_name , value ,
221239 sizeof (config -> database_name ) - 1 );
240+ config -> database_name [sizeof (config -> database_name ) - 1 ] = '\0' ;
241+ }
222242 else if (strcmp (key , "database_user" ) == 0 )
243+ {
223244 strncpy (config -> database_user , value ,
224245 sizeof (config -> database_user ) - 1 );
246+ config -> database_user [sizeof (config -> database_user ) - 1 ] = '\0' ;
247+ }
225248 else if (strcmp (key , "postgresql_user" ) == 0 )
249+ {
226250 strncpy (config -> postgresql_user , value ,
227251 sizeof (config -> postgresql_user ) - 1 );
252+ config -> postgresql_user [sizeof (config -> postgresql_user ) - 1 ] = '\0' ;
253+ }
228254 else if (strcmp (key , "database_password" ) == 0 )
255+ {
229256 strncpy (config -> database_password , value ,
230257 sizeof (config -> database_password ) - 1 );
258+ config -> database_password [sizeof (config -> database_password ) - 1 ] = '\0' ;
259+ }
231260 else if (strcmp (key , "cluster_name" ) == 0 )
261+ {
232262 strncpy (config -> cluster_name , value , sizeof (config -> cluster_name ) - 1 );
263+ config -> cluster_name [sizeof (config -> cluster_name ) - 1 ] = '\0' ;
264+ }
233265 else if (strcmp (key , "cluster_size" ) == 0 )
234266 config -> cluster_size = atoi (value );
235267 else if (strcmp (key , "auto_failover_enabled" ) == 0 )
@@ -245,7 +277,10 @@ bool ramd_config_parse_key_value(ramd_config_t* config, const char* key,
245277 else if (strcmp (key , "failover_timeout_ms" ) == 0 )
246278 config -> failover_timeout_ms = atoi (value );
247279 else if (strcmp (key , "log_file" ) == 0 )
280+ {
248281 strncpy (config -> log_file , value , sizeof (config -> log_file ) - 1 );
282+ config -> log_file [sizeof (config -> log_file ) - 1 ] = '\0' ;
283+ }
249284 else if (strcmp (key , "log_level" ) == 0 )
250285 config -> log_level = ramd_logging_string_to_level (value );
251286 else if (strcmp (key , "log_to_syslog" ) == 0 )
@@ -258,19 +293,28 @@ bool ramd_config_parse_key_value(ramd_config_t* config, const char* key,
258293 config -> http_api_enabled =
259294 (strcmp (value , "true" ) == 0 || strcmp (value , "1" ) == 0 );
260295 else if (strcmp (key , "http_bind_address" ) == 0 )
296+ {
261297 strncpy (config -> http_bind_address , value ,
262298 sizeof (config -> http_bind_address ) - 1 );
299+ config -> http_bind_address [sizeof (config -> http_bind_address ) - 1 ] = '\0' ;
300+ }
263301 else if (strcmp (key , "http_port" ) == 0 )
264302 config -> http_port = atoi (value );
265303 else if (strcmp (key , "http_auth_enabled" ) == 0 )
266304 config -> http_auth_enabled =
267305 (strcmp (value , "true" ) == 0 || strcmp (value , "1" ) == 0 );
268306 else if (strcmp (key , "http_auth_token" ) == 0 )
307+ {
269308 strncpy (config -> http_auth_token , value ,
270309 sizeof (config -> http_auth_token ) - 1 );
310+ config -> http_auth_token [sizeof (config -> http_auth_token ) - 1 ] = '\0' ;
311+ }
271312 else if (strcmp (key , "sync_standby_names" ) == 0 )
313+ {
272314 strncpy (config -> sync_standby_names , value ,
273315 sizeof (config -> sync_standby_names ) - 1 );
316+ config -> sync_standby_names [sizeof (config -> sync_standby_names ) - 1 ] = '\0' ;
317+ }
274318 else if (strcmp (key , "num_sync_standbys" ) == 0 )
275319 config -> num_sync_standbys = atoi (value );
276320 else if (strcmp (key , "sync_timeout_ms" ) == 0 )
@@ -287,7 +331,10 @@ bool ramd_config_parse_key_value(ramd_config_t* config, const char* key,
287331 config -> maintenance_backup_before =
288332 (strcmp (value , "true" ) == 0 || strcmp (value , "1" ) == 0 );
289333 else if (strcmp (key , "pid_file" ) == 0 )
334+ {
290335 strncpy (config -> pid_file , value , sizeof (config -> pid_file ) - 1 );
336+ config -> pid_file [sizeof (config -> pid_file ) - 1 ] = '\0' ;
337+ }
291338 else if (strcmp (key , "daemonize" ) == 0 )
292339 config -> daemonize =
293340 (strcmp (value , "true" ) == 0 || strcmp (value , "1" ) == 0 );
@@ -419,6 +466,7 @@ void ramd_config_load_from_environment(ramd_config_t* config)
419466 {
420467 strncpy (config -> cluster_name , env_value ,
421468 sizeof (config -> cluster_name ) - 1 );
469+ config -> cluster_name [sizeof (config -> cluster_name ) - 1 ] = '\0' ;
422470 ramd_log_debug ("Set cluster_name from environment: %s" ,
423471 config -> cluster_name );
424472 }
@@ -434,6 +482,7 @@ void ramd_config_load_from_environment(ramd_config_t* config)
434482 {
435483 strncpy (config -> postgresql_data_dir , env_value ,
436484 sizeof (config -> postgresql_data_dir ) - 1 );
485+ config -> postgresql_data_dir [sizeof (config -> postgresql_data_dir ) - 1 ] = '\0' ;
437486 ramd_log_debug ("Set postgresql_data_dir from environment: %s" ,
438487 config -> postgresql_data_dir );
439488 }
0 commit comments