Diff for /freem/src/fmadm.c between versions 1.19 and 1.20

version 1.19, 2025/04/01 14:32:11 version 1.20, 2025/04/01 16:37:12
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.20  2025/04/01 16:37:12  snw
    *   Configure DEFAULT environment the same as others, and set permissions/ownership directly in fmadm configure. Add env.conf file as a centralized configuration listing all environments.
    *
  *   Revision 1.19  2025/04/01 14:32:11  snw   *   Revision 1.19  2025/04/01 14:32:11  snw
  *   Begin work on environment and namespace reorg   *   Begin work on environment and namespace reorg
  *   *
Line 144  short fma_explicit_environment = FALSE; Line 147  short fma_explicit_environment = FALSE;
 char obj_str[STRLEN];  char obj_str[STRLEN];
   
 extern char config_file[4096];  extern char config_file[4096];
   extern char env_config_file[4096];
   extern char env_user[255];
   extern char env_group[255];
   
 int fm_shell(void);  int fm_shell(void);
 void fm_checkperms(void);  void fm_checkperms(void);
Line 151  void fm_reconfigure(void); Line 157  void fm_reconfigure(void);
 void fm_configure(void);  void fm_configure(void);
 void fm_write (FILE *file, char *buf);  void fm_write (FILE *file, char *buf);
 int fma_jobs_remove (int optc, char **opts);  int fma_jobs_remove (int optc, char **opts);
   void set_permissions(char *path, char *user, char *grp, int mode);
   
   
 int main (int argc, char **argv)  int main (int argc, char **argv)
 {  {
Line 198  int main (int argc, char **argv) Line 206  int main (int argc, char **argv)
         if (argv[i][0] == '-') {          if (argv[i][0] == '-') {
                                                   
             switch (argv[i][1]) {              switch (argv[i][1]) {
   
                   case 'u':
                       if (argv[i][2] != '=') {
                           fprintf (stderr, "fmadm:  missing equals sign in flag -%c\n", argv[i][1]);
                           fmadm_usage ();
                           exit (1);
                       }
   
                       k = 0;
                       
                       for (j = 3; j < strlen (argv[i]); j++) {
                           env_user[k++] = argv[i][j];
                       }
                       
                       fma_explicit_environment = TRUE;
                       base_arg++;
                       
                       break;
   
                   case 'g':
                       if (argv[i][2] != '=') {
                           fprintf (stderr, "fmadm:  missing equals sign in flag -%c\n", argv[i][1]);
                           fmadm_usage ();
                           exit (1);
                       }
   
                       k = 0;
                       
                       for (j = 3; j < strlen (argv[i]); j++) {
                           env_group[k++] = argv[i][j];
                       }
                       
                       fma_explicit_environment = TRUE;
                       base_arg++;
                       
                       break;
                       
                                   
                 case 'e':                  case 'e':
                     if (argv[i][2] != '=') {                      if (argv[i][2] != '=') {
Line 238  int main (int argc, char **argv) Line 283  int main (int argc, char **argv)
             }              }
         }          }
     }      }
       
       if (strlen (env_user) == 0) {
           fprintf (stderr, "fmadm:  assuming user 'freem' for this environment's owner\n");
           snprintf (env_user, 6, "freem");
       }
   
       if (strlen (env_group) == 0) {
           fprintf (stderr, "fmadm:  assuming group 'freem' for this environment's owner\n");
           snprintf (env_group, 6, "freem");
       }
   
   
     if (!fma_explicit_environment) snprintf (fma_environment, 4096, "DEFAULT");      if (!fma_explicit_environment) snprintf (fma_environment, 4096, "DEFAULT");
     if (!fma_explicit_namespace) snprintf (fma_namespace, 4096, "SYSTEM");      if (!fma_explicit_namespace) snprintf (fma_namespace, 4096, "SYSTEM");
           
     snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, fma_environment);      snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, fma_environment);
       snprintf (env_config_file, 4096, "%s/freem/env.conf", SYSCONFDIR);
       
     /*      /*
     printf ("action = '%s' object = '%s' environment = '%s' namespace = '%s' config_file = '%s' base_arg = '%d' next argument = '%s'\n", action, obj_str, fma_environment, fma_namespace, config_file, base_arg, argv[base_arg]);      printf ("action = '%s' object = '%s' environment = '%s' namespace = '%s' config_file = '%s' base_arg = '%d' next argument = '%s'\n", action, obj_str, fma_environment, fma_namespace, config_file, base_arg, argv[base_arg]);
     exit(1);      exit(1);
Line 1147  void fm_configure (void) Line 1204  void fm_configure (void)
     char src_dir[4096];      char src_dir[4096];
     char dest_dir[4096];      char dest_dir[4096];
   
       char *username = env_user;
       char *groupname = env_group;
      
   #if !defined(__OS2__)
     struct group *d_grp;      struct group *d_grp;
     struct passwd *d_user;      struct passwd *d_user;
     gid_t d_gid;      gid_t d_gid;
     uid_t d_uid;         uid_t d_uid;
   
       if ((d_grp = getgrnam (groupname)) == NULL) {
           fprintf (stderr, "fmadm:  '%s' group must exist before configuring\n", groupname);
           exit (1);
       }
       d_gid = d_grp->gr_gid;
   
       if ((d_user = getpwnam (username)) == NULL) {
           fprintf (stderr, "fmadm:  '%s' user must exist before configuring\n", username);
           exit (1);
       }
       d_uid = d_user->pw_uid;
   #endif    
       
           
     snprintf (varbase, 4095, "%s/freem", LOCALSTATEDIR);      snprintf (varbase, 4095, "%s/freem", LOCALSTATEDIR);
     snprintf (sysrtn, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);      snprintf (sysrtn, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
Line 1169  void fm_configure (void) Line 1243  void fm_configure (void)
         fprintf (stderr, "fmadm:  not superuser\n");          fprintf (stderr, "fmadm:  not superuser\n");
         exit (1);          exit (1);
     }      }
   
 #if !defined(__OS2__)  
     if ((d_grp = getgrnam ("freem")) == NULL) {  
         fprintf (stderr, "fmadm:  'freem' group must exist before configuring\n");  
         exit (1);  
     }  
     d_gid = d_grp->gr_gid;  
   
     if ((d_user = getpwnam ("freem")) == NULL) {  
         fprintf (stderr, "fmadm:  'freem' user must exist before configuring\n");  
         exit (1);  
     }  
     d_uid = d_user->pw_uid;  
 #endif  
           
     if (file_exists (config_file)) {      if (file_exists (config_file)) {
         fprintf (stderr, "fmadm:  '%s' already exists; running fmadm reconfigure instead\n", config_file);          fprintf (stderr, "fmadm:  '%s' already exists; running fmadm reconfigure instead\n", config_file);
Line 1190  void fm_configure (void) Line 1250  void fm_configure (void)
         return;          return;
     }      }
   
   
     gethostname (hostid, 4095);      gethostname (hostid, 4095);
     uuid_v4 (buf);      uuid_v4 (buf);
   
     snprintf (jnlhostid, 4095, "%s:%s", hostid, buf);      snprintf (jnlhostid, 4095, "%s:%s", hostid, buf);
   
     snprintf (confbase, 4095, "%s/freem", SYSCONFDIR);      snprintf (confbase, 4095, "%s/freem", SYSCONFDIR);
     snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, fma_environment);       snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, fma_environment); 
     snprintf (nsbase, 4095, "%s/freem/%s", LOCALSTATEDIR, fma_environment);      snprintf (nsbase, 4095, "%s/freem/%s", LOCALSTATEDIR, fma_environment);
Line 1227  void fm_configure (void) Line 1285  void fm_configure (void)
     printf ("---------------------------\n\n");      printf ("---------------------------\n\n");
   
     printf ("This utility will create the initial configuration file for ");      printf ("This utility will create the initial configuration file for ");
     printf ("FreeM environment '%s' in %s.\n\n", fma_environment, config_file);          printf ("FreeM environment '%s' (owned by %s:%s) in '%s'.\n\n", fma_environment, username, groupname, config_file);    
           
     /* check for existence of needed directories */      /* check for existence of needed directories */
     if (stat (SYSCONFDIR, &etcstat) == -1) {      if (stat (SYSCONFDIR, &etcstat) == -1) {
         fprintf (stderr, "fmadm:  creating %s\n", SYSCONFDIR);          fprintf (stderr, "fmadm:  creating %s\n", SYSCONFDIR);
         mkdir (SYSCONFDIR, 0775);          mkdir (SYSCONFDIR, 0775);
 #if !defined(__OS2__)          set_permissions (SYSCONFDIR, username, groupname, 0775);
         if (chown (SYSCONFDIR, d_uid, d_gid) != 0) {  
             fprintf (stderr, "fmadm:  error setting ownership on %s\n", SYSCONFDIR);  
             exit (1);  
         }  
 #endif          
     }      }
   
     if (stat (confbase, &etcstat) == -1) {      if (stat (confbase, &etcstat) == -1) {
         fprintf (stderr, "fmadm:  creating %s\n", confbase);          fprintf (stderr, "fmadm:  creating %s\n", confbase);
         mkdir (confbase, 0775);          mkdir (confbase, 0775);
 #if !defined(__OS2__)          set_permissions (confbase, username, groupname, 0775);
         if (chown (confbase, d_uid, d_gid) != 0) {  
             fprintf (stderr, "fmadm:  error setting ownership on %s\n", confbase);  
             exit (1);  
         }  
 #endif          
     }      }
   
     if (stat (envbase, &etcstat) == -1) {      if (stat (envbase, &etcstat) == -1) {
         fprintf (stderr, "fmadm:  creating %s\n", envbase);          fprintf (stderr, "fmadm:  creating %s\n", envbase);
         mkdir (envbase, 0775);          mkdir (envbase, 0775);
 #if !defined(__OS2__)          set_permissions (envbase, username, groupname, 0775);
         if (chown (envbase, d_uid, d_gid) != 0) {  
             fprintf (stderr, "fmadm:  error setting ownership on %s\n", envbase);  
             exit (1);  
         }  
 #endif          
           
     }      }
   
     if (stat (varbase, &etcstat) == -1) {      if (stat (varbase, &etcstat) == -1) {
         fprintf (stderr, "fmadm:  creating %s\n", varbase);          fprintf (stderr, "fmadm:  creating %s\n", varbase);
         mkdir (varbase, 0775);          mkdir (varbase, 0775);
 #if !defined(__OS2__)          set_permissions (varbase, username, groupname, 0775);
         if (chown (varbase, d_uid, d_gid) != 0) {  
             fprintf (stderr, "fmadm:  error setting ownership on %s\n", varbase);  
             exit (1);  
         }  
 #endif          
           
     }      }
           
     if (stat (nsbase, &etcstat) == -1) {      if (stat (nsbase, &etcstat) == -1) {
         fprintf (stderr, "fmadm:  creating %s\n", nsbase);          fprintf (stderr, "fmadm:  creating %s\n", nsbase);
         mkdir (nsbase, 0775);          mkdir (nsbase, 0775);
 #if !defined(__OS2__)          set_permissions (nsbase, username, groupname, 0775);
         if (chown (nsbase, d_uid, d_gid) != 0) {  
             fprintf (stderr, "fmadm:  error setting ownership on %s\n", nsbase);  
             exit (1);  
         }  
 #endif          
           
     }      }
   
     snprintf (src_dir, 4095, "%s/freem/mlib", DATADIR);      snprintf (src_dir, 4095, "%s/freem/mlib", DATADIR);
