Mailinglist: properly sanitize the roomname if we have to use it as sender.
[citadel.git] / citadel / modules / network / serv_netspool.c
index ca0d6181e3309362dd4c436cb16a1ec6664f8fb3..cbff2d41223804780b51b4b32426377a6c3aaf16 100644 (file)
@@ -224,6 +224,7 @@ void InspectQueuedRoom(SpoolControl **pSC,
 
 void CalcListID(SpoolControl *sc)
 {
+       StrBuf *RoomName;
        const char *err;
        int fd;
        struct CitContext *CCC = CC;
@@ -233,7 +234,7 @@ void CalcListID(SpoolControl *sc)
        assoc_file_name(filename, sizeof filename, &sc->room, ctdl_info_dir);
        fd = open(filename, 0);
 
-       if (fd != 0) {
+       if (fd > 0) {
                struct stat stbuf;
 
                if ((fstat(fd, &stbuf) == 0) &&
@@ -264,6 +265,9 @@ void CalcListID(SpoolControl *sc)
        }
 
        StrBufAppendBufPlain(sc->ListID, HKEY("<"), 0);
+       RoomName = NewStrBufPlain (sc->room.QRname, -1);
+       StrBufAsciify(RoomName, '_');
+       StrBufReplaceChars(RoomName, ' ', '_');
 
        if (StrLength(sc->Users[roommailalias]) > 0)
        {
@@ -282,9 +286,10 @@ void CalcListID(SpoolControl *sc)
        else
        {
                StrBufAppendBufPlain(sc->ListID, HKEY("room_"), 0);
-               StrBufAppendBufPlain(sc->ListID, sc->room.QRname, -1, 0);
+               StrBufAppendBuf(sc->ListID, RoomName, 0);
                StrBufAppendBufPlain(sc->ListID, HKEY("."), 0);
                StrBufAppendBufPlain(sc->ListID, config.c_fqdn, -1, 0);
+               FreeStrBuf(&RoomName);
                /*
                 * this used to be:
                 * roomname <Room-Number.list-id.fqdn>
@@ -299,12 +304,11 @@ void CalcListID(SpoolControl *sc)
        {
                sc->Users[roommailalias] = NewStrBuf();
                
-               StrBufPrintf(sc->Users[roommailalias],
-                            "room_%s@%s",
-                            CCC->room.QRname,
-                            config.c_fqdn);
+               StrBufAppendBufPlain(sc->Users[roommailalias], HKEY("room_"), 0);
+               StrBufAppendBuf(sc->Users[roommailalias], RoomName, 0);
+               StrBufAppendBufPlain(sc->Users[roommailalias], HKEY("@"), 0);
+               StrBufAppendBufPlain(sc->Users[roommailalias], config.c_fqdn, -1, 0);
 
-               StrBufAsciify(sc->Users[roommailalias], '_');
                StrBufLowerCase(sc->Users[roommailalias]);
        }
 
@@ -395,6 +399,7 @@ void network_spoolout_room(SpoolControl *sc)
  */
 void network_process_buffer(char *buffer, long size, HashList *working_ignetcfg, HashList *the_netmap, int *netmap_changed)
 {
+       long len;
        struct CitContext *CCC = CC;
        StrBuf *Buf = NULL;
        struct CtdlMessage *msg = NULL;
@@ -433,8 +438,10 @@ void network_process_buffer(char *buffer, long size, HashList *working_ignetcfg,
 
        for (pos = 3; pos < size; ++pos) {
                field = buffer[pos];
-               msg->cm_fields[field] = strdup(&buffer[pos+1]);
-               pos = pos + strlen(&buffer[(int)pos]);
+               len = strlen(buffer + pos + 1);
+               msg->cm_fields[field] = malloc(len + 1);
+               memcpy (msg->cm_fields[field], buffer+ pos + 1, len + 1);
+               pos = pos + len + 1;
        }
 
        /* Check for message routing */
@@ -924,7 +931,7 @@ void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netm
                        if (err == NULL) {
                                unlink(filename);
                                QN_syslog(LOG_DEBUG,
-                                         "Spoolfile %s now %ld k\n",
+                                         "Spoolfile %s now "SIZE_T_FMT" k\n",
                                          spooloutfilename,
                                          (dsize + fsize)/1024
                                        );