X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Futils%2Fsendcommand.c;h=71764bcbbbce69e2a84edf081ca5860dd52b15e7;hb=57b37d4ed168b176d594bc149e5d16a1b9f0517a;hp=52d05258da58e69da24eb60a8f285ea842e9d2e6;hpb=613aa4c10d0ec1928a5e5b90b6381b2098612f09;p=citadel.git diff --git a/citadel/utils/sendcommand.c b/citadel/utils/sendcommand.c index 52d05258d..71764bcbb 100644 --- a/citadel/utils/sendcommand.c +++ b/citadel/utils/sendcommand.c @@ -1,21 +1,15 @@ /* * Command-line utility to transmit a server command. * - * Copyright (c) 1987-2010 by the citadel.org team + * Copyright (c) 1987-2012 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ctdl_module.h" @@ -49,36 +43,8 @@ #include "server.h" #include "config.h" -#define LOCKFILE "/tmp/LCK.sendcommand" - static CtdlIPC *ipc = NULL; -/* - * make sure only one copy of sendcommand runs at a time, using lock files - */ -int set_lockfile(void) -{ - FILE *lfp; - int onppid; - int rv; - - if ((lfp = fopen(LOCKFILE, "r")) != NULL) { - rv = 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 @@ -90,7 +56,6 @@ void nq_cleanup(int e) { if (e == SIGALRM) fprintf(stderr, "\nWatch dog time out.\n"); - remove_lockfile(); exit(e); } @@ -100,15 +65,8 @@ void nq_cleanup(int e) void serv_write(CtdlIPC *ipc, const char *buf, unsigned int nbytes) { unsigned int bytes_written = 0; - int retval; -/* -#if defined(HAVE_OPENSSL) - if (ipc->ssl) { - serv_write_ssl(ipc, buf, nbytes); - return; - } -#endif -*/ + int retval = 0; + while (bytes_written < nbytes) { retval = write(ipc->sock, &buf[bytes_written], nbytes - bytes_written); @@ -127,8 +85,12 @@ void cleanup(int e) alarm(30); signal(SIGALRM, nq_cleanup); - serv_write(ipc, "\n", 1); - if (nested++ < 1) + if ((ipc != NULL) && + (ipc->sock > 0)) + serv_write(ipc, "\n", 1); + if ((nested++ < 1) && + (ipc != NULL) && + (ipc->sock > 0)) CtdlIPCQuit(ipc); nq_cleanup(e); } @@ -204,19 +166,19 @@ int main(int argc, char **argv) for (a = 1; a < argc; ++a) { if (!strncmp(argv[a], "-h", 2)) { relh=argv[a][2]!='/'; - if (!relh) safestrncpy(ctdl_home_directory, &argv[a][2], - sizeof ctdl_home_directory); - else - safestrncpy(relhome, &argv[a][2], - sizeof relhome); + if (!relh) safestrncpy(ctdl_home_directory, &argv[a][2], sizeof ctdl_home_directory); + else { + safestrncpy(relhome, &argv[a][2], sizeof relhome); + } home=1; } else if (!strncmp(argv[a], "-w", 2)) { watchdog = atoi(&argv[a][2]); if (watchdog<1) watchdog=1; } else { - if (!IsEmptyStr(cmd)) + if (!IsEmptyStr(cmd)) { strcat(cmd, " "); + } strcat(cmd, argv[a]); } }