Line 1295  void fm_configure (void) Line 1325  void fm_configure (void)
           
     snprintf (buf, 4095, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
       
           
     snprintf (buf, 4095, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
           
     snprintf (buf, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
           
     snprintf (buf, 4095, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
           
     snprintf (buf, 4095, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
           
     snprintf (buf, 4095, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);      snprintf (buf, 4095, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);
     mkdir (buf, 0775);      mkdir (buf, 0775);
 #if !defined(__OS2__)      set_permissions (buf, username, groupname, 0775);
     if (chown (buf, d_uid, d_gid) != 0) {  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", buf);  
         exit (1);  
     }  
 #endif          
           
     fprintf (stderr, "fmadm:  copying routines from '%s' to '%s'...\n", src_dir, dest_dir);      fprintf (stderr, "fmadm:  copying routines from '%s' to '%s'...\n", src_dir, dest_dir);
   
Line 1370  void fm_configure (void) Line 1369  void fm_configure (void)
             if (cp (outfile, infile) != 0) {              if (cp (outfile, infile) != 0) {
                 fprintf (stderr, "fmadm:  failure copying %s to %s\n", infile, outfile);                  fprintf (stderr, "fmadm:  failure copying %s to %s\n", infile, outfile);
             }              }
             if (chown (outfile, d_uid, d_gid) != 0) {              set_permissions (outfile, username, groupname, 0755);
                 fprintf (stderr, "fmadm:  error setting ownership on %s\n", outfile);  
                 exit (1);  
             }  
 #else  #else
             if (DosCopy (infile, outfile, 1) != 0) {              if (DosCopy (infile, outfile, 1) != 0) {
                 fprintf (stderr, "fmadm:  failure copying %s to %s\n", infile, outfile);                  fprintf (stderr, "fmadm:  failure copying %s to %s\n", infile, outfile);
Line 1383  void fm_configure (void) Line 1379  void fm_configure (void)
         }          }
                   
     }      }
   
       fp = fopen (env_config_file, "a+");
   
       fprintf (stderr, "Creating %s... ", env_config_file);
   
       snprintf (buf, 4095, "[%s]", fma_environment);
       fm_write (fp, buf);
   
       snprintf (buf, 4095, "user=%s", env_user);
       fm_write (fp, buf);
       
       snprintf (buf, 4095, "group=%s", env_group);
       fm_write (fp, buf);
       
       snprintf (buf, 4095, "env_path=%s/freem/%s", LOCALSTATEDIR, fma_environment);
       fm_write (fp, buf);
       
       fclose (fp);
       fprintf (stderr, "[OK]\n");
         
     fp = fopen (config_file, "a+");      fp = fopen (config_file, "a+");
           
     printf ("Creating %s... ", config_file);       fprintf (stderr, "Creating %s... ", config_file); 
           
     snprintf (buf, 4095, "[SYSTEM]");      snprintf (buf, 4095, "[SYSTEM]");
     fm_write (fp, buf);      fm_write (fp, buf);
Line 1429  void fm_configure (void) Line 1444  void fm_configure (void)
   
     snprintf (buf, 4095, "globals_path=%s", usrgbl);      snprintf (buf, 4095, "globals_path=%s", usrgbl);
     fm_write (fp, buf);      fm_write (fp, buf);
               
       
     fclose (fp);      fclose (fp);
       set_permissions (config_file, username, groupname, 0755);
       fprintf (stderr, "[OK]\n");
   
 #if !defined(__OS2__)  
     if (chown (config_file, d_uid, d_gid) != 0) {  
         printf ("[FAIL]\n\n");  
         fprintf (stderr, "fmadm:  error setting ownership on %s\n", config_file);  
         exit (1);  
     }  
 #endif      
       
     printf ("[OK]\n\n");  
   
 /*  
     printf ("Setting USER namespace permissions... ");  
   
     snprintf (buf, 4095, "%s/freem/USER/globals", LOCALSTATEDIR);  
     chmod (buf, 0777);  
   
     snprintf (buf, 4095, "%s/freem/USER/routines", LOCALSTATEDIR);  
     chmod (buf, 0777);  
   
     printf ("[OK]\n");  
     printf ("Setting SYSTEM namespace permissions... ");  
       
     snprintf (buf, 4095, "%s/freem/SYSTEM/globals", LOCALSTATEDIR);  
     chmod (buf, 0755);  
   
     snprintf (buf, 4095, "%s/freem/SYSTEM/routines", LOCALSTATEDIR);  
     chmod (buf, 0755);  
   
     printf ("[OK]\n\n\n");  
 */  
     printf ("FreeM initial configuration is complete.\n\n");      printf ("FreeM initial configuration is complete.\n\n");
   
     printf (" USER globals:                   %s\n", usrgbl);      printf (" USER globals:                   %s\n", usrgbl);
Line 1476  void fm_configure (void) Line 1462  void fm_configure (void)
           
 } /* fm_configure */  } /* fm_configure */
   
   void set_permissions(char *path, char *user, char *grp, int mode)
   {
       
   #if !defined(__OS2__)
       struct group *d_grp;
       struct passwd *d_user;
       gid_t d_gid;
       uid_t d_uid;
   #endif    
   
   
   #if !defined(__OS2__)    
       if ((d_grp = getgrnam (grp)) == NULL) {
           fprintf (stderr, "fmadm:  '%s' group must exist before configuring\n", grp);
           exit (1);
       }
       d_gid = d_grp->gr_gid;
   
       if ((d_user = getpwnam (user)) == NULL) {
           fprintf (stderr, "fmadm:  '%s' user must exist before configuring\n", user);
           exit (1);
       }
       d_uid = d_user->pw_uid;
   
       if (chown (path, d_uid, d_gid) != 0) {
           fprintf (stderr, "fmadm:  error setting ownership on %s\n", path);
           exit (1);
       }
   #endif    
   
       if (chmod (path, mode) != 0) {
           fprintf (stderr, "fmadm:  error setting permissions on %s to %d\n", path, mode);
           exit (1);
       }
       
   }
   
 void fm_write (FILE *file, char *buf)  void fm_write (FILE *file, char *buf)
 {  {
     fprintf (file, "%s\n", buf);      fprintf (file, "%s\n", buf);

Removed from v.1.19  
changed lines
  Added in v.1.20


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