#include "config.h"
#include "tools.h"
-#ifdef HAVE_CURSES_H
-#ifdef OK
-#undef OK
-#endif
+#if defined(HAVE_CURSES_H) || defined(HAVE_NCURSES_H)
+
+#ifdef HAVE_NCURSES_H
+#include <ncurses.h>
+#else
#include <curses.h>
#endif
+#endif
+
#define MAXSETUP 5
#define UI_TEXT 0 /* Default setup type -- text only */
#define UI_DIALOG 1 /* Use the 'dialog' program (REMOVED) */
#define UI_CURSES 2 /* Use curses */
+#define UI_SILENT 3 /* Silent running, for use in scripts */
#define SERVICE_NAME "citadel"
#define PROTO_NAME "tcp"
return;
}
#endif
- printf("Press return to continue...");
- fgets(junk, 5, stdin);
+ if (setup_type == UI_TEXT) {
+ printf("Press return to continue...");
+ fgets(junk, 5, stdin);
+ }
}
int yesno(char *question)
-void dump_access_levels(void)
-{
- int a;
- for (a = 0; a <= 6; ++a)
- printf("%d %s\n", a, axdefs[a]);
-}
-
void get_setup_msg(char *dispbuf, int msgnum)
{
int a, b;
char question[128];
FILE *sfp;
- sprintf(question,
+ snprintf(question, sizeof question,
"There is no '%s' entry in /etc/services. Would you like to add one?",
SERVICE_NAME);
char question[128];
char *ptr;
int have_entry = 0;
- char entryname[3];
+ char entryname[5];
/* Determine the fully qualified path name of citserver */
- sprintf(looking_for, "%s/citserver ", BBSDIR);
+ snprintf(looking_for, sizeof looking_for, "%s/citserver ", BBSDIR);
/* Pound through /etc/inittab line by line. Set have_entry to 1 if
* an entry is found which we believe starts citserver.
ptr = strtok(NULL, ":");
ptr = strtok(NULL, ":");
if (ptr != NULL) {
- if (!strncmp(ptr, looking_for, strlen(looking_for))) {
+ if (!strncmp(ptr, looking_for,
+ strlen(looking_for))) {
++have_entry;
}
}
return;
/* Otherwise, prompt the user to create an entry. */
- sprintf(question,
- "There is no '%s' entry in /etc/inittab.\nWould you like to add one?",
+ snprintf(question, sizeof question,
+ "There is no '%s' entry in /etc/inittab.\n"
+ "Would you like to add one?",
looking_for);
if (yesno(question) == 0)
return;
/* Generate a unique entry name for /etc/inittab */
- sprintf(entryname, "c0");
+ snprintf(entryname, sizeof entryname, "c0");
do {
++entryname[1];
if (entryname[1] > '9') {
return;
}
}
- sprintf(buf,
+ snprintf(buf, sizeof buf,
"grep %s: /etc/inittab >/dev/null 2>&1", entryname);
} while (system(buf) == 0);
case UI_TEXT:
title(setup_titles[msgpos]);
print_setup(msgpos);
- if (msgpos == 11)
- dump_access_levels();
printf("This is currently set to:\n%s\n", str);
printf("Enter new value or press return to leave unchanged:\n");
fgets(buf, 4096, stdin);
void set_int_val(int msgpos, int *ip)
{
char buf[16];
- sprintf(buf, "%d", (int) *ip);
+ snprintf(buf, sizeof buf, "%d", (int) *ip);
set_str_val(msgpos, buf);
*ip = atoi(buf);
}
void set_char_val(int msgpos, char *ip)
{
char buf[16];
- sprintf(buf, "%d", (int) *ip);
+ snprintf(buf, sizeof buf, "%d", (int) *ip);
set_str_val(msgpos, buf);
*ip = (char) atoi(buf);
}
void set_long_val(int msgpos, long int *ip)
{
char buf[16];
- sprintf(buf, "%ld", *ip);
+ snprintf(buf, sizeof buf, "%ld", *ip);
set_str_val(msgpos, buf);
*ip = atol(buf);
}
if (!strcmp(argv[a], "-i")) {
info_only = 1;
}
+ if (!strcmp(argv[a], "-q")) {
+ setup_type = UI_SILENT;
+ }
}
switch (setup_type) {
case UI_TEXT:
- printf("\n\n\n *** Citadel/UX setup program ***\n\n");
+ printf("\n\n\n"
+ " *** Citadel/UX setup program ***\n\n");
break;
}
strcpy(config.c_humannode, "My System");
if (strlen(config.c_phonenum) == 0)
strcpy(config.c_phonenum, "US 800 555 1212");
- if (config.c_initax == 0)
- config.c_initax = 1;
+ if (config.c_initax == 0) {
+ config.c_initax = 4;
+ }
if (strlen(config.c_moreprompt) == 0)
strcpy(config.c_moreprompt, "<more>");
if (strlen(config.c_twitroom) == 0)
/* Go through a series of dialogs prompting for config info */
- for (curr = 1; curr <= MAXSETUP; ++curr) {
- edit_value(curr);
+ if (setup_type != UI_SILENT) {
+ for (curr = 1; curr <= MAXSETUP; ++curr) {
+ edit_value(curr);
+ }
}
/*
if (old_setup_level < 323) {
important_message("Citadel/UX Setup",
- "This Citadel/UX installation is too old to be upgraded.");
+ "This Citadel/UX installation is too old "
+ "to be upgraded.");
cleanup(1);
}
write_config_to_disk();
progress("Setting file permissions", 1, 5);
chown("citadel.config", config.c_bbsuid, gid);
progress("Setting file permissions", 2, 5);
- sprintf(aaa, "find . | grep -v chkpwd | xargs chown %ld:%ld 2>/dev/null",
+ snprintf(aaa, sizeof aaa,
+ "find . | grep -v chkpwd | xargs chown %ld:%ld 2>/dev/null",
(long)config.c_bbsuid, (long)gid);
system(aaa);
progress("Setting file permissions", 3, 5);
important_message("Setup finished",
"Setup is finished. You may now start the Citadel server.");
-
cleanup(0);
return 0;
}