From: Art Cancro Date: Tue, 1 Dec 1998 00:49:22 +0000 (+0000) Subject: * sendcommand.c: added X-Git-Tag: v7.86~8096 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=929d8fd569c7255523f384548ef8323d0fb130b5;p=citadel.git * sendcommand.c: added --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 2167fc00b..725d6b6ae 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,7 +1,10 @@ +Mon Nov 30 19:48:52 EST 1998 Art Cancro + * room_ops.c: added sort_msglist() to move and save operations + * sendcommand.c: added + Sun Nov 29 23:57:39 EST 1998 Art Cancro * Fixed cmd_regi() to not display a second result code after xfer * Makefile.in: Removed "chmod 4755 citmail netmailer" - * room_ops.c: added sort_msglist() to move and save operations 1998-11-23 Nathan Bryant * citadel.spec: added diff --git a/citadel/Makefile.in b/citadel/Makefile.in index 3af7846a2..3158d004b 100644 --- a/citadel/Makefile.in +++ b/citadel/Makefile.in @@ -21,7 +21,7 @@ SERVER_TARGETS=citserver setup SERV_MODULES=modules/serv_chat.so modules/serv_test.so \ modules/serv_upgrade.so modules/serv_expire.so UTIL_TARGETS=aidepost netmailer netproc netsetup msgform \ - readlog rcit stats citmail netpoll mailinglist userlist + readlog rcit stats citmail netpoll mailinglist userlist sendcommand PROXY_TARGETS=proxy prefix=@prefix@ @@ -55,7 +55,7 @@ SOURCES=aidepost.c citadel.c citmail.c citserver.c client_chat.c commands.c \ room_ops.c rooms.c routines.c routines2.c serv_chat.c \ serv_info.c serv_test.c serv_upgrade.c setup.c snprintf.c stats.c \ support.c sysdep.c tools.c user_ops.c userlist.c serv_expire.c \ - whobbs.c + whobbs.c sendcommand.c DEP_FILES=$(SOURCES:.c=.d) @@ -153,6 +153,10 @@ proxy: proxy.o ipc_c_tcp.o whobbs: whobbs.o ipc_c_tcp.o tools.o $(SNPRINTF) $(CC) whobbs.o ipc_c_tcp.o tools.o $(SNPRINTF) $(LDFLAGS) -o whobbs +sendcommand: sendcommand.o ipc_c_tcp.o tools.o $(SNPRINTF) + $(CC) sendcommand.o ipc_c_tcp.o tools.o $(SNPRINTF) $(LDFLAGS) \ + -o sendcommand + userlist: userlist.o ipc_c_tcp.o tools.o $(SNPRINTF) $(CC) userlist.o ipc_c_tcp.o tools.o \ $(SNPRINTF) $(LDFLAGS) -o userlist diff --git a/citadel/TODO b/citadel/TODO index 91fbcf98e..de10d9f74 100644 --- a/citadel/TODO +++ b/citadel/TODO @@ -1,7 +1,6 @@ Citadel/UX v5.50 showstoppers list ---------------------------------- * Figure out a way to auto-launch expire functions (and other functions) -* Re-establish the sorting of msglists in target room when messages move Other things that might be nice to take care of: ------------------------------------------------ diff --git a/citadel/sendcommand.c b/citadel/sendcommand.c new file mode 100644 index 000000000..6658bc7a5 --- /dev/null +++ b/citadel/sendcommand.c @@ -0,0 +1,156 @@ +/* + * $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,"%d\n",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; a */ - if (!(CC->logged_in)) { + if ((!(CC->logged_in))&&(!(CC->internal_pgm))) { cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN); return; }