]> code.citadel.org Git - citadel.git/blobdiff - citadel/room_ops.c
- port to Cygwin (DLL support, etc.)
[citadel.git] / citadel / room_ops.c
index c13b8d830e31753fc7b080a450af491dda362b97..d94fad48d77a8c10e61c6406327de3dee3d7cd4a 100644 (file)
@@ -4,17 +4,34 @@
  * Server functions which perform operations on room objects.
  *
  */
+
+#ifdef DLL_EXPORT
+#define IN_LIBCIT
+#endif
+
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <sys/stat.h>
 #include <string.h>
-#include <time.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 <limits.h>
 #include <errno.h>
 #include "citadel.h"
 #include "server.h"
+#include "dynloader.h"
 #include "database.h"
 #include "config.h"
 #include "room_ops.h"
@@ -113,7 +130,7 @@ int CtdlRoomAccess(struct quickroom *roombuf, struct usersupp *userbuf)
        }
 
 NEWMSG:        /* By the way, we also check for the presence of new messages */
-       if ((roombuf->QRhighest) > (vbuf.v_lastseen)) {
+       if (is_msg_in_mset(vbuf.v_seen, roombuf->QRhighest) == 0) {
                retval = retval | UA_HASNEWMSGS;
        }
        return (retval);
@@ -343,7 +360,6 @@ void ForEachRoom(void (*CallBack) (struct quickroom *EachRoom, void *out_data),
        struct quickroom qrbuf;
        struct cdbdata *cdbqr;
 
-       cdb_begin_transaction();
        cdb_rewind(CDB_QUICKROOM);
 
        while (cdbqr = cdb_next_item(CDB_QUICKROOM), cdbqr != NULL) {
@@ -356,7 +372,6 @@ void ForEachRoom(void (*CallBack) (struct quickroom *EachRoom, void *out_data),
                if (qrbuf.QRflags & QR_INUSE)
                        (*CallBack)(&qrbuf, in_data);
        }
-       cdb_end_transaction();
 }
 
 
@@ -698,7 +713,7 @@ void usergoto(char *where, int display_result, int *retmsgs, int *retnew)
        if (num_msgs > 0) for (a = 0; a < num_msgs; ++a) {
                if (msglist[a] > 0L) {
                        ++total_messages;
-                       if (msglist[a] > vbuf.v_lastseen) {
+                       if (is_msg_in_mset(vbuf.v_seen, msglist[a]) == 0) {
                                ++new_messages;
                        }
                }
@@ -801,7 +816,8 @@ void cmd_goto(char *gargs)
                if (ok == 1) {
                        if ((QRscratch.QRflags & QR_PASSWORDED) &&
                            ((ra & UA_KNOWN) == 0) &&
-                           (strcasecmp(QRscratch.QRpasswd, password))
+                           (strcasecmp(QRscratch.QRpasswd, password)) &&
+                           (CC->usersupp.axlevel < 6)
                            ) {
                                cprintf("%d wrong or missing passwd\n",
                                        ERROR + PASSWORD_REQUIRED);
@@ -809,7 +825,9 @@ void cmd_goto(char *gargs)
                        } else if ((QRscratch.QRflags & QR_PRIVATE) &&
                                   ((QRscratch.QRflags & QR_PASSWORDED) == 0) &&
                                   ((QRscratch.QRflags & QR_GUESSNAME) == 0) &&
-                                  ((ra & UA_KNOWN) == 0)) {
+                                  ((ra & UA_KNOWN) == 0) &&
+                                  (CC->usersupp.axlevel < 6)
+                                  ) {
                                goto NOPE;
                        } else {
                                usergoto(towhere, 1, NULL, NULL);
@@ -827,7 +845,6 @@ void cmd_whok(void)
        struct usersupp temp;
        struct cdbdata *cdbus;
 
-       cdb_begin_transaction();
        getuser(&CC->usersupp, CC->curr_user);
        if (CtdlAccessCheck(ac_room_aide)) return;
 
@@ -843,7 +860,6 @@ void cmd_whok(void)
                    )
                        cprintf("%s\n", temp.fullname);
        }
-       cdb_end_transaction();
        cprintf("000\n");
 }
 
@@ -1323,11 +1339,6 @@ unsigned create_room(char *new_room_name,
         */
        if (!really_create) return (qrbuf.QRflags);
 
-       /* cdb_begin_transaction();  commented out because a transaction
-          is already open when creating __CtdlSMTPspoolout__ while
-          initializing serv_smtp.c
-        */
-
        qrbuf.QRnumber = get_new_room_number();
        qrbuf.QRhighest = 0L;   /* No messages in this room yet */
        time(&qrbuf.QRgen);     /* Use a timestamp as the generation number */
@@ -1350,7 +1361,6 @@ unsigned create_room(char *new_room_name,
        lputuser(&CC->usersupp);
 
        /* resume our happy day */
-       /* cdb_end_transaction(); */
        return (qrbuf.QRflags);
 }