X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Futils%2Fsendcommand.c;h=a77c8a8eb4ef390ff401ae468a8699d01e2ec659;hb=7a65130ea2a5be56603233ba7b8d230691f604a0;hp=e9e5fbcd639a56dbece398927634d6418f4f0514;hpb=e94bdae14683fd1581f905365fe6eb3b94e90d21;p=citadel.git diff --git a/citadel/utils/sendcommand.c b/citadel/utils/sendcommand.c index e9e5fbcd6..a77c8a8eb 100644 --- a/citadel/utils/sendcommand.c +++ b/citadel/utils/sendcommand.c @@ -1,7 +1,7 @@ /* * Command-line utility to transmit a server command. * - * Copyright (c) 1987-2012 by the citadel.org team + * Copyright (c) 1987-2021 by the citadel.org team * * 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. @@ -12,6 +12,7 @@ * GNU General Public License for more details. */ +#include #include #include #include @@ -26,12 +27,11 @@ #include #include #include "citadel.h" - - +#include "citadel_dirs.h" +#include int serv_sock = (-1); - int uds_connectsock(char *sockpath) { int s; @@ -92,7 +92,6 @@ void serv_write(char *buf, int nbytes) } - /* * input string from socket - implemented in terms of serv_read() */ @@ -132,8 +131,6 @@ void serv_puts(char *buf) } - - /* * Main loop. Do things and have fun. */ @@ -141,34 +138,44 @@ int main(int argc, char **argv) { int a; int watchdog = 60; - char *ctdl_home_directory = CTDLDIR; char buf[SIZ]; int xfermode = 0; + int relh=0; + int home=0; + char relhome[PATH_MAX]=""; + char ctdldir[PATH_MAX]=CTDLDIR; + + StartLibCitadel(SIZ); /* Parse command line */ while ((a = getopt(argc, argv, "h:w:")) != EOF) { switch (a) { case 'h': - ctdl_home_directory = strdup(optarg); + relh=optarg[0]!='/'; + if (!relh) { + strncpy(ctdl_home_directory, optarg, sizeof ctdl_home_directory); + } else { + strncpy(relhome, optarg, sizeof relhome); + } + home = 1; break; case 'w': watchdog = atoi(optarg); + break; default: fprintf(stderr, "sendcommand: usage: sendcommand [-h server_dir] [-w watchdog_timeout]\n"); return(1); } } - fprintf(stderr, "sendcommand: started (pid=%d) connecting to Citadel server in %s\n", + fprintf(stderr, "sendcommand: started (pid=%d) connecting to Citadel server at %s\n", (int) getpid(), - ctdl_home_directory + file_citadel_admin_socket ); fflush(stderr); alarm(watchdog); - snprintf(buf, sizeof buf, "%s/citadel-admin.socket", ctdl_home_directory); - serv_sock = uds_connectsock(buf); - + serv_sock = uds_connectsock(file_citadel_admin_socket); serv_gets(buf); fprintf(stderr, "%s\n", buf); @@ -188,18 +195,18 @@ int main(int argc, char **argv) xfermode = buf[0]; if ((xfermode == '4') || (xfermode == '8')) { /* send text */ - while (fgets(buf, sizeof buf, stdin)) { - buf[strlen(buf)-1] = 0; + while (fgets(buf, sizeof buf, stdin) > 0) { + if (buf[strlen(buf)-1] == '\n') { + buf[strlen(buf)-1] = 0; + } serv_puts(buf); - alarm(watchdog); /* reset the watchdog timer */ } serv_puts("000"); } if ((xfermode == '1') || (xfermode == '8')) { /* receive text */ - while (serv_gets(buf), strcmp(buf, "000")) { + while(serv_gets(buf), strcmp(buf, "000")) { printf("%s\n", buf); - alarm(watchdog); /* reset the watchdog timer */ } }