typedef enum _SetupStep {
+ eCitadelHomeDir = 0,
eSysAdminName = 1,
eSysAdminPW = 2,
eUID = 3,
eLDAP_Host = 7,
eLDAP_Port = 8,
eLDAP_Base_DN = 9,
- eLDAP_Bind_DN =10,
- eLDAP_Bind_PW =11
+ eLDAP_Bind_DN = 10,
+ eLDAP_Bind_PW = 11,
+ eMaxQuestions = 12
} eSteupStep;
+///"CREATE_XINETD_ENTRY";
+const char *EnvNames [eMaxQuestions] = {
+ "SYSADMIN_NAME",
+ "SYSADMIN_PW",
+ "CITADEL_UID",
+ "IP_ADDR",
+ "CITADEL_PORT",
+ "ENABLE_UNIX_AUTH",
+ "LDAP_HOST",
+ "LDAP_PORT",
+ "LDAP_BASE_DN",
+ "LDAP_BIND_DN",
+ "LDAP_BIND_PW"
+""
+};
int setup_type;
char setup_directory[PATH_MAX];
char admin_pass[SIZ];
char admin_cmd[SIZ];
-char *setup_titles[] =
+const char *setup_titles[eMaxQuestions];
+
+void SetTitles(void)
{
- "Citadel Home Directory",
- "System Administrator",
- "Administrator Password",
- "Citadel User ID",
- "Server IP address",
- "Server port number",
- "Authentication mode",
- "LDAP host",
- "LDAP port number",
- "LDAP base DN",
- "LDAP bind DN",
- "LDAP bind password"
-};
+ setup_titles[eCitadelHomeDir] = _("Citadel Home Directory");
+ setup_titles[eSysAdminName] = _("Citadel administrator username:");////
+ setup_titles[eSysAdminPW] = _("Administrator password:");//
+ setup_titles[eUID] = _("Citadel User ID:");
+ setup_titles[eIP_ADDR] = _("Listening address for the Citadel server:");///
+ setup_titles[eCTDL_Port] = _("Server port number:");
+ setup_titles[eAuthType] = _("Authentication method to use:");////
+ setup_titles[eLDAP_Host] = _("LDAP host:");///
+ setup_titles[eLDAP_Port] = _("LDAP port number:");////
+ setup_titles[eLDAP_Base_DN] = _("LDAP base DN:");///
+ setup_titles[eLDAP_Bind_DN] = _("LDAP bind DN:");//
+ setup_titles[eLDAP_Bind_PW] = _("LDAP bind password:");//
+}
/**
* \brief print the actual stack frame.
-void title(char *text)
+void title(const char *text)
{
if (setup_type == UI_TEXT) {
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<%s>\n", text);
return(-1);
}
-void strprompt(char *prompt_title, char *prompt_text, char *str)
+void strprompt(const char *prompt_title, char *prompt_text, char *Target, char *DefValue)
{
char buf[SIZ] = "";
char setupmsg[SIZ];
case UI_TEXT:
title(prompt_title);
printf("\n%s\n", prompt_text);
- printf("This is currently set to:\n%s\n", str);
+ printf("This is currently set to:\n%s\n", Target);
printf("Enter new value or press return to leave unchanged:\n");
if (fgets(buf, sizeof buf, stdin)){
buf[strlen(buf) - 1] = 0;
}
if (!IsEmptyStr(buf))
- strcpy(str, buf);
+ strcpy(Target, buf);
break;
case UI_DIALOG:
sprintf(buf, "exec %s --inputbox '%s' 19 72 '%s' 2>%s",
getenv("CTDL_DIALOG"),
prompt_text,
- str,
+ Target,
dialog_result);
rv = system(buf);
fp = fopen(dialog_result, "r");
if (fp != NULL) {
- if (fgets(str, sizeof buf, fp)) {
- if (str[strlen(str)-1] == 10) {
- str[strlen(str)-1] = 0;
+ if (fgets(Target, sizeof buf, fp)) {
+ if (Target[strlen(Target)-1] == 10) {
+ Target[strlen(Target)-1] = 0;
}
}
fclose(fp);
}
break;
case UI_SILENT:
+ strcpy(Target, DefValue);
break;
}
}
-void set_bool_val(int msgpos, int *ip) {
+void set_bool_val(int msgpos, int *ip, char *DefValue) {
title(setup_titles[msgpos]);
*ip = yesno(setup_text[msgpos], *ip);
}
-void set_str_val(int msgpos, char *str) {
- strprompt(setup_titles[msgpos], setup_text[msgpos], str);
+void set_str_val(int msgpos, char *Target, char *DefValue) {
+ strprompt(setup_titles[msgpos],
+ setup_text[msgpos],
+ Target,
+ DefValue);
}
-void set_int_val(int msgpos, int *ip)
+void set_int_val(int msgpos, int *ip, char *DefValue)
{
char buf[16];
snprintf(buf, sizeof buf, "%d", (int) *ip);
- set_str_val(msgpos, buf);
+ set_str_val(msgpos, buf, DefValue);
*ip = atoi(buf);
}
-void set_char_val(int msgpos, char *ip)
+void set_char_val(int msgpos, char *ip, char *DefValue)
{
char buf[16];
snprintf(buf, sizeof buf, "%d", (int) *ip);
- set_str_val(msgpos, buf);
+ set_str_val(msgpos, buf, DefValue);
*ip = (char) atoi(buf);
}
-void set_long_val(int msgpos, long int *ip)
+void set_long_val(int msgpos, long int *ip, char *DefValue)
{
char buf[16];
snprintf(buf, sizeof buf, "%ld", *ip);
- set_str_val(msgpos, buf);
+ set_str_val(msgpos, buf, DefValue);
*ip = atol(buf);
}
int i;
struct passwd *pw;
char ctdluidname[256];
+ char *Value = NULL;
+
+ if (setup_type == UI_SILENT)
+ {
+ Value = getenv(EnvNames[curr]);
+ }
+
switch (curr) {
case eSysAdminName:
- if (setup_type == UI_SILENT)
- {
- if (getenv("SYSADMIN_NAME")) {
- strcpy(config.c_sysadm, getenv("SYSADMIN_NAME"));
- }
- }
- else {
- set_str_val(curr, config.c_sysadm);
- }
+ set_str_val(curr, config.c_sysadm, Value);
break;
case eSysAdminPW:
- if (setup_type == UI_SILENT)
- {
- if (getenv("SYSADMIN_PW")) {
- strcpy(admin_pass, getenv("SYSADMIN_PW"));
- }
- }
- else {
- set_str_val(curr, admin_pass);
- }
+ set_str_val(curr, admin_pass, Value);
break;
case eUID:
if (setup_type == UI_SILENT)
{
- if (getenv("CITADEL_UID")) {
- config.c_ctdluid = atoi(getenv("CITADEL_UID"));
+ if (Value) {
+ config.c_ctdluid = atoi(Value);
}
}
else
i = config.c_ctdluid;
pw = getpwuid(i);
if (pw == NULL) {
- set_int_val(curr, &i);
+ set_int_val(curr, &i, Value);
config.c_ctdluid = i;
}
else {
strcpy(ctdluidname, pw->pw_name);
- set_str_val(curr, ctdluidname);
+ set_str_val(curr, ctdluidname, Value);
pw = getpwnam(ctdluidname);
if (pw != NULL) {
config.c_ctdluid = pw->pw_uid;
break;
case eIP_ADDR:
- if (setup_type == UI_SILENT)
- {
- if (getenv("IP_ADDR")) {
- strcpy(config.c_ip_addr, getenv("IP_ADDR"));
- }
- }
- else {
- set_str_val(curr, config.c_ip_addr);
- }
+ set_str_val(curr, config.c_ip_addr, Value);
break;
case eCTDL_Port:
- if (setup_type == UI_SILENT)
- {
- if (getenv("CITADEL_PORT")) {
- config.c_port_number = atoi(getenv("CITADEL_PORT"));
- }
- }
- else
- {
- set_int_val(curr, &config.c_port_number);
- }
+ set_int_val(curr, &config.c_port_number, Value);
break;
case eAuthType:
{
const char *auth;
config.c_auth_mode = AUTHMODE_NATIVE;
- auth = getenv("ENABLE_UNIX_AUTH");
+ auth = Value;
if (auth != NULL)
{
if ((strcasecmp(auth, "yes") == 0) ||
}
}
else {
- set_int_val(curr, &config.c_auth_mode);
+ set_int_val(curr, &config.c_auth_mode, Value);
}
break;
case eLDAP_Host:
- if (setup_type == UI_SILENT)
- {
- if (getenv("LDAP_HOST")) {
- strcpy(config.c_ldap_host, getenv("LDAP_HOST"));
- }
- }
- else
- {
- set_str_val(curr, config.c_ldap_host);
- }
+ set_str_val(curr, config.c_ldap_host, Value);
break;
case eLDAP_Port:
- if (setup_type == UI_SILENT)
- {
- if (getenv("LDAP_PORT")) {
- config.c_ldap_port = atoi(getenv("LDAP_PORT"));
- }
- }
- else
- {
- if (config.c_ldap_port == 0) {
- config.c_ldap_port = 389;
- }
- set_int_val(curr, &config.c_ldap_port);
+ if (config.c_ldap_port == 0) {
+ config.c_ldap_port = 389;
}
+ set_int_val(curr, &config.c_ldap_port, Value);
break;
case eLDAP_Base_DN:
- if (setup_type == UI_SILENT)
- {
- if (getenv("LDAP_BASE_DN")) {
- strcpy(config.c_ldap_base_dn, getenv("LDAP_BASE_DN"));
- }
- }
- else
- {
- set_str_val(curr, config.c_ldap_base_dn);
- }
+ set_str_val(curr, config.c_ldap_base_dn, Value);
break;
case eLDAP_Bind_DN:
- if (setup_type == UI_SILENT)
- {
- if (getenv("LDAP_BIND_DN")) {
- strcpy(config.c_ldap_bind_dn, getenv("LDAP_BIND_DN"));
- }
- }
- else
- {
- set_str_val(curr, config.c_ldap_bind_dn);
- }
+ set_str_val(curr, config.c_ldap_bind_dn, Value);
break;
case eLDAP_Bind_PW:
- if (setup_type == UI_SILENT)
- {
- if (getenv("LDAP_BIND_PW")) {
- strcpy(config.c_ldap_bind_pw, getenv("LDAP_BIND_PW"));
- }
- }
- else
- {
- set_str_val(curr, config.c_ldap_bind_pw);
- }
+ set_str_val(curr, config.c_ldap_bind_pw, Value);
break;
}
-
}
/*
int home=0;
char relhome[PATH_MAX]="";
char ctdldir[PATH_MAX]=CTDLDIR;
+ char DefValue[PATH_MAX];
int rv;
/* set an invalid setup type */
/* Get started in a valid setup directory. */
strcpy(setup_directory, ctdl_run_dir);
+ strcpy(DefValue, ctdl_run_dir);
if ( (using_web_installer) && (getenv("CITADEL") != NULL) ) {
strcpy(setup_directory, getenv("CITADEL"));
}
else {
- set_str_val(0, setup_directory);
+ set_str_val(0, setup_directory, DefValue);
}
enable_home = ( relh | home );
config.c_setup_level = REV_LEVEL;
/******************************************/
+ if ((pw = getpwuid(config.c_ctdluid)) == NULL) {
+ gid = getgid();
+ } else {
+ gid = pw->pw_gid;
+ }
- write_config_to_disk();
-
- rv = mkdir(ctdl_info_dir, 0700);
- rv = chmod(ctdl_info_dir, 0700);
- rv = chown(ctdl_info_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_bio_dir, 0700);
- rv = chmod(ctdl_bio_dir, 0700);
- rv = chown(ctdl_bio_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_usrpic_dir, 0700);
- rv = chmod(ctdl_usrpic_dir, 0700);
- rv = chown(ctdl_usrpic_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_message_dir, 0700);
- rv = chmod(ctdl_message_dir, 0700);
- rv = chown(ctdl_message_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_hlp_dir, 0700);
- rv = chmod(ctdl_hlp_dir, 0700);
- rv = chown(ctdl_hlp_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_image_dir, 0700);
- rv = chmod(ctdl_image_dir, 0700);
- rv = chown(ctdl_image_dir, config.c_ctdluid, -1);
-
- rv = mkdir(ctdl_bb_dir, 0700);
- rv = chmod(ctdl_bb_dir, 0700);
- rv = chown(ctdl_bb_dir, config.c_ctdluid, -1);
+ create_run_directories(config.c_ctdluid, gid);
- rv = mkdir(ctdl_file_dir, 0700);
- rv = chmod(ctdl_file_dir, 0700);
- rv = chown(ctdl_file_dir, config.c_ctdluid, -1);
+ write_config_to_disk();
- rv = mkdir(ctdl_netcfg_dir, 0700);
- rv = chmod(ctdl_netcfg_dir, 0700);
- rv = chown(ctdl_netcfg_dir, config.c_ctdluid, -1);
/* Delete files and directories used by older Citadel versions */
rv = system("exec /bin/rm -fr ./rooms ./chatpipes ./expressmsgs ./sessions 2>/dev/null");
/* Check for the 'db' nss and offer to disable it */
fixnss();
- if ((pw = getpwuid(config.c_ctdluid)) == NULL) {
- gid = getgid();
- } else {
- gid = pw->pw_gid;
- }
-
- progress("Setting file permissions", 0, 3);
- rv = chown(ctdl_run_dir, config.c_ctdluid, gid);
progress("Setting file permissions", 1, 3);
rv = chown(file_citadel_config, config.c_ctdluid, gid);
progress("Setting file permissions", 2, 3);