Diff for /freem/src/fmadm.c between versions 1.26 and 1.28

version 1.26, 2025/04/02 14:37:57 version 1.28, 2025/04/02 19:59:38
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.28  2025/04/02 19:59:38  snw
    *   Automatically modify env.conf from fmadm reconfigure
    *
    *   Revision 1.27  2025/04/02 15:36:25  snw
    *   Do extensive result checking for environment stop/start/restart in fmadm
    *
  *   Revision 1.26  2025/04/02 14:37:57  snw   *   Revision 1.26  2025/04/02 14:37:57  snw
  *   Improve environment control parts of fmadm   *   Improve environment control parts of fmadm
  *   *
Line 177  int fm_daemonctl (short action, short ob Line 183  int fm_daemonctl (short action, short ob
 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);  void set_permissions(char *path, char *user, char *grp, int mode);
   int fm_environment_running (char *env);
 extern int read_profile_string(char *file, char *section, char *key, char *value);  extern int read_profile_string(char *file, char *section, char *key, char *value);
   
 int main (int argc, char **argv)  int main (int argc, char **argv)
Line 1178  int fm_start_environment (char *env, cha Line 1185  int fm_start_environment (char *env, cha
 {  {
     char basecmd[255];      char basecmd[255];
     char cmd[4096];          char cmd[4096];    
   
       if (fm_environment_running (env) == TRUE) {
           return TRUE;
       }
           
 #if !defined(__OS2__)  #if !defined(__OS2__)
     snprintf (basecmd, 254, "%s/bin/freem", PREFIX);      snprintf (basecmd, 254, "%s/bin/freem", PREFIX);
Line 1186  int fm_start_environment (char *env, cha Line 1197  int fm_start_environment (char *env, cha
 #endif  #endif
   
 #if !defined(__OS2__)                      #if !defined(__OS2__)                    
     snprintf (cmd, 4095, "%s -d -e %s -u %s -g %s", basecmd, cur_env, e_user, e_grp);      snprintf (cmd, 4095, "%s -d -e %s -u %s -g %s", basecmd, env, e_user, e_grp);
 #else  #else
     sprintf (cmd, 4095, "%s -d -k -e %s -u %s -g %s", basecmd, cur_env, e_user, e_grp);      sprintf (cmd, 4095, "%s -d -k -e %s -u %s -g %s", basecmd, env, e_user, e_grp);
 #endif  #endif
   
       system (cmd);
   
       sleep (1);
           
     return (system (cmd));              return (fm_environment_running (env));
 }  }
   
 int fm_stop_environment (char *env)  int fm_stop_environment (char *env)
 {  {
     long epid;      long epid;
   
     epid = fm_get_pid (cur_env);      epid = fm_get_pid (env);
     if (epid > -1) {      if (epid > -1) {
         fprintf (stderr, "fmadm:  stopping environment daemon pid %d\n", epid);  
         kill (epid, SIGINT);          kill (epid, SIGINT);
         kill (epid, SIGTERM);          sleep (5);
   
           if (fm_environment_running (env) == FALSE) {
               return TRUE;
           }
           else {
               kill (epid, SIGTERM);
               sleep (5);
               if (fm_environment_running (env) == FALSE) {
                   return TRUE;
               }
               else {
                   kill (epid, SIGKILL);
                   sleep (5);
                   if (fm_environment_running (env) == FALSE) {
                       return TRUE;
                   }
                   else {
                       return FALSE;
                   }
               }
           }
     }      }
     else {      else {
         fprintf (stderr, "fmadm:  could not obtain environment daemon pid\n");          return FALSE;
     }         }   
 }  }
   
   int fm_environment_running (char *env)
   {       
       long epid;
       int result;
       
       epid = fm_get_pid (env);
   
       if (epid == -1) {
           return FALSE;
       }
       else {
           result = kill (epid, 0);
   
           return ((result == 0) ? TRUE : FALSE);
       }
   }
   
 int fm_daemonctl (short action, short object, int optc, char **options)  int fm_daemonctl (short action, short object, int optc, char **options)
 {  {
     FILE *ef;      FILE *ef;
Line 1289  int fm_daemonctl (short action, short ob Line 1341  int fm_daemonctl (short action, short ob
                 strcpy (e_grp, "freem");                  strcpy (e_grp, "freem");
             }              }
   
             printf ("fmadm:  %s environment %s\n", verb, cur_env);              switch (action) {
                   case ACT_START:
                   case ACT_STOP:
                   case ACT_RESTART:
                       fprintf (stderr, "fmadm:  %s environment %s... ", verb, cur_env);
                       break;
                   case ACT_STATUS:
                       fprintf (stderr, "fmadm:  %s environment %s\n", verb, cur_env);
                       break;
               }
   
             switch (action) {              switch (action) {
                                   
                 case ACT_START:                  case ACT_START:
                     result = fm_start_environment (cur_env, e_user, e_grp);                      result = fm_start_environment (cur_env, e_user, e_grp);
                       if (result == TRUE) {
                           fprintf (stderr, "[OK]\n");
                       }
                       else {
                           fprintf (stderr, "[FAIL]\n");
                       }
                     break;                      break;
   
                 case ACT_STOP:                  case ACT_STOP:
                     result = fm_stop_environment (cur_env);                      result = fm_stop_environment (cur_env);
                       if (result == TRUE) {
                           fprintf (stderr, "[OK]\n");
                       }
                       else {
                           fprintf (stderr, "[FAIL]\n");
                       }                    
                     break;                      break;
   
                 case ACT_RESTART:                  case ACT_RESTART:
                     result = fm_stop_environment (cur_env);                      if (fm_stop_environment (cur_env) == TRUE) {
                                               result = fm_start_environment (cur_env, e_user, e_grp);
                     fprintf (stderr, "fmadm:  waiting 2 seconds\n");                          if (result == TRUE) {
                     sleep (2);                              fprintf (stderr, "[OK]\n");
                     fprintf (stderr, "fmadm:  starting environment %s\n", cur_env);                          }
                           else {
                               fprintf (stderr, "[FAIL]\n");
                           }                        
                       }
                       else {
                           fprintf (stderr, "[FAIL]\n");
                       }                       
   
                     result = fm_start_environment (cur_env, e_user, e_grp);  
                     break;                      break;
                                           
                 case ACT_STATUS:                  case ACT_STATUS:
Line 1406  void fm_configure (void) Line 1485  void fm_configure (void)
   
     char *username = env_user;      char *username = env_user;
     char *groupname = env_group;      char *groupname = env_group;
          
 #if !defined(__OS2__)  #if !defined(__OS2__)
     if (geteuid () != 0) {      if (geteuid () != 0) {
         fprintf (stderr, "fmadm:  not superuser\n");          fprintf (stderr, "fmadm:  not superuser\n");
Line 1603  void fm_configure (void) Line 1682  void fm_configure (void)
                   
     }      }
   
     fp = fopen (env_config_file, "a+");      if (fm_validate_environment (fma_environment) == FALSE) {
           fp = fopen (env_config_file, "a+");
     fprintf (stderr, "Creating %s... ", env_config_file);          
           fprintf (stderr, "Creating %s... ", env_config_file);
     snprintf (buf, 4095, "[%s]", fma_environment);          
     fm_write (fp, buf);          snprintf (buf, 4095, "[%s]", fma_environment);
           fm_write (fp, buf);
     snprintf (buf, 4095, "user=%s", env_user);          
     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, "group=%s", env_group);
           fm_write (fp, buf);
           
           snprintf (buf, 4095, "enabled=true");
           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");
       }
       else {
           char modtmp[255];
           
           fprintf (stderr, "Updating %s: \n", env_config_file);
           
           read_profile_string (env_config_file, fma_environment, "user", modtmp);
           if (strcmp (env_user, modtmp) != 0) {
               modify_profile_string (env_config_file, fma_environment, "user", env_user);
               fprintf (stderr, "\tuser:   %s -> %s\n", modtmp, env_user);
           }
   
     snprintf (buf, 4095, "enabled=true");          read_profile_string (env_config_file, fma_environment, "group", modtmp);
     fm_write (fp, buf);          if (strcmp (env_group, modtmp) != 0) {
                   modify_profile_string (env_config_file, fma_environment, "group", env_group);
     snprintf (buf, 4095, "env_path=%s/freem/%s", LOCALSTATEDIR, fma_environment);              fprintf (stderr, "\tgroup:  %s -> %s\n", modtmp, env_group);
     fm_write (fp, buf);          }
           }
     fclose (fp);  
     fprintf (stderr, "[OK]\n");  
         
     fp = fopen (config_file, "a+");      fp = fopen (config_file, "a+");
           

Removed from v.1.26  
changed lines
  Added in v.1.28


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