version 1.6, 2025/03/24 16:04:49
|
version 1.10, 2025/04/01 20:11:46
|
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.10 2025/04/01 20:11:46 snw |
|
* Further work on fmadm |
|
* |
|
* Revision 1.9 2025/03/31 20:01:13 snw |
|
* Set d_uid in daemon |
|
* |
|
* Revision 1.8 2025/03/24 16:10:48 snw |
|
* Print error message and exit on OS/2 if daemon is run without --nofork |
|
* |
|
* Revision 1.7 2025/03/24 16:07:55 snw |
|
* Force daemon into foreground on OS/2 |
|
* |
* Revision 1.6 2025/03/24 16:04:49 snw |
* Revision 1.6 2025/03/24 16:04:49 snw |
* Force daemon into foreground on OS/2 |
* Force daemon into foreground on OS/2 |
* |
* |
Line 126 int main (int argc, char **argv, char **
|
Line 138 int main (int argc, char **argv, char **
|
{"execute", required_argument, 0, 'x'}, |
{"execute", required_argument, 0, 'x'}, |
{"daemon", no_argument, 0, 'd'}, |
{"daemon", no_argument, 0, 'd'}, |
{"nofork", no_argument, 0, 'k'}, |
{"nofork", no_argument, 0, 'k'}, |
{"pidfile", required_argument, 0, 'p'}, |
|
{"shmsize", required_argument, 0, 'S'}, |
{"shmsize", required_argument, 0, 'S'}, |
{"user", required_argument, 0, 'u'}, |
{"user", required_argument, 0, 'u'}, |
{"group", required_argument, 0, 'g'}, |
{"group", required_argument, 0, 'g'}, |
Line 288 int main (int argc, char **argv, char **
|
Line 299 int main (int argc, char **argv, char **
|
nofork = TRUE; |
nofork = TRUE; |
break; |
break; |
|
|
case 'p': /* --pidfile */ |
|
pid_file_path = strdup (optarg); |
|
break; |
|
|
|
case 'S': /* --shmsize */ |
case 'S': /* --shmsize */ |
shm_init_size = atol (optarg); |
shm_init_size = atol (optarg); |
break; |
break; |
Line 317 int main (int argc, char **argv, char **
|
Line 324 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:dkpS:u:g:")) != -1) { |
while ((c = getopt (argc, argv, "hsfiqRr:n:e:vx:dkS:u:g:")) != -1) { |
|
|
if (c == '?') freem_usage (); |
if (c == '?') freem_usage (); |
|
|
Line 384 int main (int argc, char **argv, char **
|
Line 391 int main (int argc, char **argv, char **
|
nofork = TRUE; |
nofork = TRUE; |
break; |
break; |
|
|
case 'p': /* --pidfile */ |
|
pid_file_path = strdup (optarg); |
|
break; |
|
|
|
case 's': /* --standard */ |
case 's': /* --standard */ |
|
|
if (strcmp (optarg, "M77") == 0) { |
if (strcmp (optarg, "M77") == 0) { |
Line 447 int main (int argc, char **argv, char **
|
Line 450 int main (int argc, char **argv, char **
|
|
|
#if defined(__OS2__) |
#if defined(__OS2__) |
if (run_daemon == TRUE && nofork == FALSE) { |
if (run_daemon == TRUE && nofork == FALSE) { |
printf ("freem: running on OS/2; forcing daemon into foreground\r\n"); |
printf ("freem: running on OS/2; daemon must be run with --nofork or -k\r\n"); |
nofork = TRUE; |
exit (1); |
} |
} |
#endif |
#endif |
|
|
Line 477 int main (int argc, char **argv, char **
|
Line 480 int main (int argc, char **argv, char **
|
|
|
d_uid = d_user->pw_uid; |
d_uid = d_user->pw_uid; |
} |
} |
|
else { |
|
d_uid = 0; |
|
} |
|
|
} |
} |
|
|
Line 575 int main (int argc, char **argv, char **
|
Line 581 int main (int argc, char **argv, char **
|
run_daemon = TRUE; |
run_daemon = TRUE; |
nofork = FALSE; |
nofork = FALSE; |
|
|
if (pid_file_path == NULL) { |
|
/* no PID file specified. choose one. */ |
|
uid_t pid_uid; |
|
char *home_directory; |
|
|
|
pid_file_path = (char *) calloc (PATH_MAX, sizeof (char)); |
|
NULLPTRCHK(pid_file_path,"main"); |
|
|
|
home_directory = (char *) calloc (PATH_MAX, sizeof (char)); |
|
NULLPTRCHK(home_directory,"main"); |
|
|
|
pid_uid = geteuid (); |
|
|
|
if (pid_uid == 0) { |
|
/* we're running as root */ |
|
strcpy (pid_file_path, "/var/run/freem.pid"); |
|
} |
|
else { |
|
/* our user is a normie */ |
|
struct passwd *pw = getpwuid (pid_uid); |
|
|
|
if (pw == NULL) { |
|
m_log (1, "main: failure in getpwuid()"); |
|
} |
|
|
|
strcpy (home_directory, pw->pw_dir); |
|
snprintf (pid_file_path, PATH_MAX - 1, "%s/.freem.pid", home_directory); |
|
} |
|
|
|
free (home_directory); |
|
|
|
} |
|
|
|
{ |
{ |
char pidfile_buf[256]; |
char pidfile_buf[256]; |
int errsav; |
int errsav; |
|
|
|
snprintf (pid_file_path, PATH_MAX - 1, "%s/freem/run/%s.pid", LOCALSTATEDIR, shm_env); |
|
|
|
printf (pid_file_path); |
m_log (1, pid_file_path); |
m_log (1, pid_file_path); |
|
|
pid_fd = open (pid_file_path, O_RDWR | O_CREAT, 0640); |
pid_fd = open (pid_file_path, O_RDWR | O_CREAT, 0640); |
Line 630 int main (int argc, char **argv, char **
|
Line 606 int main (int argc, char **argv, char **
|
exit (1); |
exit (1); |
} |
} |
|
|
sprintf (pidfile_buf, "%d\n", getpid ()); |
sprintf (pidfile_buf, "%ld\n", (long) getpid ()); |
write (pid_fd, pidfile_buf, strlen (pidfile_buf)); |
write (pid_fd, pidfile_buf, strlen (pidfile_buf)); |
|
|
|
close (pid_fd); |
} |
} |
|
|
|
|
Line 951 void freem_usage(void)
|
Line 928 void freem_usage(void)
|
fprintf (stdout, "\t-x <MCODE>, --execute=<MCODE>\n\t\texecute M code <MCODE> on startup\n\n"); |
fprintf (stdout, "\t-x <MCODE>, --execute=<MCODE>\n\t\texecute M code <MCODE> on startup\n\n"); |
fprintf (stdout, "\t-d, --daemon\n\t\trun the FreeM daemon (one and only one FreeM daemon must always be running)\n\n"); |
fprintf (stdout, "\t-d, --daemon\n\t\trun the FreeM daemon (one and only one FreeM daemon must always be running)\n\n"); |
fprintf (stdout, "\t-k, --nofork\n\t\trun the FreeM daemon in foreground (requires --daemon)\n\n"); |
fprintf (stdout, "\t-k, --nofork\n\t\trun the FreeM daemon in foreground (requires --daemon)\n\n"); |
fprintf (stdout, "\t-p <PIDFILE>, --pidfile=<PIDFILE>\n\t\tuse <PIDFILE> to record the PID of the FreeM daemon\n\n\n"); |
|
fprintf (stdout, "\t-S <BYTES>, --shmsize=<BYTES>\n\t\tsets the size of the shared memory segment where FreeM stores the job table, lock table, and IPC table.\n"); |
fprintf (stdout, "\t-S <BYTES>, --shmsize=<BYTES>\n\t\tsets the size of the shared memory segment where FreeM stores the job table, lock table, and IPC table.\n"); |
#else |
#else |
fprintf (stdout, "\t-h\n\t\tdisplays this help message\n\n"); |
fprintf (stdout, "\t-h\n\t\tdisplays this help message\n\n"); |