From: Art Cancro Date: Mon, 17 Jul 2000 02:38:08 +0000 (+0000) Subject: * Completed serv_vandelay.c (importer/exporter module) X-Git-Tag: v7.86~7157 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=f60f2c492dd871db7f8c075be338208bf5193e6c;p=citadel.git * Completed serv_vandelay.c (importer/exporter module) * sendcommand.c: fix behavior of SEND_LISTING mode * sysdep.c: client_gets() fill buffer with "000" terminator when returning -1 --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index ac3d3d465..13fc032b3 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,9 @@ $Log$ + Revision 572.17 2000/07/17 02:38:08 ajc + * Completed serv_vandelay.c (importer/exporter module) + * sendcommand.c: fix behavior of SEND_LISTING mode + * sysdep.c: client_gets() fill buffer with "000" terminator when returning -1 + Revision 572.16 2000/07/14 03:06:55 ajc * Added .ATN (DOWN) and .ATS (SCDN 1) commands to the client @@ -1949,4 +1954,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import - diff --git a/citadel/sendcommand.c b/citadel/sendcommand.c index 7b1c4425d..b2c70005f 100644 --- a/citadel/sendcommand.c +++ b/citadel/sendcommand.c @@ -32,25 +32,27 @@ extern int home_specified; /* * make sure only one copy of sendcommand runs at a time, using lock files */ -int set_lockfile(void) { +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); + 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) { +void remove_lockfile(void) +{ unlink(LOCKFILE); - } +} /* * Why both cleanup() and nq_cleanup() ? Notice the alarm() call in @@ -63,17 +65,18 @@ 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"); + 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 @@ -83,28 +86,30 @@ void cleanup(int e) void logoff(int e) { cleanup(e); - } +} /* * Connect sendcommand to the Citadel server running on this computer. */ -void np_attach_to_server(void) { +void np_attach_to_server(void) +{ char hostbuf[256], portbuf[256]; char buf[256]; - char *args[] = { "sendcommand", NULL } ; + 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]); - sprintf(buf,"IPGM %d", config.c_ipgm_secret); + 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') { + fprintf(stderr, "%s\n", &buf[4]); + if (buf[0] != '2') { cleanup(2); - } } +} @@ -123,26 +128,26 @@ int main(int argc, char **argv) /* * Change directories if specified */ - for (a=1; a0) strcat(cmd, " "); + } 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); + signal(SIGINT, cleanup); + signal(SIGQUIT, cleanup); + signal(SIGHUP, cleanup); + signal(SIGTERM, cleanup); - fprintf(stderr, "sendcommand: started. pid=%ld\n",(long)getpid()); + fprintf(stderr, "sendcommand: started. pid=%ld\n", (long) getpid()); fflush(stderr); np_attach_to_server(); fflush(stderr); @@ -152,26 +157,26 @@ int main(int argc, char **argv) serv_gets(buf); fprintf(stderr, "%s\n", buf); - if (buf[0]=='1') { + if (buf[0] == '1') { while (serv_gets(buf), strcmp(buf, "000")) { printf("%s\n", buf); - } } - else if (buf[0]=='4') { + } else if (buf[0] == '4') { do { - if (fgets(buf, 255, 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")); + if (fgets(buf, 255, 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; - } +} diff --git a/citadel/serv_vandelay.c b/citadel/serv_vandelay.c index f2c9e5c77..7c5dac0d2 100644 --- a/citadel/serv_vandelay.c +++ b/citadel/serv_vandelay.c @@ -227,7 +227,9 @@ void artv_export_messages(void) { void artv_do_export(void) { - cprintf("%d Yikes.\n", LISTING_FOLLOWS); + cprintf("%d Exporting all Citadel databases.\n", LISTING_FOLLOWS); + + cprintf("version\n%d\n", REV_LEVEL); /* export the config file */ cprintf("config\n"); @@ -313,6 +315,7 @@ void artv_import_config(void) { client_gets(buf); config.c_maxsessions = atoi(buf); client_gets(config.c_net_password); client_gets(buf); config.c_port_number = atoi(buf); + client_gets(buf); config.c_ipgm_secret = atoi(buf); client_gets(buf); config.c_ep.expire_mode = atoi(buf); client_gets(buf); config.c_ep.expire_value = atoi(buf); client_gets(buf); config.c_userpurge = atoi(buf); @@ -450,6 +453,7 @@ void artv_import_message(void) { client_gets(smi.smi_content_type); client_gets(buf); smi.smi_mod = atoi(buf); + lprintf(7, "message #%ld\n", msgnum); /* decode base64 message text */ strcpy(tempfile, tmpnam(NULL)); @@ -458,8 +462,12 @@ void artv_import_message(void) { while (client_gets(buf), strcasecmp(buf, END_OF_MESSAGE)) { fprintf(fp, "%s\n", buf); } + fclose(fp); + fp = fopen(tempfile, "rb"); + fseek(fp, 0L, SEEK_END); msglen = ftell(fp); fclose(fp); + lprintf(9, "msglen = %ld\n", msglen); mbuf = mallok(msglen); fp = fopen(tempfile, "rb"); @@ -482,13 +490,23 @@ void artv_import_message(void) { void artv_do_import(void) { char buf[256]; + char s_version[256]; + int version; cprintf("%d sock it to me\n", SEND_LISTING); while (client_gets(buf), strcmp(buf, "000")) { lprintf(9, "import keyword: <%s>\n", buf); - if (!strcasecmp(buf, "config")) artv_import_config(); + if (!strcasecmp(buf, "version")) { + client_gets(s_version); + version = atoi(s_version); + if ((version < REV_MIN) || (version > REV_LEVEL)) { + lprintf(7, "Version mismatch - aborting\n"); + goto artv_flush_import; + } + } + else if (!strcasecmp(buf, "config")) artv_import_config(); else if (!strcasecmp(buf, "control")) artv_import_control(); else if (!strcasecmp(buf, "user")) artv_import_user(); else if (!strcasecmp(buf, "room")) artv_import_room(); diff --git a/citadel/sysdep.c b/citadel/sysdep.c index 4e6978ab9..579b84727 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -289,11 +289,13 @@ int ig_tcp_server(int port_number, int queue_len) if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) { lprintf(1, "citserver: Can't bind: %s\n", strerror(errno)); + close(s); return(-1); } if (listen(s, queue_len) < 0) { lprintf(1, "citserver: Can't listen: %s\n", strerror(errno)); + close(s); return(-1); } @@ -530,7 +532,7 @@ int client_gets(char *buf) buf[i] = 0; while ((strlen(buf)>0)&&(!isprint(buf[strlen(buf)-1]))) buf[strlen(buf)-1] = 0; - lprintf(9, "client_gets(%s)\n", buf); + if (retval < 0) strcpy(buf, "000"); return(retval); }