- on citserver start check whether all our required directories are present, if not create them.
- only create digest spool files if we actualy need them, and only remove them once we sent it.
extern void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, int dbg);
extern void calc_dirs_n_files(int relh, int home, const char *relhome, char *ctdldir, int dbg);
-extern void create_run_directories(long UID, long GUID);
+extern int create_run_directories(long UID, long GUID);
extern size_t assoc_file_name(char *buf,
size_t n,
struct ctdlroom *qrbuf,
const char *prefix);
extern size_t assoc_file_name(char *buf,
size_t n,
struct ctdlroom *qrbuf,
const char *prefix);
-extern FILE *create_digest_file(struct ctdlroom *room);
+extern FILE *create_digest_file(struct ctdlroom *room, int forceCreate);
extern void remove_digest_file(struct ctdlroom *room);
#endif /* __CITADEL_DIRS_H */
extern void remove_digest_file(struct ctdlroom *room);
#endif /* __CITADEL_DIRS_H */
struct CtdlMessage *msg = NULL;
struct CtdlMessage *msg = NULL;
- /*
- * Process digest recipients
- */
- if ((sc->Users[digestrecp] == NULL)||
- (sc->digestfp == NULL))
+ if (sc->Users[digestrecp] == NULL)
+ /* If there are digest recipients, we have to build a digest */
+ if (sc->digestfp == NULL) {
+
+ sc->digestfp = create_digest_file(&sc->room, 1);
+
+ if (sc->digestfp == NULL)
+ return;
+
+ sc->haveDigest = ftell(sc->digestfp) > 0;
+ if (!sc->haveDigest) {
+ fprintf(sc->digestfp, "Content-type: text/plain\n\n");
+ }
+ sc->haveDigest = 1;
+ }
+
msg = CM_Duplicate(omsg);
if (msg != NULL) {
sc->haveDigest = 1;
msg = CM_Duplicate(omsg);
if (msg != NULL) {
sc->haveDigest = 1;
syslog(LOG_INFO, "Networking started for <%s>\n", CCC->room.QRname);
syslog(LOG_INFO, "Networking started for <%s>\n", CCC->room.QRname);
- /* If there are digest recipients, we have to build a digest */
- if (sc->Users[digestrecp] != NULL) {
-
- sc->digestfp = create_digest_file(&sc->room);
- sc->haveDigest = ftell(sc->digestfp) > 0;
- if (!sc->haveDigest) {
- fprintf(sc->digestfp, "Content-type: text/plain\n\n");
- }
- }
-
CalcListID(sc);
/* remember where we started... */
CalcListID(sc);
/* remember where we started... */
/* If we wrote a digest, deliver it and then close it */
/* If we wrote a digest, deliver it and then close it */
- if (sc->digestfp != NULL) {
+ if (sc->Users[digestrecp] != NULL) {
time_t now = time(NULL);
time_t secs_today = now % (24 * 60 * 60);
long delta = 0;
time_t now = time(NULL);
time_t secs_today = now % (24 * 60 * 60);
long delta = 0;
delta = (24 * 60 * 60) - delta;
}
delta = (24 * 60 * 60) - delta;
}
- if (sc->haveDigest &&
- (secs_today < 300) &&
- (delta < 300) )
+ if ((secs_today < 300) &&
+ (delta < 300))
- last_digest_delivery = now;
- fprintf(sc->digestfp,
- " -----------------------------------"
- "------------------------------------"
- "-------\n"
- "You are subscribed to the '%s' "
- "list.\n"
- "To post to the list: %s\n",
- CCC->room.QRname, buf
- );
- network_deliver_digest(sc); /* deliver */
+ if (sc->digestfp == NULL) {
+ sc->digestfp = create_digest_file(&sc->room, 0);
+ }
+ if (sc->digestfp != NULL) {
+ last_digest_delivery = now;
+ fprintf(sc->digestfp,
+ " -----------------------------------"
+ "------------------------------------"
+ "-------\n"
+ "You are subscribed to the '%s' "
+ "list.\n"
+ "To post to the list: %s\n",
+ CCC->room.QRname, buf
+ );
+ network_deliver_digest(sc); /* deliver */
+ remove_digest_file(&sc->room);
+ }
+ }
+ if (sc->digestfp != NULL) {
fclose(sc->digestfp);
sc->digestfp = NULL;
fclose(sc->digestfp);
sc->digestfp = NULL;
- remove_digest_file(&sc->room);
}
/* Now rewrite the config file */
}
/* Now rewrite the config file */
#include <limits.h>
#include <time.h>
#include <errno.h>
#include <limits.h>
#include <time.h>
#include <errno.h>
#include <libcitadel.h>
#include "citadel.h"
#include <libcitadel.h>
#include "citadel.h"
+#include "citadel_dirs.h"
/* our directories... */
char ctdl_home_directory[PATH_MAX] = "";
/* our directories... */
char ctdl_home_directory[PATH_MAX] = "";
ctdl_netdigest_dir,
room->QRnumber);
StripSlashes(buf, 0);
ctdl_netdigest_dir,
room->QRnumber);
StripSlashes(buf, 0);
- fprintf(stderr, "----> %s \n", buf);
-FILE *create_digest_file(struct ctdlroom *room)
+FILE *create_digest_file(struct ctdlroom *room, int forceCreate)
+ struct stat stbuf;
+ char fn[PATH_MAX];
+ int exists;
- snprintf(buf, PATH_MAX, "%s/%ld.eml",
+ snprintf(fn, PATH_MAX, "%s/%ld.eml",
ctdl_netdigest_dir,
room->QRnumber);
ctdl_netdigest_dir,
room->QRnumber);
- StripSlashes(buf, 0);
- fprintf(stderr, "----> %s \n", buf);
+ StripSlashes(fn, 0);
+
+ exists = stat(fn, &stbuf);
+ if (!forceCreate && (exists == -1))
+ return NULL;
+ syslog(LOG_EMERG,
+ "failed to create digest file %s: %s",
+ fn,
+ strerror(errno));
{
int rv;
rv = mkdir(which, ACCESS);
{
int rv;
rv = mkdir(which, ACCESS);
- if ((rv == -1) && (errno == EEXIST))
+ if ((rv == -1) && (errno != EEXIST)) {
+ syslog(LOG_EMERG,
+ "failed to create directory %s: %s",
+ which,
+ strerror(errno));
rv = chmod(which, ACCESS);
rv = chmod(which, ACCESS);
+ if (rv == -1) {
+ syslog(LOG_EMERG,
+ "failed to set permissions for directory %s: %s",
+ which,
+ strerror(errno));
rv = chown(which, UID, GID);
rv = chown(which, UID, GID);
+ if (rv == -1) {
+ syslog(LOG_EMERG,
+ "failed to set owner for directory %s: %s",
+ which,
+ strerror(errno));
+ return rv;
+ }
- create_run_directories(atoi(configs[69]), gid);
+ if (create_run_directories(atoi(configs[69]), gid) != 0) {
+ display_error("%s\n",
+ _("failed to create directories"));
+ }
+
activity = _("Reconfiguring Citadel server");
progress(activity, 0, NUM_CONFIGS+3);
activity = _("Reconfiguring Citadel server");
progress(activity, 0, NUM_CONFIGS+3);