#include "ctdlsh.h"
-int show_full_config(int server_socket) {
+int show_full_config(int server_socket)
+{
char buf[1024];
- sock_puts(server_socket, "CONF listval");
- sock_getln(server_socket, buf, sizeof buf);
+ sock_puts(server_socket, "CONF listval");
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '1') {
- printf("%s\n", &buf[4]);
- return(cmdret_error);
+ printf("%s\n", &buf[4]);
+ return (cmdret_error);
}
- while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
+ while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
char *val = NULL;
char *p = strchr(buf, '|');
if (p != NULL) {
printf("%-30s = %s\n", buf, val);
}
- return(cmdret_ok);
+ return (cmdret_ok);
}
-int show_single_config(int server_socket, char *keyname) {
+int show_single_config(int server_socket, char *keyname)
+{
char buf[1024];
sock_printf(server_socket, "CONF getval|%s\n", keyname);
- sock_getln(server_socket, buf, sizeof buf);
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] == '2') {
char *v = &buf[4];
char *t = NULL;
- while(t = strrchr(v, '|'), t!=NULL) t[0]=0;
+ while (t = strrchr(v, '|'), t != NULL)
+ t[0] = 0;
printf("%-30s = %s\n", keyname, v);
- return(cmdret_ok);
- }
- else {
+ return (cmdret_ok);
+ } else {
printf("\n");
- return(cmdret_error);
+ return (cmdret_error);
}
}
-int set_single_config(int server_socket, char *keyname, char *val) {
+int set_single_config(int server_socket, char *keyname, char *val)
+{
char buf[1024];
sock_printf(server_socket, "CONF putval|%s|%s\n", keyname, val);
- sock_getln(server_socket, buf, sizeof buf);
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
printf("%s\n", buf);
- return(cmdret_error);
+ return (cmdret_error);
}
- return(show_single_config(server_socket, keyname));
+ return (show_single_config(server_socket, keyname));
}
-int cmd_config(int server_socket, char *cmdbuf) {
+int cmd_config(int server_socket, char *cmdbuf)
+{
char buf[4096];
strncpy(buf, cmdbuf, sizeof buf);
return show_full_config(server_socket);
}
- while (k[0]==' ') ++k;
+ while (k[0] == ' ')
+ ++k;
if (strlen(k) == 0) {
return show_full_config(server_socket);
printf("config ? Display this message\n");
printf("config [key] Print value of configuration key 'key'\n");
printf("config [key] [value] Set configuration key 'key' to 'value'\n");
- return(cmdret_ok);
+ return (cmdret_ok);
}
char *v = strchr(k, ' ');
v[0] = 0;
++v;
- while (v[0]==' ') ++v;
+ while (v[0] == ' ')
+ ++v;
if (strlen(v) == 0) {
return show_single_config(server_socket, k);
#include "ctdlsh.h"
-int cmd_datetime(int server_socket, char *cmdbuf) {
+int cmd_datetime(int server_socket, char *cmdbuf)
+{
char buf[1024];
time_t now;
sock_getln(server_socket, buf, sizeof buf);
now = atol(&buf[4]);
printf("%s", asctime(localtime(&now)));
- return(cmdret_ok);
+ return (cmdret_ok);
}
-
-
-
-
#include "ctdlsh.h"
-int cmd_export(int server_socket, char *cmdbuf) {
+int cmd_export(int server_socket, char *cmdbuf)
+{
char buf[1024];
char export_file_name[1024];
if (buf[0] != '1') {
fprintf(stderr, "%s\n", &buf[4]);
- return(cmdret_error);
+ return (cmdret_error);
}
while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
- return(cmdret_ok);
+ return (cmdret_ok);
}
-
-
-
-
#include "ctdlsh.h"
-void mailq_show_this_queue_entry(StrBuf *MsgText) {
- const char *Pos = NULL;
+void mailq_show_this_queue_entry(StrBuf * MsgText)
+{
+ const char *Pos = NULL;
StrBuf *Line = NewStrBuf();
int sip = 0;
- do {
+ do {
sip = StrBufSipLine(Line, MsgText, &Pos);
if (!strncasecmp(ChrPtr(Line), HKEY("msgid|"))) {
- printf("Message %ld:\n", atol(ChrPtr(Line)+6));
- }
- else if (!strncasecmp(ChrPtr(Line), HKEY("submitted|"))) {
- time_t submitted = atol(ChrPtr(Line)+10);
+ printf("Message %ld:\n", atol(ChrPtr(Line) + 6));
+ } else if (!strncasecmp(ChrPtr(Line), HKEY("submitted|"))) {
+ time_t submitted = atol(ChrPtr(Line) + 10);
printf("Originally submitted: %s", asctime(localtime(&submitted)));
- }
- else if (!strncasecmp(ChrPtr(Line), HKEY("attempted|"))) {
- time_t attempted = atol(ChrPtr(Line)+10);
+ } else if (!strncasecmp(ChrPtr(Line), HKEY("attempted|"))) {
+ time_t attempted = atol(ChrPtr(Line) + 10);
printf("Last delivery attempt: %s", asctime(localtime(&attempted)));
+ } else if (!strncasecmp(ChrPtr(Line), HKEY("bounceto|"))) {
+ printf("Sender: %s\n", ChrPtr(Line) + 9);
+ } else if (!strncasecmp(ChrPtr(Line), HKEY("remote|"))) {
+ printf("Recipient: %s\n", ChrPtr(Line) + 7);
}
- else if (!strncasecmp(ChrPtr(Line), HKEY("bounceto|"))) {
- printf("Sender: %s\n", ChrPtr(Line)+9);
- }
- else if (!strncasecmp(ChrPtr(Line), HKEY("remote|"))) {
- printf("Recipient: %s\n", ChrPtr(Line)+7);
- }
- } while(sip);
+ } while (sip);
FreeStrBuf(&Line);
printf("\n");
}
-int cmd_mailq(int server_socket, char *cmdbuf) {
+int cmd_mailq(int server_socket, char *cmdbuf)
+{
char buf[1024];
long *msgs = NULL;
int num_msgs = 0;
int i;
StrBuf *MsgText;
- sock_puts(server_socket, "GOTO __CitadelSMTPspoolout__");
- sock_getln(server_socket, buf, sizeof buf);
+ sock_puts(server_socket, "GOTO __CitadelSMTPspoolout__");
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
printf("%s\n", &buf[4]);
- return(cmdret_error);
+ return (cmdret_error);
}
- sock_puts(server_socket, "MSGS ALL");
- sock_getln(server_socket, buf, sizeof buf);
+ sock_puts(server_socket, "MSGS ALL");
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '1') {
printf("%s\n", &buf[4]);
- return(cmdret_error);
+ return (cmdret_error);
}
MsgText = NewStrBuf();
- while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
+ while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
if (num_alloc == 0) {
num_alloc = 100;
msgs = malloc(num_alloc * sizeof(long));
- }
- else if (num_msgs >= num_alloc) {
+ } else if (num_msgs >= num_alloc) {
num_alloc *= 2;
msgs = realloc(msgs, num_alloc * sizeof(long));
}
msgs[num_msgs++] = atol(buf);
}
- for (i=0; i<num_msgs; ++i) {
+ for (i = 0; i < num_msgs; ++i) {
sock_printf(server_socket, "MSG2 %ld\n", msgs[i]);
- sock_getln(server_socket, buf, sizeof buf);
+ sock_getln(server_socket, buf, sizeof buf);
if (buf[0] == '1') {
FlushStrBuf(MsgText);
- while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
+ while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
StrBufAppendPrintf(MsgText, "%s\n", buf);
}
- if (bmstrcasestr((char *)ChrPtr(MsgText), "\nContent-type: application/x-citadel-delivery-list") != NULL) {
+ if (bmstrcasestr((char *) ChrPtr(MsgText), "\nContent-type: application/x-citadel-delivery-list") != NULL) {
mailq_show_this_queue_entry(MsgText);
}
}
free(msgs);
}
FreeStrBuf(&MsgText);
- return(cmdret_ok);
+ return (cmdret_ok);
}
#include "ctdlsh.h"
-int cmd_quit(int sock, char *cmdbuf) {
- return(cmdret_exit);
+int cmd_quit(int sock, char *cmdbuf)
+{
+ return (cmdret_exit);
}
} COMMAND;
COMMAND commands[] = {
- { "?", cmd_help, "Display this message" },
- { "help", cmd_help, "Display this message" },
- { "date", cmd_datetime, "Print the server's date and time" },
- { "config", cmd_config, "Configure the Citadel server" },
- { "export", cmd_export, "Export all Citadel databases" },
- { "shutdown", cmd_shutdown, "Shut down the Citadel server" },
- { "time", cmd_datetime, "Print the server's date and time" },
- { "passwd", cmd_passwd, "Set or change an account password" },
- { "who", cmd_who, "Display a list of online users" },
- { "exit", cmd_quit, "Quit using ctdlsh" },
- { "quit", cmd_quit, "Quit using ctdlsh" },
- { "mailq", cmd_mailq, "Show the outbound email queue" },
- { NULL, NULL, NULL }
+ {"?", cmd_help, "Display this message"},
+ {"help", cmd_help, "Display this message"},
+ {"date", cmd_datetime, "Print the server's date and time"},
+ {"config", cmd_config, "Configure the Citadel server"},
+ {"export", cmd_export, "Export all Citadel databases"},
+ {"shutdown", cmd_shutdown, "Shut down the Citadel server"},
+ {"time", cmd_datetime, "Print the server's date and time"},
+ {"passwd", cmd_passwd, "Set or change an account password"},
+ {"who", cmd_who, "Display a list of online users"},
+ {"exit", cmd_quit, "Quit using ctdlsh"},
+ {"quit", cmd_quit, "Quit using ctdlsh"},
+ {"mailq", cmd_mailq, "Show the outbound email queue"},
+ {NULL, NULL, NULL}
};
-int cmd_help(int sock, char *cmdbuf) {
+int cmd_help(int sock, char *cmdbuf)
+{
int i;
- for (i=0; commands[i].func != NULL; ++i) {
+ for (i = 0; commands[i].func != NULL; ++i) {
printf("%-10s %s\n", commands[i].name, commands[i].doc);
}
}
/* Auto-completer function */
-char *command_generator(const char *text, int state) {
+char *command_generator(const char *text, int state)
+{
static int list_index;
static int len;
char *name;
++list_index;
if (!strncmp(name, text, len)) {
- return(strdup(name));
+ return (strdup(name));
}
}
- return(NULL);
+ return (NULL);
}
/* Auto-completer function */
-char **ctdlsh_completion(const char *text, int start, int end) {
+char **ctdlsh_completion(const char *text, int start, int end)
+{
char **matches = (char **) NULL;
rl_completer_word_break_characters = " ";
if (start == 0) {
matches = rl_completion_matches(text, command_generator);
- }
- else {
+ } else {
rl_bind_key('\t', rl_abort);
}
}
-int do_one_command(int server_socket, char *cmd) {
+int do_one_command(int server_socket, char *cmd)
+{
int i;
int ret;
- for (i=0; commands[i].func != NULL; ++i) {
+ for (i = 0; commands[i].func != NULL; ++i) {
if (!strncasecmp(cmd, commands[i].name, strlen(commands[i].name))) {
ret = (*commands[i].func) (server_socket, cmd);
}
}
-void do_main_loop(int server_socket) {
+void do_main_loop(int server_socket)
+{
char *cmd = NULL;
char prompt[1024];
char buf[1024];
sock_getln(server_socket, buf, sizeof buf);
if (buf[0] == '1') {
i = 0;
- while(sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
+ while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
if (i == 1) {
sprintf(prompt, "\n%s> ", buf);
}
ret = do_one_command(server_socket, cmd);
//for (i=0; commands[i].func != NULL; ++i) {
- //if (!strncasecmp(cmd, commands[i].name, strlen(commands[i].name))) {
- //ret = (*commands[i].func) (server_socket, cmd);
- //}
+ //if (!strncasecmp(cmd, commands[i].name, strlen(commands[i].name))) {
+ //ret = (*commands[i].func) (server_socket, cmd);
+ //}
//}
}
char buf[1024];
int i;
char *ctdldir = CTDLDIR;
- char cmd[1024] = { 0 } ;
+ char cmd[1024] = { 0 };
int exitcode = 0;
- for (i=1; i<argc; ++i) {
+ for (i = 1; i < argc; ++i) {
if (!strcmp(argv[i], "-h")) {
ctdldir = argv[++i];
- }
- else {
+ } else {
if (strlen(cmd) > 0) {
strcat(cmd, " ");
}
if (is_interactive) {
printf("\nCitadel administration shell (c) 2009-2017 by citadel.org\n"
- "This is open source software made available to you under the terms\n"
- "of the GNU General Public License v3. All other rights reserved.\n"
- );
+ "This is open source software made available to you under the terms\n"
+ "of the GNU General Public License v3. All other rights reserved.\n");
printf("Trying %s...\n", ctdldir);
}
if (is_interactive) {
printf("Connected: %s\n", buf);
do_main_loop(server_socket);
- }
- else {
+ } else {
exitcode = do_one_command(server_socket, cmd);
}
}
#include "ctdlsh.h"
-int cmd_passwd(int server_socket, char *cmdbuf) {
+int cmd_passwd(int server_socket, char *cmdbuf)
+{
char buf[1024];
time_t now;
char account_name[1024];
sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
fprintf(stderr, "No such user.\n");
- return(cmdret_error);
+ return (cmdret_error);
}
p1 = readline("Enter new password: ");
p2 = readline("Enter it again: ");
if (strcmp(p1, p2)) {
- fprintf(stderr, "The passwords you entered do not match."
- "The account password remains unchanged.\n"
- );
- return(cmdret_error);
+ fprintf(stderr, "The passwords you entered do not match." "The account password remains unchanged.\n");
+ return (cmdret_error);
}
sock_printf(server_socket, "ASUP %s|%s\n", account_name, p2);
sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
fprintf(stderr, "%s\n", &buf[4]);
- return(cmdret_error);
+ return (cmdret_error);
}
printf("Password has been changed.\n");
- return(cmdret_ok);
+ return (cmdret_ok);
}
-
-
-
-
#include "ctdlsh.h"
-int cmd_shutdown(int server_socket, char *cmdbuf) {
+int cmd_shutdown(int server_socket, char *cmdbuf)
+{
char buf[1024];
char *p1 = readline("Do you really want to shut down the Citadel server? ");
if (strncasecmp(p1, "y", 1)) {
- return(cmdret_ok);
+ return (cmdret_ok);
}
sock_puts("DOWN");
sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
fprintf(stderr, "%s\n", &buf[4]);
- return(cmdret_error);
+ return (cmdret_error);
}
fprintf(stderr, "%s\n", &buf[4]);
- return(cmdret_ok);
+ return (cmdret_ok);
}
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s < 0) {
fprintf(stderr, "Can't create socket[%s]: %s\n", sockpath, strerror(errno));
- return(-1);
+ return (-1);
}
if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
fprintf(stderr, "Can't connect [%s]: %s\n", sockpath, strerror(errno));
close(s);
- return(-1);
+ return (-1);
}
return s;
*/
int sock_read_to(int sock, char *buf, int bytes, int timeout, int keep_reading_until_full)
{
- int len,rlen;
+ int len, rlen;
fd_set rfds;
struct timeval tv;
int retval;
len = 0;
- while (len<bytes) {
+ while (len < bytes) {
FD_ZERO(&rfds);
FD_SET(sock, &rfds);
tv.tv_sec = timeout;
tv.tv_usec = 0;
- retval = select(sock+1, &rfds, NULL, NULL, &tv);
+ retval = select(sock + 1, &rfds, NULL, NULL, &tv);
if (FD_ISSET(sock, &rfds) == 0) { /* timed out */
fprintf(stderr, "sock_read() timed out.\n");
- return(-1);
+ return (-1);
}
- rlen = read(sock, &buf[len], bytes-len);
- if (rlen<1) {
- fprintf(stderr, "sock_read() failed: %s\n",
- strerror(errno));
- return(-1);
+ rlen = read(sock, &buf[len], bytes - len);
+ if (rlen < 1) {
+ fprintf(stderr, "sock_read() failed: %s\n", strerror(errno));
+ return (-1);
}
len = len + rlen;
- if (!keep_reading_until_full) return(len);
+ if (!keep_reading_until_full)
+ return (len);
}
- return(bytes);
+ return (bytes);
}
int bytes_written = 0;
int retval;
while (bytes_written < nbytes) {
- retval = write(sock, &buf[bytes_written],
- nbytes - bytes_written);
+ retval = write(sock, &buf[bytes_written], nbytes - bytes_written);
if (retval < 1) {
return (-1);
}
/* Read one character at a time.
*/
for (i = 0;; i++) {
- if (sock_read(sock, &buf[i], 1, 1) < 0) return(-1);
- if (buf[i] == '\n' || i == (bufsize-1))
+ if (sock_read(sock, &buf[i], 1, 1) < 0)
+ return (-1);
+ if (buf[i] == '\n' || i == (bufsize - 1))
break;
}
/* If we got a long line, discard characters until the newline.
*/
- if (i == (bufsize-1))
+ if (i == (bufsize - 1))
while (buf[i] != '\n')
- if (sock_read(sock, &buf[i], 1, 1) < 0) return(-1);
+ if (sock_read(sock, &buf[i], 1, 1) < 0)
+ return (-1);
/* Strip any trailing CR and LF characters.
*/
buf[i] = 0;
- while ( (i > 0)
- && ( (buf[i - 1]==13)
- || ( buf[i - 1]==10)) ) {
+ while ((i > 0)
+ && ((buf[i - 1] == 13)
+ || (buf[i - 1] == 10))) {
i--;
buf[i] = 0;
}
- return(i);
+ return (i);
}
int i, j;
i = sock_write(sock, buf, strlen(buf));
- if (i<0) return(i);
+ if (i < 0)
+ return (i);
j = sock_write(sock, "\n", 1);
- if (j<0) return(j);
- return(i+j);
+ if (j < 0)
+ return (j);
+ return (i + j);
}
/*
* Write a formatted string to the server - implemented in terms of sock_write()
*/
-void sock_printf(int sock, const char *format,...)
+void sock_printf(int sock, const char *format, ...)
{
va_list arg_ptr;
char buf[4096];
#include "ctdlsh.h"
-int cmd_who(int server_socket, char *cmdbuf) {
+int cmd_who(int server_socket, char *cmdbuf)
+{
char buf[1024];
char *t = NULL;
- sock_puts(server_socket, "RWHO");
- sock_getln(server_socket, buf, sizeof buf);
- printf("%s\n", &buf[4]);
+ sock_puts(server_socket, "RWHO");
+ sock_getln(server_socket, buf, sizeof buf);
+ printf("%s\n", &buf[4]);
if (buf[0] != '1') {
- return(cmdret_error);
+ return (cmdret_error);
}
- printf( "Session User name Room From host\n");
- printf( "------- ------------------------- ------------------- ------------------------\n");
+ printf("Session User name Room From host\n");
+ printf("------- ------------------------- ------------------- ------------------------\n");
- while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
+ while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) {
//7872|Dampfklon| |p5DE44943.dip.t-dialin.net||1330016445|CHEK|.||||1
- t = strtok(buf, "|"); /* session number */
+ t = strtok(buf, "|"); /* session number */
printf("%-7d ", atoi(t));
t = strtok(NULL, "|");
- printf("%-26s", t); /* user name */
+ printf("%-26s", t); /* user name */
- t = strtok(NULL, "|"); /* room name */
+ t = strtok(NULL, "|"); /* room name */
printf("%-19s ", t);
- t = strtok(NULL, "|"); /* from host */
+ t = strtok(NULL, "|"); /* from host */
printf("%-24s\n", t);
}
- return(cmdret_ok);
+ return (cmdret_ok);
}