Diff for /freem/src/mumps.c between versions 1.16 and 1.21

version 1.16, 2025/04/04 19:43:18 version 1.21, 2025/04/15 02:24:43
Line 24 Line 24
  *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.   *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
  *   *
  *   $Log$   *   $Log$
    *   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   *   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   *   Switch to using environment catalog to determine user and group for environment, and remove -u and -g flags from freem
  *   *
Line 97 Line 112
 #include <errno.h>  #include <errno.h>
 #include <pwd.h>  #include <pwd.h>
 #include <grp.h>  #include <grp.h>
   #include "log.h"
   
 #if defined(HAVE_GETOPT_H)  #if defined(HAVE_GETOPT_H)
 # include <getopt.h>  # include <getopt.h>
Line 141  int main (int argc, char **argv, char ** Line 156  int main (int argc, char **argv, char **
     gid_t d_gid;      gid_t d_gid;
     uid_t d_uid;      uid_t d_uid;
   
     short custom_user = FALSE;  
     short custom_group = FALSE;  
       
 #if defined(HAVE_GETOPT_LONG)  #if defined(HAVE_GETOPT_LONG)
     struct option long_options[] = {             struct option long_options[] = {       
         {"help", no_argument, 0, 'h'},          {"help", no_argument, 0, 'h'},
Line 172  int main (int argc, char **argv, char ** Line 184  int main (int argc, char **argv, char **
   
     char *symname = (char *) calloc(STRLEN, sizeof(char));      char *symname = (char *) calloc(STRLEN, sizeof(char));
     char *symval = (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_path[PATH_MAX] = {0};
     char *cli_rtn_file;      char *cli_rtn_file;
     char cli_rtn_name[256];      char cli_rtn_name[256];
Line 234  int main (int argc, char **argv, char ** Line 243  int main (int argc, char **argv, char **
                 break;                  break;
   
             case 'e': /* specify FreeM environment */              case 'e': /* specify FreeM environment */
                 strncpy (shm_env, optarg, 255);                  strncpy (shm_env, optarg, sizeof (shm_env) - 1);
                 break;                  break;
   
             case 'R':              case 'R':
Line 359  int main (int argc, char **argv, char ** Line 368  int main (int argc, char **argv, char **
                     break;                      break;
   
                 case 'e':  /* specify FreeM environment */                  case 'e':  /* specify FreeM environment */
                     strncpy (shm_env, optarg, 255);                      strncpy (shm_env, optarg, sizeof (shm_env) - 1);
                     break;                      break;
   
                 case 'R':                  case 'R':
Line 456  int main (int argc, char **argv, char ** Line 465  int main (int argc, char **argv, char **
     }      }
 #endif  #endif
           
     snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);      snprintf (config_file, sizeof (config_file) - 1, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);
     snprintf (env_config_file, 4096, "%s/freem/env.conf", SYSCONFDIR);          snprintf (env_config_file, sizeof (config_file) - 1, "%s/freem/env.conf", SYSCONFDIR);    
           
     if (!file_exists (env_config_file)) {      if (!file_exists (env_config_file)) {
         fprintf (stderr, "freem:  environment catalog does not exist; may need to run fmadm configure\n");          fprintf (stderr, "freem:  environment catalog does not exist; may need to run fmadm configure\n");
Line 508  int main (int argc, char **argv, char ** Line 517  int main (int argc, char **argv, char **
     if (run_daemon == FALSE && group_member (d_gid) == 0) {      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);          fprintf (stderr, "freem:  you must be a member of the %s group to use environment %s\n", d_groupname, shm_env);
         exit (1);          exit (1);
     }      }        
           
 #endif      #endif    
           
     if (run_daemon == TRUE) {      if (run_daemon == TRUE) {
Line 574  int main (int argc, char **argv, char ** Line 582  int main (int argc, char **argv, char **
         if (geteuid () == 0) {          if (geteuid () == 0) {
             /* shed privileges */              /* shed privileges */
   
             if (custom_group) {  
                 fprintf (stderr, "freem:  switching to group %s\n", d_groupname);              fprintf (stderr, "freem:  switching to group %s\n", d_groupname);
                 m_log (1, "switching groups");              m_log (1, "switching groups");
                                   
                 if (setgid (d_gid) == -1) {              if (setgid (d_gid) == -1) {
                     fprintf (stderr, "freem:  failure switching GID\n");                  fprintf (stderr, "freem:  failure switching GID\n");
                     m_log (1, "failure switching GIDs");                  m_log (1, "failure switching GIDs");
                     exit (1);                  exit (1);
                 }  
             }              }
           
   
   
             if (custom_user) {                              if (d_uid != geteuid ()) {
                 fprintf (stderr, "freem:  switching to username %s\n", d_username);                  fprintf (stderr, "freem:  switching to username %s\n", d_username);
                 m_log (1, "switching users");                  m_log (1, "switching users");
                                   
Line 668  int main (int argc, char **argv, char ** Line 676  int main (int argc, char **argv, char **
         skip_init = 1;          skip_init = 1;
   
         /* initialize FreeM environment */          /* initialize FreeM environment */
         strncpy (nsnbuf, nsname, 255);              strncpy (nsnbuf, nsname, sizeof (nsnbuf));    
         if (init (nsnbuf) == FALSE) {          if (init (nsnbuf) == FALSE) {
                           
             if (fm_initialized) set_io (UNIX);              if (fm_initialized) set_io (UNIX);
Line 723  int main (int argc, char **argv, char ** Line 731  int main (int argc, char **argv, char **
         }          }
   
         /* make this the startup routine */          /* 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           /* re-work the namespace config to search for the 
            routine in the discovered path */             routine in the discovered path */
         if (cli_rtn_name[0] == '%') {          if (cli_rtn_name[0] == '%') {
   
             snprintf (rou0plib, 256, "%s\201", cli_rtn_path);              snprintf (rou0plib, sizeof (rou0plib) - 1, "%s\201", cli_rtn_path);
             snprintf (rou1plib, 256, "%s\201", cli_rtn_path);              snprintf (rou1plib, sizeof (rou1plib) - 1, "%s\201", cli_rtn_path);
   
         }          }
         else {          else {
   
             snprintf (rou0path, 256, "%s\201", cli_rtn_path);              snprintf (rou0path, sizeof (rou0path) - 1, "%s\201", cli_rtn_path);
             snprintf (rou1path, 256, "%s\201", cli_rtn_path);              snprintf (rou1path, sizeof (rou1path) - 1, "%s\201", cli_rtn_path);
   
         }          }
   
Line 755  int main (int argc, char **argv, char ** Line 763  int main (int argc, char **argv, char **
   
     if (!skip_init) {      if (!skip_init) {
         /* initialize FreeM environment */          /* initialize FreeM environment */
         strncpy (nsnbuf, nsname, 255);              strncpy (nsnbuf, nsname, sizeof (nsnbuf));    
         if (init (nsnbuf) == FALSE) {                 if (init (nsnbuf) == FALSE) {       
             set_io (UNIX);              set_io (UNIX);
             fprintf (stderr, "\nError initializing FreeM.\n");              fprintf (stderr, "\nError initializing FreeM.\n");
Line 864  int main (int argc, char **argv, char ** Line 872  int main (int argc, char **argv, char **
                   
           
 #if !defined(_AIX)  #if !defined(_AIX)
     if(import_env == TRUE) {      if (import_env == TRUE) {
   
         int i_maxlen = 255;          int i_maxlen = 255;
                   
         for(env = envp; *env != 0; env++) {          for (env = envp; *env != 0; env++) {                    
                           varname = strtok (*env, "=");
             namelen = 0;              varval = strtok (NULL, "=");
             vallen = 0;  
               
             varname = strtok(*env, "=");  
             varval = strtok(NULL, "=");  
   
             if(varval != NULL) {  
                 namelen = strlen (varname);  
                 vallen = strlen (varval);  
   
               if (varval != NULL) {
                 snprintf (symname, i_maxlen, "ENV.%s\201\201", varname);                  snprintf (symname, i_maxlen, "ENV.%s\201\201", varname);
                 strncpy (symval, varval, i_maxlen);                  strncpy (symval, varval, i_maxlen - 1);
                                   
                 stcnv_c2m (symval);                  stcnv_c2m (symval);
   
Line 900  int main (int argc, char **argv, char ** Line 900  int main (int argc, char **argv, char **
         stcpy (verstr, FREEM_VERSION_STR);          stcpy (verstr, FREEM_VERSION_STR);
         stcnv_m2c (verstr);          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);          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);          write_m (version);
   
         /*          /*
Line 920  int main (int argc, char **argv, char ** Line 920  int main (int argc, char **argv, char **
     if (dx_mode) {      if (dx_mode) {
         char k_buf[512];                  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);          symtab (set_sym, k_buf, dx_mcode);
         const_define (k_buf, dx_mcode);          const_define (k_buf, dx_mcode);
     }      }
Line 928  int main (int argc, char **argv, char ** Line 928  int main (int argc, char **argv, char **
     if (routine_mode) {      if (routine_mode) {
         char k_buf[512];          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);          symtab (set_sym, k_buf, startup_routine);
         const_define (k_buf, startup_routine);          const_define (k_buf, startup_routine);
     }      }

Removed from v.1.16  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>