From 53d8e6f8d1f18b0085dcfd46d1fc8640381513bc Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 10 Feb 2021 14:56:30 -0500 Subject: [PATCH] Write lastsent back to netconfig after sending list messages --- citadel/ctdl_module.h | 23 ++--------------- .../modules/listdeliver/serv_listdeliver.c | 25 +++++++++++++++---- citadel/netconfig.c | 6 ++--- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/citadel/ctdl_module.h b/citadel/ctdl_module.h index 9c6a90f22..0ddfc6970 100644 --- a/citadel/ctdl_module.h +++ b/citadel/ctdl_module.h @@ -136,13 +136,9 @@ void CtdlUnregisterServiceHook(int tcp_port, void (*h_async_function) (void) ); -void CtdlRegisterFixedOutputHook(char *content_type, - void (*output_function) (char *supplied_data, int len) -); +void CtdlRegisterFixedOutputHook(char *content_type, void (*output_function) (char *supplied_data, int len)); void CtdlUnRegisterFixedOutputHook(char *content_type); - void CtdlRegisterMaintenanceThread(char *name, void *(*thread_proc) (void *arg)); - void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), char *name); /* @@ -152,20 +148,6 @@ void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), c void CtdlDisableHouseKeeping(void); void CtdlEnableHouseKeeping(void); -/* - * Directory services hooks for LDAP etc - */ - -#define DIRECTORY_USER_DEL 1 // Delete a user entry -#define DIRECTORY_CREATE_HOST 2 // Create a host entry if not already there. -#define DIRECTORY_CREATE_OBJECT 3 // Create a new object for directory entry -#define DIRECTORY_ATTRIB_ADD 4 // Add an attribute to the directory entry object -#define DIRECTORY_SAVE_OBJECT 5 // Save the object to the directory service -#define DIRECTORY_FREE_OBJECT 6 // Free the object and its attributes - -int CtdlRegisterDirectoryServiceFunc(int (*func)(char *cn, char *ou, void **object), int cmd, char *module); -int CtdlDoDirectoryServiceFunc(char *cn, char *ou, void **object, char *module, int cmd); - /* TODODRW: This needs to be changed into a hook type interface * for now we have this horrible hack */ @@ -220,9 +202,8 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf, int *res void CtdlPutRoomLock(struct ctdlroom *qrbuf); typedef void (*ForEachRoomCallBack)(struct ctdlroom *EachRoom, void *out_data); void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data); -typedef void (*ForEachRoomNetCfgCallBack)(struct ctdlroom *EachRoom, void *out_data, char *cfg); char *LoadRoomNetConfigFile(long roomnum); -void SaveChangedConfigs(void); +void SaveRoomNetConfigFile(long roomnum, const char *raw_netconfig); void CtdlDeleteRoom(struct ctdlroom *qrbuf); int CtdlRenameRoom(char *old_name, char *new_name, int new_floor); void CtdlUserGoto (char *where, int display_result, int transiently, int *msgs, int *new, long *oldest, long *newest); diff --git a/citadel/modules/listdeliver/serv_listdeliver.c b/citadel/modules/listdeliver/serv_listdeliver.c index 7591822bd..039937e67 100644 --- a/citadel/modules/listdeliver/serv_listdeliver.c +++ b/citadel/modules/listdeliver/serv_listdeliver.c @@ -104,6 +104,7 @@ void listdeliver_do_msg(long msgnum, void *userdata) { */ void listdeliver_sweep_room(char *roomname) { char *netconfig = NULL; + char *newnetconfig = NULL; long lastsent = 0; char buf[SIZ]; int config_lines; @@ -145,16 +146,30 @@ void listdeliver_sweep_room(char *roomname) { if (number_of_messages_processed > 0) { syslog(LOG_DEBUG, "listdeliver: new lastsent is %ld", ld.msgnum); - // FIXME write lastsent back to netconfig - syslog(LOG_DEBUG, "\033[31mBEFORE:<%s>\033[0m", netconfig); - syslog(LOG_DEBUG, "\033[32mAFTER:<%s>\033[0m", netconfig); - + // Update this room's netconfig with the updated lastsent + netconfig = LoadRoomNetConfigFile(CC->room.QRnumber); + if (!netconfig) { + netconfig = strdup(""); + } + // The new netconfig begins with the new lastsent directive + newnetconfig = malloc(strlen(netconfig) + 1024); + sprintf(newnetconfig, "lastsent|%ld\n", ld.msgnum); + // And then we append all of the old netconfig, minus the old lastsent. Also omit blank lines. + config_lines = num_tokens(netconfig, '\n'); + for (i=0; iroom.QRnumber, newnetconfig); + free(newnetconfig); } } - free(netconfig); } diff --git a/citadel/netconfig.c b/citadel/netconfig.c index ff60c1027..93b18cb2a 100644 --- a/citadel/netconfig.c +++ b/citadel/netconfig.c @@ -47,7 +47,7 @@ void netcfg_keyname(char *keybuf, long roomnum) { /* * Given a room number and a textual netconfig, convert to base64 and write to the configdb */ -void write_netconfig_to_configdb(long roomnum, const char *raw_netconfig) { +void SaveRoomNetConfigFile(long roomnum, const char *raw_netconfig) { char keyname[25]; char *enc; int enc_len; @@ -133,7 +133,7 @@ void cmd_snet(char *argbuf) { } FreeStrBuf(&Line); - write_netconfig_to_configdb(CC->room.QRnumber, ChrPtr(TheConfig)); + SaveRoomNetConfigFile(CC->room.QRnumber, ChrPtr(TheConfig)); FreeStrBuf(&TheConfig); } @@ -169,7 +169,7 @@ void convert_legacy_netcfg_files(void) if (v) { rewind(fp); if (fread(v, len, 1, fp)) { - write_netconfig_to_configdb(roomnum, v); + SaveRoomNetConfigFile(roomnum, v); unlink(filename); } free(v); -- 2.30.2