X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fsendcommand.c;h=bd87ff3b48cf3be2f5c251cfb3afd5ddb0a17e3e;hb=HEAD;hp=01b4d5730ca459694722f7bae7ae8c7206784c6a;hpb=22e1d65797ddb854eb2be4d33bfd4717329eb521;p=citadel.git diff --git a/citadel/sendcommand.c b/citadel/sendcommand.c deleted file mode 100644 index 01b4d5730..000000000 --- a/citadel/sendcommand.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * $Id$ - * - * Command-line utility to transmit a server command. - * - */ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - -#include -#include -#include -#include "citadel.h" -#include "tools.h" -#include "ipc.h" -#include "server.h" -#include "dynloader.h" -#include "config.h" - -#define LOCKFILE "/tmp/LCK.sendcommand" - -/* - * make sure only one copy of sendcommand runs at a time, using lock files - */ -int set_lockfile(void) -{ - FILE *lfp; - int onppid; - - if ((lfp = fopen(LOCKFILE, "r")) != NULL) { - fscanf(lfp, "%d", &onppid); - fclose(lfp); - if (!kill(onppid, 0) || errno == EPERM) - return 1; - } - lfp = fopen(LOCKFILE, "w"); - fprintf(lfp, "%ld\n", (long) getpid()); - fclose(lfp); - return (0); -} - -void remove_lockfile(void) -{ - unlink(LOCKFILE); -} - -/* - * Why both cleanup() and nq_cleanup() ? Notice the alarm() call in - * cleanup() . If for some reason sendcommand hangs waiting for the server - * to clean up, the alarm clock goes off and the program exits anyway. - * The cleanup() routine makes a check to ensure it's not reentering, in - * case the ipc module looped it somehow. - */ -void nq_cleanup(int e) -{ - remove_lockfile(); - exit(e); -} - -void cleanup(int e) -{ - static int nested = 0; - - alarm(30); - signal(SIGALRM, nq_cleanup); - if (nested++ < 1) - serv_puts("QUIT"); - nq_cleanup(e); -} - -/* - * This is implemented as a function rather than as a macro because the - * client-side IPC modules expect logoff() to be defined. They call logoff() - * when a problem connecting or staying connected to the server occurs. - */ -void logoff(int e) -{ - cleanup(e); -} - -/* - * Connect sendcommand to the Citadel server running on this computer. - */ -void np_attach_to_server(void) -{ - char hostbuf[SIZ], portbuf[SIZ]; - char buf[SIZ]; - char *args[] = - {"sendcommand", NULL}; - - fprintf(stderr, "Attaching to server...\n"); - attach_to_server(1, args, hostbuf, portbuf); - serv_gets(buf); - fprintf(stderr, "%s\n", &buf[4]); - snprintf(buf, sizeof buf, "IPGM %d", config.c_ipgm_secret); - serv_puts(buf); - serv_gets(buf); - fprintf(stderr, "%s\n", &buf[4]); - if (buf[0] != '2') { - cleanup(2); - } -} - - - -/* - * main - */ -int main(int argc, char **argv) -{ - int a; - char cmd[SIZ]; - char buf[SIZ]; - - strcpy(bbs_home_directory, BBSDIR); - - strcpy(cmd, ""); - /* - * Change directories if specified - */ - for (a = 1; a < argc; ++a) { - if (!strncmp(argv[a], "-h", 2)) { - strcpy(bbs_home_directory, argv[a]); - strcpy(bbs_home_directory, &bbs_home_directory[2]); - home_specified = 1; - } else { - if (strlen(cmd) > 0) - strcat(cmd, " "); - strcat(cmd, argv[a]); - } - } - - get_config(); - - signal(SIGINT, cleanup); - signal(SIGQUIT, cleanup); - signal(SIGHUP, cleanup); - signal(SIGTERM, cleanup); - - fprintf(stderr, "sendcommand: started. pid=%ld\n", (long) getpid()); - fprintf(stderr, "Running from %s\n", bbs_home_directory); - fflush(stderr); - np_attach_to_server(); - fflush(stderr); - - fprintf(stderr, "%s\n", cmd); - serv_puts(cmd); - serv_gets(buf); - fprintf(stderr, "%s\n", buf); - - if (buf[0] == '1') { - while (serv_gets(buf), strcmp(buf, "000")) { - printf("%s\n", buf); - } - } else if (buf[0] == '4') { - do { - if (fgets(buf, sizeof buf, stdin) == NULL) - strcpy(buf, "000"); - if (strlen(buf) > 0) - if (buf[strlen(buf) - 1] == '\n') - buf[strlen(buf) - 1] = 0; - if (strlen(buf) > 0) - if (buf[strlen(buf) - 1] == '\r') - buf[strlen(buf) - 1] = 0; - if (strcmp(buf, "000")) - serv_puts(buf); - } while (strcmp(buf, "000")); - serv_puts("000"); - } - fprintf(stderr, "sendcommand: processing ended.\n"); - cleanup(0); - return 0; -}