From f614f64351a5df98ebc837c973772cebb8171bd4 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 27 Jan 2021 15:52:14 -0500 Subject: [PATCH] Officially declare war on LHFS --- appimage/citadel.AppDir/citadel.desktop | 2 +- appimage/ctdlvisor.c | 2 +- citadel/citserver.c | 5 ++- citadel/config.c | 9 ----- citadel/include/citadel_dirs.h | 2 - citadel/modules/bio/serv_bio.c | 8 ++-- citadel/server_main.c | 26 +++---------- citadel/utillib/citadel_dirs.c | 52 +++++++------------------ citadel/utils/setup.c | 2 +- 9 files changed, 30 insertions(+), 78 deletions(-) diff --git a/appimage/citadel.AppDir/citadel.desktop b/appimage/citadel.AppDir/citadel.desktop index 4560c31dc..8ac9118d4 100644 --- a/appimage/citadel.AppDir/citadel.desktop +++ b/appimage/citadel.AppDir/citadel.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Version=1.0 Type=Application -Categories=Network +Categories=Network; Terminal=true Exec=AppRun Name=Citadel diff --git a/appimage/ctdlvisor.c b/appimage/ctdlvisor.c index 4bc4696b0..041d1a52c 100644 --- a/appimage/ctdlvisor.c +++ b/appimage/ctdlvisor.c @@ -107,7 +107,7 @@ pid_t start_citadel() { sprintf(bin, "%s/usr/local/citadel/citserver", getenv("APPDIR")); pid_t pid = fork(); if (pid == 0) { - fprintf(stderr, "ctdlvisor: executing %s\n", bin); + fprintf(stderr, "ctdlvisor: executing %s with data directory %s\n", bin, getenv("CTDL_DIR")); detach_from_tty(); execlp(bin, "citserver", "-x9", "-h", getenv("CTDL_DIR"), NULL); exit(errno); diff --git a/citadel/citserver.c b/citadel/citserver.c index a071b2b72..d1271e5f9 100644 --- a/citadel/citserver.c +++ b/citadel/citserver.c @@ -54,12 +54,13 @@ void master_startup(void) syslog(LOG_INFO, "Checking directory access"); if ((pw = getpwuid(ctdluid)) == NULL) { gid = getgid(); - } else { + } + else { gid = pw->pw_gid; } if (create_run_directories(CTDLUID, gid) != 0) { - syslog(LOG_EMERG, "failed to access & create directories"); + syslog(LOG_EMERG, "citserver: failed to access and create directories"); exit(1); } syslog(LOG_INFO, "Opening databases"); diff --git a/citadel/config.c b/citadel/config.c index 81f93989b..f3357d9d7 100644 --- a/citadel/config.c +++ b/citadel/config.c @@ -232,15 +232,6 @@ void initialize_config_system(void) { exit(CTDLEXIT_LIBCITADEL); } - //if (chdir(ctdl_bbsbase_dir) != 0) { - //fprintf(stderr, - //"This program could not be started.\nUnable to change directory to %s\nError: %s\n", - //ctdl_bbsbase_dir, - //strerror(errno) - //); - //exit(CTDLEXIT_HOME); - //} - memset(&lconfig, 0, sizeof(struct legacy_config)); cfp = fopen(file_citadel_config, "rb"); if (cfp != NULL) { diff --git a/citadel/include/citadel_dirs.h b/citadel/include/citadel_dirs.h index ee9cf444b..b654f17db 100644 --- a/citadel/include/citadel_dirs.h +++ b/citadel/include/citadel_dirs.h @@ -8,7 +8,6 @@ extern char ctdl_home_directory[PATH_MAX]; /* all our directories */ -extern char ctdl_bio_dir[PATH_MAX]; extern char ctdl_data_dir[PATH_MAX]; extern char ctdl_file_dir[PATH_MAX]; extern char ctdl_shared_dir[PATH_MAX]; @@ -17,7 +16,6 @@ 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_autoetc_dir[PATH_MAX]; extern char ctdl_run_dir[PATH_MAX]; extern char ctdl_spool_dir[PATH_MAX]; diff --git a/citadel/modules/bio/serv_bio.c b/citadel/modules/bio/serv_bio.c index 4246f1a3e..e6e1dd20b 100644 --- a/citadel/modules/bio/serv_bio.c +++ b/citadel/modules/bio/serv_bio.c @@ -2,7 +2,7 @@ * This module implementsserver commands related to the display and * manipulation of user "bio" files. * - * Copyright (c) 1987-2020 by the citadel.org team + * Copyright (c) 1987-2021 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -155,7 +155,7 @@ void import_old_bio_files(void) syslog(LOG_DEBUG, "Importing old style bio files into the message base"); - filedir = opendir (ctdl_bio_dir); + filedir = opendir("bio"); if (filedir == NULL) { return; } @@ -192,7 +192,7 @@ void import_old_bio_files(void) (filedir_entry->d_name[1] == '.')) continue; - snprintf(path, PATH_MAX, "%s/%s", ctdl_bio_dir, filedir_entry->d_name); + snprintf(path, PATH_MAX, "bio/%s", filedir_entry->d_name); if (d_type == DT_UNKNOWN) { if (lstat(path, &s) == 0) { d_type = IFTODT(s.st_mode); @@ -211,7 +211,7 @@ void import_old_bio_files(void) } } closedir(filedir); - rmdir(ctdl_bio_dir); + rmdir("bio"); } diff --git a/citadel/server_main.c b/citadel/server_main.c index b08d070f3..ece0e3cb8 100644 --- a/citadel/server_main.c +++ b/citadel/server_main.c @@ -236,29 +236,13 @@ int main(int argc, char **argv) syslog(LOG_INFO, " "); syslog(LOG_INFO, "%s", libcitadel_version_string()); -#ifdef HAVE_RUN_DIR - /* on some dists rundir gets purged on startup. so we need to recreate it. */ - - if (stat(ctdl_run_dir, &filestats) == -1) { -#ifdef HAVE_GETPWUID_R -#ifdef SOLARIS_GETPWUID - pwp = getpwuid_r(ctdluid, &pw, pwbuf, sizeof(pwbuf)); -#else // SOLARIS_GETPWUID - getpwuid_r(ctdluid, &pw, pwbuf, sizeof(pwbuf), &pwp); -#endif // SOLARIS_GETPWUID -#else // HAVE_GETPWUID_R - pwp = NULL; -#endif // HAVE_GETPWUID_R - - if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST)) { - syslog(LOG_ERR, "main: unable to create run directory [%s]: %m", ctdl_run_dir); - } + if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST)) { + syslog(LOG_ERR, "main: unable to create run directory [%s]: %m", ctdl_run_dir); + } - if (chown(ctdl_run_dir, ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0) { - syslog(LOG_ERR, "main: unable to set the access rights for [%s]: %m", ctdl_run_dir); - } + if (chown(ctdl_run_dir, ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0) { + syslog(LOG_ERR, "main: unable to set the access rights for [%s]: %m", ctdl_run_dir); } -#endif ctdl_lockfile(1); init_sysdep(); // Initialize... diff --git a/citadel/utillib/citadel_dirs.c b/citadel/utillib/citadel_dirs.c index c7407c4a2..a20db278f 100644 --- a/citadel/utillib/citadel_dirs.c +++ b/citadel/utillib/citadel_dirs.c @@ -1,7 +1,7 @@ /* * citadel_dirs.c : calculate pathnames for various files used in the Citadel system * - * Copyright (c) 1987-2018 by the citadel.org team + * Copyright (c) 1987-2021 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. @@ -26,7 +26,6 @@ /* our directories... */ char ctdl_home_directory[PATH_MAX] = ""; -char ctdl_bio_dir[PATH_MAX]="bio"; char ctdl_data_dir[PATH_MAX]="data"; char ctdl_file_dir[PATH_MAX]="files"; char ctdl_shared_dir[PATH_MAX]=""; @@ -36,7 +35,6 @@ char ctdl_key_dir[PATH_MAX]=SSL_DIR; char ctdl_message_dir[PATH_MAX]="messages"; char ctdl_usrpic_dir[PATH_MAX]="userpics"; char ctdl_bbsbase_dir[PATH_MAX]=""; -char ctdl_etc_dir[PATH_MAX]=""; char ctdl_autoetc_dir[PATH_MAX]=""; /* attention! this may be non volatile on some oses */ char ctdl_run_dir[PATH_MAX]=""; @@ -116,9 +114,7 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, basedir=ETC_DIR; #endif COMPUTE_DIRECTORY(ctdl_netcfg_dir); - COMPUTE_DIRECTORY(ctdl_etc_dir); StripSlashes(ctdl_netcfg_dir, 1); - StripSlashes(ctdl_etc_dir, 1); #ifndef HAVE_UTILBIN_DIR basedir=ctdldir; @@ -149,7 +145,6 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, #else basedir=DATA_DIR; #endif - COMPUTE_DIRECTORY(ctdl_bio_dir); COMPUTE_DIRECTORY(ctdl_data_dir); COMPUTE_DIRECTORY(ctdl_file_dir); COMPUTE_DIRECTORY(ctdl_image_dir); @@ -157,7 +152,6 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, COMPUTE_DIRECTORY(ctdl_usrpic_dir); COMPUTE_DIRECTORY(ctdl_bbsbase_dir); - StripSlashes(ctdl_bio_dir, 1); StripSlashes(ctdl_data_dir, 1); StripSlashes(ctdl_file_dir, 1); StripSlashes(ctdl_image_dir, 1); @@ -258,15 +252,10 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, snprintf(file_mail_aliases, sizeof file_mail_aliases, "%smail.aliases", -#ifdef HAVE_ETC_DIR - ctdl_etc_dir -#else ctdl_spool_dir -#endif ); StripSlashes(file_mail_aliases, 0); - DBG_PRINT(ctdl_bio_dir); DBG_PRINT(ctdl_data_dir); DBG_PRINT(ctdl_file_dir); DBG_PRINT(ctdl_image_dir); @@ -274,7 +263,6 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, DBG_PRINT(ctdl_key_dir); DBG_PRINT(ctdl_message_dir); DBG_PRINT(ctdl_usrpic_dir); - DBG_PRINT(ctdl_etc_dir); DBG_PRINT(ctdl_run_dir); DBG_PRINT(ctdl_spool_dir); DBG_PRINT(ctdl_netdigest_dir); @@ -304,33 +292,27 @@ void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, /* * Generate an associated file name for a room */ -size_t assoc_file_name(char *buf, size_t n, - struct ctdlroom *qrbuf, const char *prefix) -{ +size_t assoc_file_name(char *buf, size_t n, struct ctdlroom *qrbuf, const char *prefix) { return snprintf(buf, n, "%s%ld", prefix, qrbuf->QRnumber); } -void remove_digest_file(struct ctdlroom *room) -{ + +void remove_digest_file(struct ctdlroom *room) { char buf[PATH_MAX]; - snprintf(buf, PATH_MAX, "%s/%ld.eml", - ctdl_netdigest_dir, - room->QRnumber); + snprintf(buf, PATH_MAX, "%s/%ld.eml", ctdl_netdigest_dir, room->QRnumber); StripSlashes(buf, 0); unlink(buf); } -FILE *create_digest_file(struct ctdlroom *room, int forceCreate) -{ + +FILE *create_digest_file(struct ctdlroom *room, int forceCreate) { struct stat stbuf; char fn[PATH_MAX]; int exists; FILE *fp; - snprintf(fn, PATH_MAX, "%s/%ld.eml", - ctdl_netdigest_dir, - room->QRnumber); + snprintf(fn, PATH_MAX, "%s/%ld.eml", ctdl_netdigest_dir, room->QRnumber); StripSlashes(fn, 0); exists = stat(fn, &stbuf); @@ -339,21 +321,17 @@ FILE *create_digest_file(struct ctdlroom *room, int forceCreate) fp = fopen(fn, "w+"); if (fp == NULL) { - syslog(LOG_EMERG, - "failed to create digest file %s: %s", - fn, - strerror(errno)); + syslog(LOG_ERR, "failed to create digest file %s: %s", fn, strerror(errno)); } return fp; } -int create_dir(char *which, long ACCESS, long UID, long GID) -{ +int create_dir(char *which, long ACCESS, long UID, long GID) { int rv; rv = mkdir(which, ACCESS); if ((rv == -1) && (errno != EEXIST)) { - syslog(LOG_EMERG, + syslog(LOG_ERR, "failed to create directory %s: %s", which, strerror(errno)); @@ -361,7 +339,7 @@ int create_dir(char *which, long ACCESS, long UID, long GID) } rv = chmod(which, ACCESS); if (rv == -1) { - syslog(LOG_EMERG, + syslog(LOG_ERR, "failed to set permissions for directory %s: %s", which, strerror(errno)); @@ -369,7 +347,7 @@ int create_dir(char *which, long ACCESS, long UID, long GID) } rv = chown(which, UID, GID); if (rv == -1) { - syslog(LOG_EMERG, + syslog(LOG_ERR, "failed to set owner for directory %s: %s", which, strerror(errno)); @@ -378,8 +356,8 @@ int create_dir(char *which, long ACCESS, long UID, long GID) return rv; } -int create_run_directories(long UID, long GID) -{ + +int create_run_directories(long UID, long GID) { int rv = 0; rv += create_dir(ctdl_message_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1); rv += create_dir(ctdl_file_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1); diff --git a/citadel/utils/setup.c b/citadel/utils/setup.c index 09ae02b3d..710edfad5 100644 --- a/citadel/utils/setup.c +++ b/citadel/utils/setup.c @@ -507,7 +507,7 @@ void check_xinetd_entry(void) ); fclose(fp); - /* Now try to restart the service. This will not have the intended effect on Solaris, but who the hell uses Solaris anymore? */ + /* Now try to restart the service. This will not have the intended effect on Solaris, but who uses Solaris anymore? */ rv = system("systemctl restart xinetd >/dev/null 2>&1"); if (rv != 0) { rv = system("service xinetd restart >/dev/null 2>&1"); -- 2.30.2