--- freem/src/fmadm.c 2025/04/25 20:08:19 1.41 +++ freem/src/fmadm.c 2026/03/24 00:25:36 1.43 @@ -1,5 +1,5 @@ /* - * $Id: fmadm.c,v 1.41 2025/04/25 20:08:19 snw Exp $ + * $Id: fmadm.c,v 1.43 2026/03/24 00:25:36 snw Exp $ * FreeM Administration Tool * * @@ -24,6 +24,12 @@ * along with FreeM. If not, see . * * $Log: fmadm.c,v $ + * Revision 1.43 2026/03/24 00:25:36 snw + * Fix segfault when running \'fmadm status\' without a second argument + * + * Revision 1.42 2025/05/13 20:03:53 snw + * Error-check fopen in fm_daemonctl + * * Revision 1.41 2025/04/25 20:08:19 snw * Work on improving routine importer * @@ -430,10 +436,21 @@ int main (int argc, char **argv) obj = OBJ_DAEMON; goto process_args; } - else if (strcmp (argv[1], "status") == 0 && strcmp (argv[2], "environment") == 0) { - act = ACT_STATUS; - obj = OBJ_DAEMON; - goto process_args; + else if (strcmp (argv[1], "status") == 0) { + if (argc < 3) { + fprintf (stderr, "fmadm: did you mean 'fmadm status environment'?\r\n"); + exit (1); + } + + if (strcmp (argv[2], "environment") == 0) { + act = ACT_STATUS; + obj = OBJ_DAEMON; + goto process_args; + } + else { + fmadm_usage (); + exit (1); + } } } @@ -1370,8 +1387,10 @@ int fm_daemonctl (short action, short ob envlist = (char *) malloc (sizeof (char) * BIGSTR); NULLPTRCHK(envlist,"fm_daemonctl"); - ef = fopen (env_config_file, "r"); - + if ((ef = fopen (env_config_file, "r")) == NULL) { + logprintf (FM_LOG_FATAL, "fm_daemonctl: failed to open %s (error code %d [%s])", env_config_file, errno, strerror (errno)); + } + while (fgets (line, 254, ef)) { if (line[0] == '[') { strncpy (env, &(line[1]), 255); @@ -1547,7 +1566,7 @@ void fm_configure (void) char sysgbl[4096]; char usrrtn[4096]; char usrgbl[4096]; - + char jnldir[4096]; char jnlfile[4096]; char jnlmode[4];