serv_calendar.o \
ical_dezonify.o \
serv_ldap.o \
- serv_autocompletion.o
+ serv_autocompletion.o
UTIL_TARGETS=aidepost msgform \
citmail userlist sendcommand \
serv_vandelay.c serv_vcard.c server_main.c setup.c snprintf.c \
stress.c support.c sysdep.c tools.c user_ops.c userlist.c \
whobbs.c vcard.c serv_notes.c serv_fulltext.c ft_wordbreaker.c \
- crc16.c journaling.c
+ crc16.c journaling.c citadel_dirs.c
DEP_FILES=$(SOURCES:.c=.d)
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) -c $< -o $@
aidepost: aidepost.o config.o
- $(CC) aidepost.o config.o $(LDFLAGS) -o aidepost $(LIBS)
+ $(CC) aidepost.o config.o citadel_dirs.o $(LDFLAGS) -o aidepost $(LIBS)
-citmail: citmail.o config.o
- $(CC) citmail.o config.o $(LDFLAGS) -o citmail $(LIBS)
+citmail: citmail.o config.o citadel_dirs.o
+ $(CC) citmail.o config.o citadel_dirs.o $(LDFLAGS) -o citmail $(LIBS)
# setup does need LIBS defined, because it uses network functions which are in -lsocket -lnsl on Solaris.
-setup: setup.o tools.o
- $(CC) setup.o tools.o $(LDFLAGS) -o setup $(LIBS) $(SETUP_LIBS)
+setup: setup.o tools.o citadel_dirs.o
+ $(CC) setup.o tools.o citadel_dirs.o $(LDFLAGS) -o setup $(LIBS) $(SETUP_LIBS)
-chkpwd: chkpwd.o auth.o config.o
- $(CC) chkpwd.o auth.o config.o $(LDFLAGS) -o chkpwd $(chkpwd_LIBS)
+chkpwd: chkpwd.o auth.o config.o citadel_dirs.o
+ $(CC) chkpwd.o auth.o config.o citadel_dirs.o $(LDFLAGS) -o chkpwd $(chkpwd_LIBS)
whobbs$(EXEEXT): whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o $(LIBOBJS)
$(CC) whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o $(LIBOBJS) $(LDFLAGS) -o whobbs $(LIBS)
$(CC) stress.o ipc_c_tcp.o tools.o citadel_ipc.o $(LIBOBJS) $(LDFLAGS) -o stress $(LIBS)
sendcommand: sendcommand.o ipc_c_tcp.o citadel_ipc.o tools.o config.o $(LIBOBJS)
- $(CC) sendcommand.o ipc_c_tcp.o citadel_ipc.o tools.o config.o \
+ $(CC) sendcommand.o ipc_c_tcp.o citadel_ipc.o tools.o config.o citadel_dirs.o \
$(LIBOBJS) $(LDFLAGS) -o sendcommand $(LIBS)
base64: base64.o
#include <errno.h>
#include <string.h>
#include "citadel.h"
+#include "citadel_dirs.h"
#include "config.h"
#ifndef HAVE_SNPRINTF
int ch;
int i;
+ int relh=0;
+ int home=0;
+ char relhome[PATH_MAX]="";
+ char ctdldir[PATH_MAX]=CTDLDIR;
+
+ /* TODO: should we be able to calculate relative dirs? */
+ calc_dirs_n_files(relh, home, relhome, ctdldir);
+
+
get_config();
strcpy(target_room, "Aide");
#include "snprintf.h"
#endif
#include "screen.h"
+#include "citadel_dirs.h"
#include "md5.h"
* guaranteed to have the uid/gid we want.
*/
if (!getuid() || !getgid()) {
- if (stat(
-#ifndef HAVE_ETC_DIR
- CTDLDIR
-#else
- ETC_DIR
-#endif
- "/citadel.config", &st) < 0) {
+ if (stat(file_citadel_config, &st) < 0) {
perror("couldn't stat citadel.config");
logoff(NULL, 3);
}
--- /dev/null
+#include "sysdep.h"
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <ctype.h>
+#include <string.h>
+#include <limits.h>
+
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include <errno.h>
+
+
+
+#include "citadel.h"
+
+/* our directories... */
+char ctdl_home_directory[PATH_MAX] = "";
+char ctdl_bio_dir[PATH_MAX]="bio";
+char ctdl_bb_dir[PATH_MAX]="bitbucket";
+char ctdl_data_dir[PATH_MAX]="data";
+char ctdl_file_dir[PATH_MAX]="files";
+char ctdl_hlp_dir[PATH_MAX]="help";
+char ctdl_image_dir[PATH_MAX]="images";
+char ctdl_info_dir[PATH_MAX]="info";
+char ctdl_key_dir[PATH_MAX]="keys";
+char ctdl_message_dir[PATH_MAX]="messages";
+char ctdl_usrpic_dir[PATH_MAX]="userpics";
+char ctdl_etc_dir[PATH_MAX]="";
+char ctdl_run_dir[PATH_MAX]="";
+char ctdl_spool_dir[PATH_MAX]="network";
+char ctdl_netout_dir[PATH_MAX]="network/spoolout";
+char ctdl_netin_dir[PATH_MAX]="network/spoolin";
+char ctdl_netcfg_dir[PATH_MAX]="netconfigs";
+
+/* some of our files, that are needed in several places */
+char file_citadel_control[PATH_MAX]="";
+char file_citadel_rc[PATH_MAX]="";
+char file_citadel_config[PATH_MAX]="";
+char file_lmtp_socket[PATH_MAX]="";
+char file_lmtp_unfiltered_socket[PATH_MAX]="";
+
+int home_specified = 0;
+
+
+
+
+
+
+
+
+
+ /* calculate all our path on a central place */
+ /* where to keep our config */
+
+#define COMPUTE_DIRECTORY(SUBDIR) memcpy(dirbuffer,SUBDIR, sizeof dirbuffer);\
+ snprintf(SUBDIR,sizeof SUBDIR, "%s%s%s%s%s%s%s", \
+ (home&!relh)?ctdl_home_directory:basedir, \
+ ((basedir!=ctdldir)&(home&!relh))?basedir:"/", \
+ ((basedir!=ctdldir)&(home&!relh))?"/":"", \
+ relhome, \
+ (relhome[0]!='\0')?"/":"",\
+ dirbuffer,\
+ (dirbuffer[0]!='\0')?"/":"");
+
+void calc_dirs_n_files(int relh, int home, const char *relhome,const char *ctdldir)
+{
+ const char* basedir;
+ char dirbuffer[PATH_MAX]="";
+
+
+
+
+#ifndef HAVE_ETC_DIR
+ basedir=ctdldir;
+#else
+ basedir=ETC_DIR;
+#endif
+ COMPUTE_DIRECTORY(ctdl_netcfg_dir);
+ COMPUTE_DIRECTORY(ctdl_etc_dir);
+
+#ifndef HAVE_RUN_DIR
+ basedir=ctdldir;
+#else
+ basedir=RUN_DIR;
+#endif
+ COMPUTE_DIRECTORY(ctdl_run_dir);
+
+#ifndef HAVE_DATA_DIR
+ basedir=ctdldir;
+#else
+ basedir=DATA_DIR;
+#endif
+ COMPUTE_DIRECTORY(ctdl_bio_dir);
+ COMPUTE_DIRECTORY(ctdl_bb_dir);
+ COMPUTE_DIRECTORY(ctdl_data_dir);
+ COMPUTE_DIRECTORY(ctdl_file_dir);
+ COMPUTE_DIRECTORY(ctdl_hlp_dir);
+ COMPUTE_DIRECTORY(ctdl_image_dir);
+ COMPUTE_DIRECTORY(ctdl_info_dir);
+ COMPUTE_DIRECTORY(ctdl_message_dir);
+ COMPUTE_DIRECTORY(ctdl_usrpic_dir);
+#ifndef HAVE_SPOOL_DIR
+ basedir=ctdldir;
+#else
+ basedir=SPOOL_DIR;
+#endif
+ COMPUTE_DIRECTORY(ctdl_spool_dir);
+ COMPUTE_DIRECTORY(ctdl_netout_dir);
+ COMPUTE_DIRECTORY(ctdl_netin_dir);
+
+ /* ok, now we know the dirs, calc some commonly used files */
+
+ snprintf(file_citadel_control,
+ sizeof file_citadel_control,
+ "%scitadel.control",
+ ctdl_etc_dir
+ );
+
+ snprintf(file_citadel_config,
+ sizeof file_citadel_config,
+ "%scitadel.config",
+ ctdl_etc_dir);
+
+ snprintf(file_citadel_rc,
+ sizeof file_citadel_rc,
+ "%scitadel.rc",
+ ctdl_etc_dir);
+
+ snprintf(file_lmtp_socket,
+ sizeof file_lmtp_socket,
+ "%slmtp.socket",
+ ctdl_run_dir);
+
+ snprintf(file_lmtp_unfiltered_socket,
+ sizeof file_lmtp_socket,
+ "%slmtp-unfiltered.sock",
+ ctdl_run_dir);
+
+}
+
+
+/*
+ * Generate an associated file name for a room
+ */
+void assoc_file_name(char *buf, size_t n,
+ struct ctdlroom *qrbuf, const char *prefix)
+{
+ snprintf(buf, n, "%s%ld", prefix, qrbuf->QRnumber);
+}
+
--- /dev/null
+#ifndef __CITADEL_DIRS_H
+#define __CITADEL_DIRS_H
+
+#include <limits.h>
+
+
+extern char ctdl_home_directory[PATH_MAX];
+extern int home_specified;
+
+
+/* all our directories */
+extern char ctdl_bio_dir[PATH_MAX];
+extern char ctdl_bb_dir[PATH_MAX];
+extern char ctdl_data_dir[PATH_MAX];
+extern char ctdl_file_dir[PATH_MAX];
+extern char ctdl_hlp_dir[PATH_MAX];
+extern char ctdl_image_dir[PATH_MAX];
+extern char ctdl_info_dir[PATH_MAX];
+extern char ctdl_key_dir[PATH_MAX];
+extern char ctdl_message_dir[PATH_MAX];
+extern char ctdl_usrpic_dir[PATH_MAX];
+extern char ctdl_etc_dir[PATH_MAX];
+extern char ctdl_run_dir[PATH_MAX];
+extern char ctdl_spool_dir[PATH_MAX];
+extern char ctdl_netout_dir[PATH_MAX];
+extern char ctdl_netin_dir[PATH_MAX];
+extern char ctdl_netcfg_dir[PATH_MAX];
+
+/* some of the frequently used files */
+extern char file_citadel_control[PATH_MAX];
+extern char file_citadel_rc[PATH_MAX];
+extern char file_citadel_config[PATH_MAX];
+extern char file_lmtp_socket[PATH_MAX];
+extern char file_lmtp_unfiltered_socket[PATH_MAX];
+
+
+extern void calc_dirs_n_files(int relh, int home, const char *relhome,const char *ctdldir);
+
+
+void assoc_file_name(char *buf, size_t n,
+ struct ctdlroom *qrbuf, const char *prefix);
+
+#endif /* __CITADEL_DIRS_H */
#include "snprintf.h"
#endif
#include "config.h"
+#include "citadel_dirs.h"
/* #define DEBUG */ /* uncomment to get protocol traces */
struct passwd *pw;
int from_header = 0;
int in_body = 0;
+ int relh=0;
+ int home=0;
+ char relhome[PATH_MAX]="";
+ char ctdldir[PATH_MAX]=CTDLDIR;
+
+ /* TODO: should we be able to calculate relative dirs? */
+ calc_dirs_n_files(relh, home, relhome, ctdldir);
get_config();
}
strip_trailing_nonprint(fromline);
- serv_sock = uds_connectsock(
-#ifndef HAVE_RUN_DIR
- "."
-#else
- RUN_DIR
-#endif
- "/lmtp.socket");
+ serv_sock = uds_connectsock(file_lmtp_socket);
serv_gets(buf);
if (buf[0]!='2') cleanup(1);
#include "tools.h"
#include "rooms.h"
#include "client_chat.h"
+#include "citadel_dirs.c"
#ifndef HAVE_SNPRINTF
#include "snprintf.h"
#endif
ccfile = NULL;
if (getenv("HOME") != NULL) {
- snprintf(buf, sizeof buf, "%s/.citadelrc", getenv("HOME"));
- ccfile = fopen(buf, "r");
+ ccfile = fopen(file_citadel_rc, "r");
}
if (ccfile == NULL) {
- snprintf(buf, sizeof buf,
-#ifndef HAVE_ETC_DIR
- CTDLDIR
-#else
- ETC_DIR
-#endif
- "/citadel.rc");
- ccfile = fopen(buf, "r");
+ ccfile = fopen(file_citadel_rc, "r");
}
if (ccfile == NULL) {
ccfile = fopen("/etc/citadel.rc", "r");
#include "config.h"
struct config config;
-/* CTDLDIR */
-char ctdl_home_directory[PATH_MAX] = "";
-char ctdl_bio_dir[PATH_MAX]="bio";
-char ctdl_bb_dir[PATH_MAX]="bitbucket";
-char ctdl_data_dir[PATH_MAX]="data";
-char ctdl_file_dir[PATH_MAX]="files";
-char ctdl_hlp_dir[PATH_MAX]="help";
-char ctdl_image_dir[PATH_MAX]="images";
-char ctdl_info_dir[PATH_MAX]="info";
-char ctdl_key_dir[PATH_MAX]="keys";
-char ctdl_message_dir[PATH_MAX]="messages";
-char ctdl_usrpic_dir[PATH_MAX]="userpics";
-char ctdl_etc_dir[PATH_MAX]="";
-char ctdl_run_dir[PATH_MAX]="";
-char ctdl_spool_dir[PATH_MAX]="network";
-char ctdl_netout_dir[PATH_MAX]="network/spoolout";
-char ctdl_netin_dir[PATH_MAX]="network/spoolin";
-
-int home_specified = 0;
/*
* get_config() is called during the initialization of any program which
strerror(errno));
exit(1);
}
- cfp = fopen(
-#ifndef HAVE_ETC_DIR
- "."
-#else
- ETC_DIR
-#endif
- "/citadel.config", "rb");
+ cfp = fopen(file_citadel_config, "rb");
if (cfp == NULL) {
fprintf(stderr, "This program could not be started.\n"
- "Unable to open %s/citadel.config\n"
- "Error: %s\n",
- (home_specified ? ctdl_home_directory : CTDLDIR),
- strerror(errno));
+ "Unable to open %s\n"
+ "Error: %s\n",
+ file_citadel_config,
+ strerror(errno));
exit(1);
}
fread((char *) &config, sizeof(struct config), 1, cfp);
if (fstat(fileno(cfp), &st)) {
- perror("citadel.config");
+ perror(file_citadel_config);
exit(1);
}
#ifndef __CYGWIN__
if (st.st_uid != CTDLUID || st.st_mode != (S_IFREG | S_IRUSR | S_IWUSR)) {
- fprintf(stderr, "check the permissions on citadel.config\n");
+ fprintf(stderr, "check the permissions on %s\n", file_citadel_config);
+ // fprintf(stderr, "check the permissions on citadel.config\n");
exit(1);
}
#endif
{
FILE *cfp;
- if ((cfp = fopen(
-#ifndef HAVE_ETC_DIR
- "."
-#else
- ETC_DIR
-#endif
- "/citadel.config", "rb+")) == NULL)
- perror("citadel.config");
+ if ((cfp = fopen(file_citadel_config, "rb+")) == NULL)
+ perror(file_citadel_config);
else {
fwrite((char *) &config, sizeof(struct config), 1, cfp);
fclose(cfp);
*/
#include "serv_extensions.h"
-
+#include "citadel_dirs.h"
/*
* Global system configuration.
*
void get_config(void);
void put_config(void);
extern struct config config;
-extern char ctdl_home_directory[PATH_MAX];
-extern int home_specified;
-
-
-
-extern char ctdl_bio_dir[PATH_MAX];
-extern char ctdl_bb_dir[PATH_MAX];
-extern char ctdl_data_dir[PATH_MAX];
-extern char ctdl_file_dir[PATH_MAX];
-extern char ctdl_hlp_dir[PATH_MAX];
-extern char ctdl_image_dir[PATH_MAX];
-extern char ctdl_info_dir[PATH_MAX];
-extern char ctdl_key_dir[PATH_MAX];
-extern char ctdl_message_dir[PATH_MAX];
-extern char ctdl_usrpic_dir[PATH_MAX];
-extern char ctdl_etc_dir[PATH_MAX];
-extern char ctdl_run_dir[PATH_MAX];
-extern char ctdl_spool_dir[PATH_MAX];
-extern char ctdl_netout_dir[PATH_MAX];
-extern char ctdl_netin_dir[PATH_MAX];
-
-
-
*/
memset(&CitControl, 0, sizeof(struct CitControl));
if (control_fp == NULL) {
- control_fp = fopen(
-#ifndef HAVE_DATA_DIR
- "."
-#else
- DATA_DIR
-#endif
- "/citadel.control", "rb+");
+ control_fp = fopen(file_citadel_control, "rb+");
if (control_fp != NULL) {
fchown(fileno(control_fp), config.c_ctdluid, -1);
}
}
if (control_fp == NULL) {
- control_fp = fopen(
-#ifndef HAVE_DATA_DIR
- "."
-#else
- DATA_DIR
-#endif
- "/citadel.control", "wb+");
+ control_fp = fopen(file_citadel_control, "wb+");
if (control_fp != NULL) {
fchown(fileno(control_fp), config.c_ctdluid, -1);
memset(&CitControl, 0, sizeof(struct CitControl));
}
}
if (control_fp == NULL) {
- lprintf(CTDL_ALERT, "ERROR opening citadel.control: %s\n",
- strerror(errno));
+ lprintf(CTDL_ALERT, "ERROR opening %s: %s\n",
+ file_citadel_control,
+ strerror(errno));
return;
}
"%s/floor.%d.gif",
ctdl_image_dir, which_floor);
} else if (!strcasecmp(filename, "_roompic_")) {
- assoc_file_name(pathname, sizeof pathname, &CC->room, "images");
+ assoc_file_name(pathname, sizeof pathname, &CC->room, ctdl_image_dir);
} else {
for (a = 0; a < strlen(filename); ++a) {
filename[a] = tolower(filename[a]);
}
if ((!strcasecmp(basenm, "_roompic_")) && (is_room_aide())) {
- assoc_file_name(CC->upl_path, sizeof CC->upl_path, &CC->room, "images");
+ assoc_file_name(CC->upl_path, sizeof CC->upl_path, &CC->room, ctdl_image_dir);
}
if (strlen(CC->upl_path) == 0) {
*/
snprintf(filename,
sizeof filename,
- "%s/mail.aliases",
+ "%smail.aliases",
#ifndef HAVE_ETG_DIR
ctdl_spool_dir
#else
void get_mm(void)
{
FILE *fp;
- char filename[256];
-
- snprintf(filename,
- sizeof filename,
- "%s/citadel.control",
- ctdl_etc_dir
- );
- fp = fopen(filename, "r");
+ fp = fopen(file_citadel_control, "r");
if (fp == NULL) {
- lprintf(CTDL_CRIT, "Cannot open citadel.control: %s\n",
- strerror(errno));
+ lprintf(CTDL_CRIT, "Cannot open %s: %s\n",
+ file_citadel_control,
+ strerror(errno));
exit(errno);
}
fread((char *) &CitControl, sizeof(struct CitControl), 1, fp);
#include "citserver.h"
#include "control.h"
#include "tools.h"
+#include "citadel_dirs.h"
struct floor *floorcache[MAXFLOORS];
cprintf("%d Ok\n", CIT_OK);
}
-/*
- * Generate an associated file name for a room
- */
-void assoc_file_name(char *buf, size_t n,
- struct ctdlroom *qrbuf, const char *prefix)
-{
- snprintf(buf, n, "./%s/%ld", prefix, qrbuf->QRnumber);
-}
-
/*
* retrieve info file for this room
*/
char buf[SIZ];
FILE *info_fp;
- assoc_file_name(filename, sizeof filename, &CC->room, "info");
+ assoc_file_name(filename, sizeof filename, &CC->room, ctdl_info_dir);
info_fp = fopen(filename, "r");
if (info_fp == NULL) {
{
struct floor flbuf;
char filename[100];
+ /* TODO: filename magic? does this realy work? */
lprintf(CTDL_NOTICE, "Deleting room <%s>\n", qrbuf->QRname);
/* Delete the info file */
- assoc_file_name(filename, sizeof filename, qrbuf, "info");
+ assoc_file_name(filename, sizeof filename, qrbuf, ctdl_info_dir);
unlink(filename);
/* Delete the image file */
- assoc_file_name(filename, sizeof filename, qrbuf, "images");
+ assoc_file_name(filename, sizeof filename, qrbuf, ctdl_image_dir);
unlink(filename);
/* Delete the room's network config file */
- assoc_file_name(filename, sizeof filename, qrbuf, "netconfigs");
+ assoc_file_name(filename, sizeof filename, qrbuf, ctdl_netcfg_dir);
unlink(filename);
/* Delete the messages in the room
cprintf("%d Ok.\n", CIT_OK);
return;
}
- assoc_file_name(infofilename, sizeof infofilename, &CC->room, "info");
+ assoc_file_name(infofilename, sizeof infofilename, &CC->room, ctdl_info_dir);
lprintf(CTDL_DEBUG, "opening\n");
fp = fopen(infofilename, "w");
lprintf(CTDL_DEBUG, "checking\n");
void cmd_eflr (char *argbuf);
void ForEachRoom(void (*CallBack)(struct ctdlroom *EachRoom, void *out_data),
void *in_data);
-void assoc_file_name(char *buf, size_t n,
- struct ctdlroom *qrbuf, const char *prefix);
void schedule_room_for_deletion(struct ctdlroom *qrbuf);
void delete_room(struct ctdlroom *qrbuf);
void list_roomname(struct ctdlroom *qrbuf, int ra, int view);
#include "snprintf.h"
#endif
#include "screen.h"
+#include "citadel_dirs.h"
#define IFNEXPERT if ((userflags&US_EXPERT)==0)
char cmd[SIZ];
char buf[SIZ];
+ int relh=0;
+ int home=0;
+ char relhome[PATH_MAX]="";
+ char ctdldir[PATH_MAX]=CTDLDIR;
+
strcpy(ctdl_home_directory, DEFAULT_PORT);
strcpy(cmd, "");
*/
for (a = 1; a < argc; ++a) {
if (!strncmp(argv[a], "-h", 2)) {
- strcpy(ctdl_home_directory, argv[a]);
- strcpy(ctdl_home_directory, &ctdl_home_directory[2]);
+ relh=argv[a][2]!='/';
+ if (!relh) safestrncpy(ctdl_home_directory, &argv[a][2],
+ sizeof ctdl_home_directory);
+ else
+ safestrncpy(relhome, &argv[a][2],
+ sizeof relhome);
home_specified = 1;
+ home=1;
} else {
if (strlen(cmd) > 0)
strcat(cmd, " ");
}
}
+ calc_dirs_n_files(relh, home, relhome, ctdldir);
get_config();
signal(SIGINT, cleanup);
listsub_generate_token(token);
- assoc_file_name(filename, sizeof filename, &qrbuf, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &qrbuf, ctdl_netcfg_dir);
/*
* Make sure the requested address isn't already subscribed
listsub_generate_token(token);
- assoc_file_name(filename, sizeof filename, &qrbuf, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &qrbuf, ctdl_netcfg_dir);
/*
* Make sure there's actually a subscription there to remove
* Now start scanning this room's netconfig file for the
* specified token.
*/
- assoc_file_name(filename, sizeof filename, &qrbuf, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &qrbuf, ctdl_netcfg_dir);
begin_critical_section(S_NETCONFIGS);
ncfp = fopen(filename, "r+");
if (ncfp != NULL) {
#include "serv_network.h"
#include "clientsocket.h"
#include "file_ops.h"
+#include "citadel_dirs.h"
#ifndef HAVE_SNPRINTF
#include "snprintf.h"
FILE *fp;
if (CtdlAccessCheck(ac_room_aide)) return;
- assoc_file_name(filename, sizeof filename, &CC->room, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
cprintf("%d Network settings for room #%ld <%s>\n",
LISTING_FOLLOWS,
CC->room.QRnumber, CC->room.QRname);
if (CtdlAccessCheck(ac_room_aide)) return;
CtdlMakeTempFileName(tempfilename, sizeof tempfilename);
- assoc_file_name(filename, sizeof filename, &CC->room, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
fp = fopen(tempfilename, "w");
if (fp == NULL) {
}
memset(&sc, 0, sizeof(struct SpoolControl));
- assoc_file_name(filename, sizeof filename, &CC->room, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
begin_critical_section(S_NETCONFIGS);
FILE *fp;
/* Grab the configuration line we're looking for */
- assoc_file_name(filename, sizeof filename, &CC->room, "netconfigs");
+ assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
begin_critical_section(S_NETCONFIGS);
fp = fopen(filename, "r");
if (fp == NULL) {
#include "domain.h"
#include "clientsocket.h"
#include "locate_host.h"
+#include "citadel_dirs.h"
#ifdef HAVE_OPENSSL
#include "serv_crypto.h"
char *serv_smtp_init(void)
{
- char filename[256];
CtdlRegisterServiceHook(config.c_smtp_port, /* SMTP MTA */
NULL,
smtp_command_loop,
NULL);
- snprintf(filename,
- sizeof filename,
- "%s/lmtp.sock",
- ctdl_run_dir);
CtdlRegisterServiceHook(0, /* local LMTP */
- filename,
+ file_lmtp_socket,
lmtp_greeting,
smtp_command_loop,
NULL);
- snprintf(filename,
- sizeof filename,
- "%s/lmtp-unfiltered.sock",
- ctdl_run_dir);
CtdlRegisterServiceHook(0, /* local LMTP */
- filename,
+ file_lmtp_unfiltered_socket,
lmtp_unfiltered_greeting,
smtp_command_loop,
NULL);
#include "database.h"
#include "housekeeping.h"
#include "tools.h"
+#include "citadel_dirs.c"
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
size_t size;
int relh=0;
int home=0;
- const char* basedir;
- char dirbuffer[PATH_MAX]="";
char relhome[PATH_MAX]="";
char ctdldir[PATH_MAX]=CTDLDIR;
}
- /* calculate all our path on a central place */
- /* where to keep our config */
-
-#define COMPUTE_DIRECTORY(SUBDIR) memcpy(dirbuffer,SUBDIR, sizeof dirbuffer);\
- snprintf(SUBDIR,sizeof SUBDIR, "%s%s%s%s%s%s%s", \
- (home&!relh)?ctdl_home_directory:basedir, \
- ((basedir!=ctdldir)&(home&!relh))?basedir:"/", \
- ((basedir!=ctdldir)&(home&!relh))?"/":"", \
- relhome, \
- (relhome[0]!='\0')?"/":"",\
- dirbuffer,\
- (dirbuffer[0]!='\0')?"/":"");
-
-#ifndef HAVE_ETC_DIR
- basedir=ctdldir;
-#else
- basedir=ETC_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_etc_dir);
-
-#ifndef HAVE_RUN_DIR
- basedir=ctdldir;
-#else
- basedir=RUN_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_run_dir);
-
-#ifndef HAVE_DATA_DIR
- basedir=ctdldir;
-#else
- basedir=DATA_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_bio_dir);
- COMPUTE_DIRECTORY(ctdl_bb_dir);
- COMPUTE_DIRECTORY(ctdl_data_dir);
- COMPUTE_DIRECTORY(ctdl_file_dir);
- COMPUTE_DIRECTORY(ctdl_hlp_dir);
- COMPUTE_DIRECTORY(ctdl_image_dir);
- COMPUTE_DIRECTORY(ctdl_info_dir);
- COMPUTE_DIRECTORY(ctdl_message_dir);
- COMPUTE_DIRECTORY(ctdl_usrpic_dir);
-#ifndef HAVE_SPOOL_DIR
- basedir=ctdldir;
-#else
- basedir=SPOOL_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_spool_dir);
- COMPUTE_DIRECTORY(ctdl_netout_dir);
- COMPUTE_DIRECTORY(ctdl_netin_dir);
-
+ calc_dirs_n_files(relh, home, relhome, ctdldir);
/* daemonize, if we were asked to */
if (running_as_daemon) {
#include "sysdep.h"
#include "config.h"
#include "tools.h"
+#include "citadel_dirs.h"
#ifdef HAVE_NEWT
#include <newt.h>
struct config config;
-/* CTDLDIR */
-char ctdl_home_directory[PATH_MAX] = "";
-char ctdl_bio_dir[PATH_MAX]="bio";
-char ctdl_bb_dir[PATH_MAX]="bitbucket";
-char ctdl_data_dir[PATH_MAX]="data";
-char ctdl_file_dir[PATH_MAX]="files";
-char ctdl_hlp_dir[PATH_MAX]="help";
-char ctdl_image_dir[PATH_MAX]="images";
-char ctdl_info_dir[PATH_MAX]="info";
-char ctdl_key_dir[PATH_MAX]="keys";
-char ctdl_message_dir[PATH_MAX]="messages";
-char ctdl_usrpic_dir[PATH_MAX]="userpics";
-char ctdl_etc_dir[PATH_MAX]="";
-char ctdl_run_dir[PATH_MAX]="";
-char ctdl_spool_dir[PATH_MAX]="network";
-char ctdl_netout_dir[PATH_MAX]="network/spoolout";
-char ctdl_netin_dir[PATH_MAX]="network/spoolin";
-
-
-char citadel_rc_file[PATH_MAX]="";
/* calculate all our path on a central place */
/* where to keep our config */
-#define COMPUTE_DIRECTORY(SUBDIR) memcpy(dirbuffer,SUBDIR, sizeof dirbuffer);\
- snprintf(SUBDIR,sizeof SUBDIR, "%s%s%s%s%s%s%s", \
- (home&!relh)?ctdl_home_directory:basedir, \
- ((basedir!=ctdldir)&(home&!relh))?basedir:"/", \
- ((basedir!=ctdldir)&(home&!relh))?"/":"", \
- relhome, \
- (relhome[0]!='\0')?"/":"",\
- dirbuffer,\
- (dirbuffer[0]!='\0')?"/":"");
-
char *setup_text[] = {
#ifndef HAVE_RUN_DIR
gid_t gid;
int relh=0;
int home=0;
- const char* basedir;
- char dirbuffer[PATH_MAX]="";
char relhome[PATH_MAX]="";
char ctdldir[PATH_MAX]=CTDLDIR;
else
safestrncpy(relhome, ctdl_home_directory,
sizeof relhome);
-
-#ifndef HAVE_ETC_DIR
- basedir=ctdldir;
-#else
- basedir=ETC_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_etc_dir);
-
-#ifndef HAVE_RUN_DIR
- basedir=ctdldir;
-#else
- basedir=RUN_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_run_dir);
-
-#ifndef HAVE_DATA_DIR
- basedir=ctdldir;
-#else
- basedir=DATA_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_bio_dir);
- COMPUTE_DIRECTORY(ctdl_bb_dir);
- COMPUTE_DIRECTORY(ctdl_data_dir);
- COMPUTE_DIRECTORY(ctdl_file_dir);
- COMPUTE_DIRECTORY(ctdl_hlp_dir);
- COMPUTE_DIRECTORY(ctdl_image_dir);
- COMPUTE_DIRECTORY(ctdl_info_dir);
- COMPUTE_DIRECTORY(ctdl_message_dir);
- COMPUTE_DIRECTORY(ctdl_usrpic_dir);
-#ifndef HAVE_SPOOL_DIR
- basedir=ctdldir;
-#else
- basedir=SPOOL_DIR;
-#endif
- COMPUTE_DIRECTORY(ctdl_spool_dir);
- COMPUTE_DIRECTORY(ctdl_netout_dir);
- COMPUTE_DIRECTORY(ctdl_netin_dir);
+ calc_dirs_n_files(relh, home, relhome, ctdldir);
if ((home) && (chdir(setup_directory) != 0)) {
important_message("Citadel Setup",
* to be when we rewrite it, because we replace the old file with a
* completely new copy.
*/
- snprintf(citadel_rc_file,
- sizeof citadel_rc_file,
- "%s/citadel.config",
- ctdl_etc_dir);
-
- if ((a = open(citadel_rc_file, O_WRONLY | O_CREAT | O_APPEND,
+ if ((a = open(file_citadel_config, O_WRONLY | O_CREAT | O_APPEND,
S_IRUSR | S_IWUSR)) == -1) {
display_error("setup: cannot append citadel.config");
cleanup(errno);
fclose(fp);
/* now we re-open it, and read the old or blank configuration */
- fp = fopen(citadel_rc_file, "rb");
+ fp = fopen(file_citadel_config, "rb");
if (fp == NULL) {
display_error("setup: cannot open citadel.config");
cleanup(errno);
chown(".", config.c_ctdluid, gid);
sleep(1);
progress("Setting file permissions", 1, 4);
- chown(citadel_rc_file, config.c_ctdluid, gid);
+ chown(file_citadel_config, config.c_ctdluid, gid);
sleep(1);
progress("Setting file permissions", 2, 4);
snprintf(aaa, sizeof aaa,
system(aaa);
sleep(1);
progress("Setting file permissions", 3, 4);
- chmod(citadel_rc_file, S_IRUSR | S_IWUSR);
+ chmod(file_citadel_config, S_IRUSR | S_IWUSR);
sleep(1);
progress("Setting file permissions", 4, 4);