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

version 1.15, 2025/04/03 20:48:14 version 1.16, 2025/04/04 19:43:18
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.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
    *
  *   Revision 1.15  2025/04/03 20:48:14  snw   *   Revision 1.15  2025/04/03 20:48:14  snw
  *   Improve daemon error diagnostics and bump to 0.63.0-rc3   *   Improve daemon error diagnostics and bump to 0.63.0-rc3
  *   *
Line 65 Line 68
  * SPDX-License-Identifier: AGPL-3.0-or-later   * SPDX-License-Identifier: AGPL-3.0-or-later
  **/   **/
   
   #define _GNU_SOURCE
 #include <stdlib.h>  #include <stdlib.h>
 #include <stddef.h>  #include <stddef.h>
 #include "mpsdef.h"  #include "mpsdef.h"
Line 176  int main (int argc, char **argv, char ** Line 180  int main (int argc, char **argv, char **
     char *cli_rtn_file;      char *cli_rtn_file;
     char cli_rtn_name[256];      char cli_rtn_name[256];
   
       char env_ena[25];
       
     routine_mode = FALSE;      routine_mode = FALSE;
     strcpy (m_dialect, "FREEM");      strcpy (m_dialect, "FREEM");
           
Line 205  int main (int argc, char **argv, char ** Line 211  int main (int argc, char **argv, char **
           
     while (1) {      while (1) {
                   
         c = getopt_long (argc, argv, "hsfiqRr:n:e:vx:dkpS:u:g:", long_options, &option_index);          c = getopt_long (argc, argv, "hsfiqRr:n:e:vx:dkpS", long_options, &option_index);
   
         if (c == -1) break;          if (c == -1) break;
         if (c == '?') freem_usage ();          if (c == '?') freem_usage ();
Line 318  int main (int argc, char **argv, char ** Line 324  int main (int argc, char **argv, char **
   
             case 'S': /* --shmsize */              case 'S': /* --shmsize */
                 shm_init_size = atol (optarg);                  shm_init_size = atol (optarg);
                 break;                  break;                
   
             case 'u': /* --user */  
                 strncpy (d_username, optarg, 40);  
                 custom_user = TRUE;  
                 break;  
   
             case 'g': /* --group */  
                 strncpy (d_groupname, optarg, 40);  
                 custom_group = TRUE;  
                 break;  
                   
   
         }           } 
   
Line 341  int main (int argc, char **argv, char ** Line 336  int main (int argc, char **argv, char **
         extern char *optarg;          extern char *optarg;
         extern int optind, optopt;          extern int optind, optopt;
   
         while ((c = getopt (argc, argv, "hsfiqRr:n:e:vx:dkS:u:g:")) != -1) {          while ((c = getopt (argc, argv, "hsfiqRr:n:e:vx:dkS:")) != -1) {
   
             if (c == '?') freem_usage ();              if (c == '?') freem_usage ();
                           
Line 449  int main (int argc, char **argv, char ** Line 444  int main (int argc, char **argv, char **
                     shm_init_size = atol (optarg);                      shm_init_size = atol (optarg);
                     break;                      break;
   
                 case 'u': /* --user */  
                     strncpy (d_username, optarg, 40);  
                     custom_user = TRUE;  
                     break;  
                       
                 case 'g': /* --group */  
                     strncpy (d_groupname, optarg, 40);  
                     custom_group = TRUE;  
                     break;  
   
                       
             }               } 
         }          }
     }      }
Line 473  int main (int argc, char **argv, char ** Line 457  int main (int argc, char **argv, char **
 #endif  #endif
           
     snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);      snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env);
       snprintf (env_config_file, 4096, "%s/freem/env.conf", SYSCONFDIR);    
           
     if (run_daemon == TRUE && geteuid() == 0) {      if (!file_exists (env_config_file)) {
           fprintf (stderr, "freem:  environment catalog does not exist; may need to run fmadm configure\n");
           exit (1);
       }
   
         if (custom_group) {      if (!file_exists (config_file)) {
             d_grp = getgrnam (d_groupname);          fprintf (stderr, "freem:  configuration file for %s does not exist; may need to run fmadm configure\n", shm_env);
           exit (1);
       }
   
             if (d_grp == NULL) {      if (read_profile_string (env_config_file, shm_env, "user", d_username) == FALSE) {
                 fprintf (stderr, "freem:  invalid group '%s'\n", d_groupname);          fprintf (stderr, "freem:  could not determine owning user for environment %s\n", shm_env);
                 exit (1);          exit (1);
             }      }
               
             d_gid = d_grp->gr_gid;  
         }  
   
         if (custom_user) {      if (read_profile_string (env_config_file, shm_env, "group", d_groupname) == FALSE) {
             d_user = getpwnam (d_username);          fprintf (stderr, "freem:  could not determine owning group for environment %s\n", shm_env);
           exit (1);
       }
   
             if (d_user == NULL) {      if (read_profile_string (env_config_file, shm_env, "enabled", env_ena) == FALSE) {
                 fprintf (stderr, "freem:  invalid user '%s'\n", d_username);          fprintf (stderr, "freem:  could not discover enabled state for environment %s\n", shm_env);
                 exit (1);          exit (1);
             }      }
               
             d_uid = d_user->pw_uid;      if (strcmp (env_ena, "true") != 0) {
         }          fprintf (stderr, "freem:  environment %s is administratively disabled\n", shm_env);
         else {          exit (1);
             d_uid = 0;      }    
         }  
       d_grp = getgrnam (d_groupname);        
       if (d_grp == NULL) {
           fprintf (stderr, "freem:  invalid group '%s'\n", d_groupname);
           exit (1);
       }            
       d_gid = d_grp->gr_gid;
           
       d_user = getpwnam (d_username);
       if (d_user == NULL) {
           fprintf (stderr, "freem:  invalid user '%s'\n", d_username);
           exit (1);
       }            
       d_uid = d_user->pw_uid;
   
       
   #if defined(__linux__)    
       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) {
           if (geteuid () != 0 && nofork == FALSE) {
               fprintf (stderr, "freem:  forking daemon must be run as root\n");
               exit (1);
           }                
     }      }
           
     if ((nofork == TRUE) && (run_daemon == FALSE)) {      if ((nofork == TRUE) && (run_daemon == FALSE)) {

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


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