if you request support for the program, you will be told to die in a
car fire.
+This is open source software. It runs really well on the Linux operating
+system. We reject Richard Stallman's linguistic fascism and so should you.
+
+/*
+ * main header file for ctdlsh
+ *
+ * Copyright (c) 2009-2012 by the citadel.org team
+ * This program is open source software, cheerfully made available to
+ * you under the terms of the GNU General Public License version 3.
+ */
+
#include <config.h>
#include <stdlib.h>
#include <unistd.h>
*/
#define CTDLDIR "/appl/citadel"
-/*
- * This is a small subset of 'struct config' ... don't worry about the rest; we
- * only need to snarf the c_ipgm_secret.
- */
-struct partial_config {
- char c_nodename[16]; /* Unqualified "short" nodename */
- char c_fqdn[64]; /* Fully Qualified Domain Name */
- char c_humannode[21]; /* Long name of system */
- char c_phonenum[16]; /* Dialup number of system */
- uid_t c_ctdluid; /* UID under which we run Citadel */
- char c_creataide; /* room creator = room aide flag */
- int c_sleeping; /* watchdog timer setting */
- char c_initax; /* initial access level */
- char c_regiscall; /* call number to register on */
- char c_twitdetect; /* twit detect flag */
- char c_twitroom[128]; /* twit detect msg move to room */
- char c_moreprompt[80]; /* paginator prompt */
- char c_restrict; /* restrict Internet mail flag */
- long c_niu_1; /* (not in use) */
- char c_site_location[32]; /* physical location of server */
- char c_sysadm[26]; /* name of system administrator */
- char c_niu_2[15]; /* (not in use) */
- int c_setup_level; /* what rev level we've setup to */
- int c_maxsessions; /* maximum concurrent sessions */
- char c_ip_addr[20]; /* IP address to listen on */
- int c_port_number; /* Cit listener port (usually 504) */
- int c_ipgm_secret; /* Internal program authentication */
-};
-
typedef int ctdlsh_cmdfunc_t(int, char *);
enum ctdlsh_cmdfunc_return_values {
/*
* (c) 2009-2011 by Art Cancro and citadel.org
- * This program is released under the terms of the GNU General Public License v3.
+ * This program is open source software, released under the terms of the GNU General Public License v3.
+ * It runs really well on the Linux operating system.
+ * We love open source software but reject Richard Stallman's linguistic fascism.
*/
#include "ctdlsh.h"
/*
- * (c) 2009-2011 by Art Cancro and citadel.org
+ * (c) 2009-2012 by Art Cancro and citadel.org
* This program is released under the terms of the GNU General Public License v3.
*/
#include "ctdlsh.h"
-
-
int cmd_quit(int sock, char *cmdbuf) {
return(cmdret_exit);
}
}
-
-
-
-
-int discover_ipgm_secret(char *dirname) {
- int fd;
- struct partial_config ccc;
- char configfile[1024];
-
- sprintf(configfile, "%s/citadel.config", dirname);
- fd = open(configfile, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "%s: %s\n", configfile, strerror(errno));
- return(-1);
- }
-
- if (read(fd, &ccc, sizeof(struct partial_config)) != sizeof(struct partial_config)) {
- fprintf(stderr, "%s: %s\n", configfile, strerror(errno));
- return(-1);
- }
- if (close(fd) != 0) {
- fprintf(stderr, "%s: %s\n", configfile, strerror(errno));
- return(-1);
- }
- return(ccc.c_ipgm_secret);
-}
-
-
/* Auto-completer function */
char *command_generator(const char *text, int state) {
static int list_index;
}
-
void do_main_loop(int server_socket) {
char *cmd = NULL;
char prompt[1024];
}
}
+
+/*
+ * If you don't know what main() does by now you probably shouldn't be reading this code.
+ */
int main(int argc, char **argv)
{
int server_socket = 0;
char buf[1024];
- int ipgm_secret = (-1);
int c;
char *ctdldir = CTDLDIR;
- printf("\nCitadel administration shell v" PACKAGE_VERSION "\n");
- printf("(c) 2009-2011 citadel.org GPLv3\n");
+ printf("\nCitadel administration shell v" PACKAGE_VERSION " (c) 2009-2012 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"
+ );
opterr = 0;
while ((c = getopt (argc, argv, "h:")) != -1) {
}
}
- ipgm_secret = discover_ipgm_secret(ctdldir);
- if (ipgm_secret < 0) {
- exit(1);
- }
-
printf("Trying %s...\n", ctdldir);
- sprintf(buf, "%s/citadel.socket", ctdldir);
+ sprintf(buf, "%s/citadel-admin.socket", ctdldir);
server_socket = uds_connectsock(buf);
if (server_socket < 0) {
exit(1);
}
sock_getln(server_socket, buf, sizeof buf);
- printf("%s\n", buf);
-
- sock_printf(server_socket, "IPGM %d\n", ipgm_secret);
- sock_getln(server_socket, buf, sizeof buf);
- printf("%s\n", buf);
-
if (buf[0] == '2') {
do_main_loop(server_socket);
}
/*
- * (c) 2009-2011 by Art Cancro and citadel.org
+ * (c) 2009-2012 by Art Cancro and citadel.org
* This program is released under the terms of the GNU General Public License v3.
*/
char *p2;
strcpy(account_name, &cmdbuf[7]);
+ if (strlen(account_name) == 0) {
+ strncpy(account_name, readline("Enter account name: "), sizeof account_name);
+ }
sock_printf(server_socket, "AGUP %s\n", account_name);
sock_getln(server_socket, buf, sizeof buf);
if (buf[0] != '2') {
p2 = readline("Enter it again: ");
if (strcmp(p1, p2)) {
- fprintf(stderr, "Passwords do not match. Account password is unchanged.\n");
+ fprintf(stderr, "The passwords you entered do not match."
+ "The account password remains unchanged.\n"
+ );
return(cmdret_error);
}
fprintf(stderr, "%s\n", &buf[4]);
return(cmdret_ok);
}
-
-
-
-
/*
- *
+ * This file contains functions which handle ctdlsh's connection
+ * to the Citadel server's admin socket.
+ *
+ * Copyright (c) 2009-2012 by the Citadel.org team.
+ * This program is open source software, cheerfully made available to you under
+ * the terms of the GNU General Public License version 3.
*/
#include "ctdlsh.h"
-#ifndef INADDR_NONE
-#define INADDR_NONE 0xffffffff
-#endif
int uds_connectsock(char *sockpath)
{
}
-
/*
* Input string from socket - implemented in terms of sock_read()
*
}
-
/*
- * sock_puts() - send line to server - implemented in terms of serv_write()
+ * sock_puts() - send line to server - implemented in terms of sock_write()
* Returns the number of bytes written, or -1 for error.
*/
int sock_puts(int sock, char *buf)
}
+/*
+ * Write a formatted string to the server - implemented in terms of sock_write()
+ */
void sock_printf(int sock, const char *format,...)
{
va_list arg_ptr;