X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fsendcommand.c;h=bd87ff3b48cf3be2f5c251cfb3afd5ddb0a17e3e;hb=HEAD;hp=87e56037f14edb8a2c0824bfa97f101f1b35ca27;hpb=c5dcefbe1b55c201cb1ed948d859c1c1ff6ab51b;p=citadel.git diff --git a/citadel/sendcommand.c b/citadel/sendcommand.c deleted file mode 100644 index 87e56037f..000000000 --- a/citadel/sendcommand.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * $Id$ - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "citadel.h" -#include "tools.h" -#include "ipc.h" -#include "config.h" - -#define LOCKFILE "/var/lock/LCK.sendcommand" - -struct config config; -extern int home_specified; - - -/* - * 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 buf[256]; - char portname[8]; - char *args[] = { "sendcommand", "localhost", NULL, NULL } ; - - fprintf(stderr, "Attaching to server...\n"); - sprintf(portname, "%d", config.c_port_number); - args[2] = portname; - attach_to_server(3, args); - serv_gets(buf); - fprintf(stderr, "%s\n",&buf[4]); - sprintf(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[256]; - char buf[256]; - - strcpy(bbs_home_directory, BBSDIR); - - strcpy(cmd, ""); - /* - * Change directories if specified - */ - for (a=1; a0) 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()); - 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, 255, stdin)==NULL) strcpy(buf, "000"); - if (strcmp(buf, "000")) serv_puts(buf); - } while (strcmp(buf, "000")); - } - - fprintf(stderr, "sendcommand: processing ended.\n"); - cleanup(0); - return 0; - }