--- freem/src/mumps.c 2025/04/04 19:43:18 1.16
+++ freem/src/mumps.c 2025/04/15 02:24:43 1.21
@@ -1,5 +1,5 @@
/*
- * $Id: mumps.c,v 1.16 2025/04/04 19:43:18 snw Exp $
+ * $Id: mumps.c,v 1.21 2025/04/15 02:24:43 snw Exp $
* main module of freem
*
*
@@ -24,6 +24,21 @@
* along with FreeM. If not, see .
*
* $Log: mumps.c,v $
+ * Revision 1.21 2025/04/15 02:24:43 snw
+ * Improve FreeM logging capabilities
+ *
+ * Revision 1.20 2025/04/13 04:22:43 snw
+ * Fix snprintf calls
+ *
+ * Revision 1.19 2025/04/10 01:24:38 snw
+ * Remove C++ style comments
+ *
+ * Revision 1.18 2025/04/09 19:52:02 snw
+ * Eliminate as many warnings as possible while building with -Wall
+ *
+ * Revision 1.17 2025/04/04 21:28:16 snw
+ * Remove custom_user and custom_group vars from freem and shed privileges per environment catalog settings
+ *
* Revision 1.16 2025/04/04 19:43:18 snw
* Switch to using environment catalog to determine user and group for environment, and remove -u and -g flags from freem
*
@@ -97,7 +112,7 @@
#include
#include
#include
-
+#include "log.h"
#if defined(HAVE_GETOPT_H)
# include
@@ -141,9 +156,6 @@ int main (int argc, char **argv, char **
gid_t d_gid;
uid_t d_uid;
- short custom_user = FALSE;
- short custom_group = FALSE;
-
#if defined(HAVE_GETOPT_LONG)
struct option long_options[] = {
{"help", no_argument, 0, 'h'},
@@ -172,10 +184,7 @@ int main (int argc, char **argv, char **
char *symname = (char *) calloc(STRLEN, sizeof(char));
char *symval = (char *) calloc(STRLEN, sizeof(char));
-
- int namelen;
- int vallen;
-
+
char cli_rtn_path[PATH_MAX] = {0};
char *cli_rtn_file;
char cli_rtn_name[256];
@@ -234,7 +243,7 @@ int main (int argc, char **argv, char **
break;
case 'e': /* specify FreeM environment */
- strncpy (shm_env, optarg, 255);
+ strncpy (shm_env, optarg, sizeof (shm_env) - 1);
break;
case 'R':
@@ -359,7 +368,7 @@ int main (int argc, char **argv, char **
break;
case 'e': /* specify FreeM environment */
- strncpy (shm_env, optarg, 255);
+ strncpy (shm_env, optarg, sizeof (shm_env) - 1);
break;
case 'R':
@@ -456,8 +465,8 @@ int main (int argc, char **argv, char **
}
#endif
- snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);
- snprintf (env_config_file, 4096, "%s/freem/env.conf", SYSCONFDIR);
+ snprintf (config_file, sizeof (config_file) - 1, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);
+ snprintf (env_config_file, sizeof (config_file) - 1, "%s/freem/env.conf", SYSCONFDIR);
if (!file_exists (env_config_file)) {
fprintf (stderr, "freem: environment catalog does not exist; may need to run fmadm configure\n");
@@ -508,8 +517,7 @@ int main (int argc, char **argv, char **
if (run_daemon == FALSE && group_member (d_gid) == 0) {
fprintf (stderr, "freem: you must be a member of the %s group to use environment %s\n", d_groupname, shm_env);
exit (1);
- }
-
+ }
#endif
if (run_daemon == TRUE) {
@@ -574,19 +582,19 @@ int main (int argc, char **argv, char **
if (geteuid () == 0) {
/* shed privileges */
- if (custom_group) {
- fprintf (stderr, "freem: switching to group %s\n", d_groupname);
- m_log (1, "switching groups");
-
- if (setgid (d_gid) == -1) {
- fprintf (stderr, "freem: failure switching GID\n");
- m_log (1, "failure switching GIDs");
- exit (1);
- }
+
+ fprintf (stderr, "freem: switching to group %s\n", d_groupname);
+ m_log (1, "switching groups");
+
+ if (setgid (d_gid) == -1) {
+ fprintf (stderr, "freem: failure switching GID\n");
+ m_log (1, "failure switching GIDs");
+ exit (1);
}
+
- if (custom_user) {
+ if (d_uid != geteuid ()) {
fprintf (stderr, "freem: switching to username %s\n", d_username);
m_log (1, "switching users");
@@ -668,7 +676,7 @@ int main (int argc, char **argv, char **
skip_init = 1;
/* initialize FreeM environment */
- strncpy (nsnbuf, nsname, 255);
+ strncpy (nsnbuf, nsname, sizeof (nsnbuf));
if (init (nsnbuf) == FALSE) {
if (fm_initialized) set_io (UNIX);
@@ -723,20 +731,20 @@ int main (int argc, char **argv, char **
}
/* make this the startup routine */
- snprintf (startuprou, 256, "^%s\201", cli_rtn_name);
+ snprintf (startuprou, sizeof (startuprou) - 1, "^%s\201", cli_rtn_name);
/* re-work the namespace config to search for the
routine in the discovered path */
if (cli_rtn_name[0] == '%') {
- snprintf (rou0plib, 256, "%s\201", cli_rtn_path);
- snprintf (rou1plib, 256, "%s\201", cli_rtn_path);
+ snprintf (rou0plib, sizeof (rou0plib) - 1, "%s\201", cli_rtn_path);
+ snprintf (rou1plib, sizeof (rou1plib) - 1, "%s\201", cli_rtn_path);
}
else {
- snprintf (rou0path, 256, "%s\201", cli_rtn_path);
- snprintf (rou1path, 256, "%s\201", cli_rtn_path);
+ snprintf (rou0path, sizeof (rou0path) - 1, "%s\201", cli_rtn_path);
+ snprintf (rou1path, sizeof (rou1path) - 1, "%s\201", cli_rtn_path);
}
@@ -755,7 +763,7 @@ int main (int argc, char **argv, char **
if (!skip_init) {
/* initialize FreeM environment */
- strncpy (nsnbuf, nsname, 255);
+ strncpy (nsnbuf, nsname, sizeof (nsnbuf));
if (init (nsnbuf) == FALSE) {
set_io (UNIX);
fprintf (stderr, "\nError initializing FreeM.\n");
@@ -864,24 +872,16 @@ int main (int argc, char **argv, char **
#if !defined(_AIX)
- if(import_env == TRUE) {
-
+ if (import_env == TRUE) {
int i_maxlen = 255;
- for(env = envp; *env != 0; env++) {
-
- namelen = 0;
- vallen = 0;
-
- varname = strtok(*env, "=");
- varval = strtok(NULL, "=");
-
- if(varval != NULL) {
- namelen = strlen (varname);
- vallen = strlen (varval);
+ for (env = envp; *env != 0; env++) {
+ varname = strtok (*env, "=");
+ varval = strtok (NULL, "=");
+ if (varval != NULL) {
snprintf (symname, i_maxlen, "ENV.%s\201\201", varname);
- strncpy (symval, varval, i_maxlen);
+ strncpy (symval, varval, i_maxlen - 1);
stcnv_c2m (symval);
@@ -900,10 +900,10 @@ int main (int argc, char **argv, char **
stcpy (verstr, FREEM_VERSION_STR);
stcnv_m2c (verstr);
- snprintf (version, 255, "\r\nCoherent Logic Development FreeM version %s [DIALECT: %s%s]\r\n\201", verstr, m_dialect, (restricted_mode == TRUE ? "/RESTRICTED" : ""));
+ snprintf (version, sizeof (version) - 1, "\r\nCoherent Logic Development FreeM version %s [DIALECT: %s%s]\r\n\201", verstr, m_dialect, (restricted_mode == TRUE ? "/RESTRICTED" : ""));
write_m (version);
- snprintf (version, 255, "Copyright (C) 2014, 2020, 2021, 2023, 2025 Coherent Logic Development LLC\r\n\r\n\201");
+ snprintf (version, sizeof (version) - 1, "Copyright (C) 2014, 2020, 2021, 2023, 2025 Coherent Logic Development LLC\r\n\r\n\201");
write_m (version);
/*
@@ -920,7 +920,7 @@ int main (int argc, char **argv, char **
if (dx_mode) {
char k_buf[512];
- snprintf (k_buf, 512 - 1, "%%TMPINITMCODE\201\201");
+ snprintf (k_buf, sizeof (k_buf) - 1, "%%TMPINITMCODE\201\201");
symtab (set_sym, k_buf, dx_mcode);
const_define (k_buf, dx_mcode);
}
@@ -928,7 +928,7 @@ int main (int argc, char **argv, char **
if (routine_mode) {
char k_buf[512];
- snprintf (k_buf, 512 - 1, "%%TMPINITROUTINE\201\201");
+ snprintf (k_buf, sizeof (k_buf) - 1, "%%TMPINITROUTINE\201\201");
symtab (set_sym, k_buf, startup_routine);
const_define (k_buf, startup_routine);
}