-void CalcListID(SpoolControl *sc)
-{
- const char *err;
- int fd;
- struct CitContext *CCC = CC;
- char filename[PATH_MAX];
-#define MAX_LISTIDLENGTH 150
-
- assoc_file_name(filename, sizeof filename, &sc->room, ctdl_info_dir);
- fd = open(filename, 0);
-
- if (fd != 0) {
- struct stat stbuf;
-
- fstat(fd, &stbuf);
- if (stbuf.st_size > 0)
- {
- sc->RoomInfo = NewStrBufPlain(NULL, stbuf.st_size + 1);
- StrBufReadBLOB(sc->RoomInfo, &fd, 0, stbuf.st_size, &err);
- }
- close(fd);
- }
-
- sc->ListID = NewStrBufPlain(NULL, 1024);
- if (StrLength(sc->RoomInfo) > 0)
- {
- const char *Pos = NULL;
- StrBufSipLine(sc->ListID, sc->RoomInfo, &Pos);
-
- if (StrLength(sc->ListID) > MAX_LISTIDLENGTH)
- {
- StrBufCutAt(sc->ListID, MAX_LISTIDLENGTH, NULL);
- StrBufAppendBufPlain(sc->ListID, HKEY("..."), 0);
- }
- StrBufAsciify(sc->ListID, ' ');
- }
- else
- {
- StrBufAppendBufPlain(sc->ListID, CCC->room.QRname, -1, 0);
- }
-
- StrBufAppendBufPlain(sc->ListID, HKEY("<"), 0);
-
- if (StrLength(sc->Users[roommailalias]) > 0)
- {
- long Pos;
- const char *AtPos;
-
- Pos = StrLength(sc->ListID);
- StrBufAppendBuf(sc->ListID, sc->Users[roommailalias], 0);
- AtPos = strchr(ChrPtr(sc->ListID) + Pos, '@');
-
- if (AtPos != NULL)
- {
- StrBufPeek(sc->ListID, AtPos, 0, '.');
- }
- }
- else
- {
- StrBufAppendBufPlain(sc->ListID, HKEY("room_"), 0);
- StrBufAppendBufPlain(sc->ListID, sc->room.QRname, -1, 0);
- StrBufAppendBufPlain(sc->ListID, HKEY("."), 0);
- StrBufAppendBufPlain(sc->ListID, config.c_fqdn, -1, 0);
- /*
- * this used to be:
- * roomname <Room-Number.list-id.fqdn>
- * according to rfc2919.txt it only has to be a uniq identifier
- * under the domain of the system;
- * in general MUAs use it to calculate the reply address nowadays.
- */
- }
- StrBufAppendBufPlain(sc->ListID, HKEY(">"), 0);
-
- if (StrLength(sc->Users[roommailalias]) == 0)
- {
- sc->Users[roommailalias] = NewStrBuf();
-
- StrBufPrintf(sc->Users[roommailalias],
- "room_%s@%s",
- CCC->room.QRname,
- config.c_fqdn);
-
- StrBufAsciify(sc->Users[roommailalias], '_');
- StrBufLowerCase(sc->Users[roommailalias]);
- }
-
-}