X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Froomops.c;h=bee589e4e2b98e6d0a3e10b7996384e6641e7d2b;hb=3de82b24ab6b64e144577a86938ba04d53042d5c;hp=0c3eaa21d1867131f99fd479a896d00dc290d130;hpb=c7d361a0f38f6b7a8066c1a0b9b677cee7e15ebb;p=citadel.git diff --git a/webcit/roomops.c b/webcit/roomops.c index 0c3eaa21d..bee589e4e 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -67,7 +67,7 @@ void _DBG_QR(long QR) i = i << 1; j++; } - syslog(9, "DBG: QR-Vec [%ld] [%s]\n", QR, ChrPtr(QRVec)); + syslog(LOG_DEBUG, "DBG: QR-Vec [%ld] [%s]\n", QR, ChrPtr(QRVec)); FreeStrBuf(&QRVec); } @@ -90,7 +90,7 @@ void _DBG_QR2(long QR2) i = i << 1; j++; } - syslog(9, "DBG: QR2-Vec [%ld] [%s]\n", QR2, ChrPtr(QR2Vec)); + syslog(LOG_DEBUG, "DBG: QR2-Vec [%ld] [%s]\n", QR2, ChrPtr(QR2Vec)); FreeStrBuf(&QR2Vec); } @@ -127,8 +127,10 @@ void dotgoto(void) { * goto next room */ void smart_goto(const StrBuf *next_room) { - gotoroom(next_room); - readloop(readnew, eUseDefault); + if (gotoroom(next_room) / 100 == 2) + readloop(readnew, eUseDefault); + else + do_404(); } /* @@ -182,6 +184,10 @@ long gotoroom(const StrBuf *gname) long err = 0; int room_name_supplied = 0; int is_baseroom = 0; + int failvisibly; + + /* on fail, should we fallback to _BASEROOM_? */ + failvisibly = ibstr("failvisibly"); /* store ungoto information */ if (StrLength(gname) > 0) { @@ -206,6 +212,10 @@ long gotoroom(const StrBuf *gname) } StrBuf_ServGetln(Buf); if (GetServerStatus(Buf, &err) != 2) { + if (failvisibly) { + FreeStrBuf(&Buf); + return err; + } serv_puts("GOTO _BASEROOM_"); StrBuf_ServGetln(Buf); /* @@ -1050,8 +1060,12 @@ void netedit(void) { int i, num_addrs; StrBuf *Line; StrBuf *TmpBuf; + int malias = 0; + int malias_set_default = 0; + char sepchar = '|'; int Done; + line[0] = '\0'; if (havebstr("force_room")) { gotoroom(sbstr("force_room")); } @@ -1074,6 +1088,30 @@ void netedit(void) { strcat(line, bstr("line")); strcat(line, bstr("suffix")); } + else if (havebstr("alias")) { + const char *domain; + domain = bstr("aliasdomain"); + if ((domain == NULL) || IsEmptyStr(domain)) + { + malias_set_default = 1; + strcpy(line, bstr("prefix")); + strcat(line, bstr("default_aliasdomain")); + } + else + { + malias = 1; + sepchar = ','; + strcat(line, bstr("prefix")); + if (!IsEmptyStr(domain)) + { + strcat(line, "@"); + strcat(line, domain); + } + strcat(line, ","); + strcat(line, "room_"); + strcat(line, ChrPtr(WC->CurRoom.name)); + } + } else { output_headers(1, 1, 1, 0, 0, 0); do_template("room_edit"); @@ -1083,7 +1121,10 @@ void netedit(void) { Line = NewStrBuf(); TmpBuf = NewStrBuf(); - serv_puts("GNET"); + if (malias) + serv_puts("GNET "FILE_MAILALIAS); + else + serv_puts("GNET"); StrBuf_ServGetln(Line); if (GetServerStatus(Line, NULL) != 1) { AppendImportantMessage(SRV_STATUS_MSG(Line)); @@ -1096,8 +1137,8 @@ void netedit(void) { /** This loop works for add *or* remove. Spiffy, eh? */ Done = 0; - extract_token(cmpb0, line, 0, '|', sizeof cmpb0); - extract_token(cmpb1, line, 1, '|', sizeof cmpb1); + extract_token(cmpb0, line, 0, sepchar, sizeof cmpb0); + extract_token(cmpb1, line, 1, sepchar, sizeof cmpb1); while (!Done && StrBuf_ServGetln(Line)>=0) { if ( (StrLength(Line)==3) && !strcmp(ChrPtr(Line), "000")) @@ -1106,17 +1147,34 @@ void netedit(void) { } else { - extract_token(cmpa0, ChrPtr(Line), 0, '|', sizeof cmpa0); - extract_token(cmpa1, ChrPtr(Line), 1, '|', sizeof cmpa1); - if ( (strcasecmp(cmpa0, cmpb0)) - || (strcasecmp(cmpa1, cmpb1)) ) { - StrBufAppendBufPlain(Line, HKEY("\n"), 0); - StrBufAppendBuf(TmpBuf, Line, 0); + if (StrLength(Line) == 0) + continue; + + if (malias_set_default) + { + if (strncasecmp(ChrPtr(Line), HKEY("roommailalias|")) != 0) + { + StrBufAppendBufPlain(Line, HKEY("\n"), 0); + StrBufAppendBuf(TmpBuf, Line, 0); + } + } + else + { + extract_token(cmpa0, ChrPtr(Line), 0, sepchar, sizeof cmpa0); + extract_token(cmpa1, ChrPtr(Line), 1, sepchar, sizeof cmpa1); + if ( (strcasecmp(cmpa0, cmpb0)) || (strcasecmp(cmpa1, cmpb1)) ) + { + StrBufAppendBufPlain(Line, HKEY("\n"), 0); + StrBufAppendBuf(TmpBuf, Line, 0); + } } } } - serv_puts("SNET"); + if (malias) + serv_puts("SNET "FILE_MAILALIAS); + else + serv_puts("SNET"); StrBuf_ServGetln(Line); if (GetServerStatus(Line, NULL) != 4) { @@ -1152,6 +1210,14 @@ void netedit(void) { } serv_puts("000"); + serv_puts("NOOP"); + StrBuf_ServGetln(Line); + if (GetServerStatus(Line, NULL) != 2) { /* WHOOOPS? ERROR? */ + AppendImportantMessage(SRV_STATUS_MSG(Line)); + StrBuf_ServGetln(Line); /* resync... */ + } + + FlushIgnetCfgs(&WC->CurRoom); FreeStrBuf(&Line); @@ -1398,6 +1464,7 @@ InitModule_ROOMOPS REGISTERTokenParamDefine(VIEW_JOURNAL); REGISTERTokenParamDefine(VIEW_BLOG); REGISTERTokenParamDefine(VIEW_QUEUE); + REGISTERTokenParamDefine(VIEW_WIKIMD); /* GNET types: */ /* server internal, we need to know but ignore them. */ @@ -1421,6 +1488,7 @@ InitModule_ROOMOPS } REGISTERTokenParamDefine(rssclient); REGISTERTokenParamDefine(participate); + REGISTERTokenParamDefine(roommailalias);