diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp index 529f287..43ab378 100644 --- a/src/murmur/Messages.cpp +++ b/src/murmur/Messages.cpp @@ -1326,19 +1326,70 @@ void Server::msgACL(ServerUser *uSource, MumbleProto::ACL &msg) { QHash > hOldTemp; + log(uSource, QString("Updating ACL in channel %1").arg(*c)); + log("old groups and acl follows:"); + log("old groups:"); + foreach(g, c->qhGroups) { + log(QString("group: ") + g->qsName + " have following users: "); + int m; + QString member_list; + foreach(m, g->members()) + { + member_list += getUserName(m); + member_list += ", "; + } + member_list.remove(member_list.length() -2, 2); + log(member_list); + hOldTemp.insert(g->qsName, g->qsTemporary); delete g; } + log("old acls:"); + + QString acls_string; + foreach(a, c->qlACL) + { + acls_string += a->qsGroup; + acls_string += "|"; + acls_string += getUserName(a->iUserId); + acls_string += ":"; + QString tmp; + acls_string += tmp.sprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", a->pAllow.testFlag(ChanACL::None)?"None,":"", a->pAllow.testFlag(ChanACL::Write)?"Write,":"", \ + a->pAllow.testFlag(ChanACL::Traverse)?"Traverse,":"", a->pAllow.testFlag(ChanACL::Enter)?"Enter,":"", a->pAllow.testFlag(ChanACL::Speak)?"Speak,":"", \ + a->pAllow.testFlag(ChanACL::MuteDeafen)?"Mute,":"", a->pAllow.testFlag(ChanACL::Move)?"Move,":"", a->pAllow.testFlag(ChanACL::MakeChannel)?"MakeChannel,":"", \ + a->pAllow.testFlag(ChanACL::LinkChannel)?"LinkChannel,":"", a->pAllow.testFlag(ChanACL::Whisper)?"Whisper,":"", a->pAllow.testFlag(ChanACL::TextMessage)?"TextMessage,":"", \ + a->pAllow.testFlag(ChanACL::MakeTempChannel)?"MakeTempChannel,":"", a->pAllow.testFlag(ChanACL::Kick)?"Kick,":"", a->pAllow.testFlag(ChanACL::Ban)?"Ban,":"", \ + a->pAllow.testFlag(ChanACL::Register)?"Register,":"", a->pAllow.testFlag(ChanACL::SelfRegister)?"SelfRegister,":""); + acls_string.remove(acls_string.length() -1, 1); + acls_string += "_"; + acls_string += tmp.sprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", a->pDeny.testFlag(ChanACL::None)?"None,":"", a->pDeny.testFlag(ChanACL::Write)?"Write,":"", \ + a->pDeny.testFlag(ChanACL::Traverse)?"Traverse,":"", a->pDeny.testFlag(ChanACL::Enter)?"Enter,":"", a->pDeny.testFlag(ChanACL::Speak)?"Speak,":"", \ + a->pDeny.testFlag(ChanACL::MuteDeafen)?"Mute,":"", a->pDeny.testFlag(ChanACL::Move)?"Move,":"", a->pDeny.testFlag(ChanACL::MakeChannel)?"MakeChannel,":"", \ + a->pDeny.testFlag(ChanACL::LinkChannel)?"LinkChannel,":"", a->pDeny.testFlag(ChanACL::Whisper)?"Whisper,":"", a->pDeny.testFlag(ChanACL::TextMessage)?"TextMessage,":"", \ + a->pDeny.testFlag(ChanACL::MakeTempChannel)?"MakeTempChannel,":"", a->pDeny.testFlag(ChanACL::Kick)?"Kick,":"", a->pDeny.testFlag(ChanACL::Ban)?"Ban,":"", \ + a->pDeny.testFlag(ChanACL::Register)?"Register,":"", a->pDeny.testFlag(ChanACL::SelfRegister)?"SelfRegister,":""); + acls_string.remove(acls_string.length() -1, 1); + acls_string += "; "; + + delete a; + } + acls_string.remove(acls_string.length() -2, 2); + log(acls_string); + + acls_string.clear(); c->qhGroups.clear(); c->qlACL.clear(); c->bInheritACL = msg.inherit_acls(); + log("new groups and acl follows:"); + log("new groups:"); + for (int i = 0; i < msg.groups_size(); ++i) { const MumbleProto::ACL_ChanGroup &group = msg.groups(i); g = new Group(c, u8(group.name())); @@ -1350,9 +1401,23 @@ void Server::msgACL(ServerUser *uSource, MumbleProto::ACL &msg) { for (int j = 0; j < group.remove_size(); ++j) if (!getUserName(group.remove(j)).isEmpty()) g->qsRemove << group.remove(j); + + log(QString("group: ") + g->qsName + " have following users: "); + int m; + QString member_list; + foreach(m, g->members()) + { + member_list += getUserName(m); + member_list += ", "; + } + member_list.remove(member_list.length() -2, 2); + log(member_list); + g->qsTemporary = hOldTemp.value(g->qsName); } + log("new acls:"); + for (int i = 0; i < msg.acls_size(); ++i) { const MumbleProto::ACL_ChanACL &mpacl = msg.acls(i); if (mpacl.has_user_id() && getUserName(mpacl.user_id()).isEmpty()) @@ -1367,7 +1432,32 @@ void Server::msgACL(ServerUser *uSource, MumbleProto::ACL &msg) { a->qsGroup = u8(mpacl.group()); a->pDeny = static_cast(mpacl.deny()) & ChanACL::All; a->pAllow = static_cast(mpacl.grant()) & ChanACL::All; + //TODO: log acls + acls_string += a->qsGroup; + acls_string += "|"; + acls_string += getUserName(a->iUserId); + acls_string += ":"; + QString tmp; + acls_string += tmp.sprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", a->pAllow.testFlag(ChanACL::None)?"None,":"", a->pAllow.testFlag(ChanACL::Write)?"Write,":"", \ + a->pAllow.testFlag(ChanACL::Traverse)?"Traverse,":"", a->pAllow.testFlag(ChanACL::Enter)?"Enter,":"", a->pAllow.testFlag(ChanACL::Speak)?"Speak,":"", \ + a->pAllow.testFlag(ChanACL::MuteDeafen)?"Mute,":"", a->pAllow.testFlag(ChanACL::Move)?"Move,":"", a->pAllow.testFlag(ChanACL::MakeChannel)?"MakeChannel,":"", \ + a->pAllow.testFlag(ChanACL::LinkChannel)?"LinkChannel,":"", a->pAllow.testFlag(ChanACL::Whisper)?"Whisper,":"", a->pAllow.testFlag(ChanACL::TextMessage)?"TextMessage,":"", \ + a->pAllow.testFlag(ChanACL::MakeTempChannel)?"MakeTempChannel,":"", a->pAllow.testFlag(ChanACL::Kick)?"Kick,":"", a->pAllow.testFlag(ChanACL::Ban)?"Ban,":"", \ + a->pAllow.testFlag(ChanACL::Register)?"Register,":"", a->pAllow.testFlag(ChanACL::SelfRegister)?"SelfRegister,":""); + acls_string.remove(acls_string.length() -1, 1); + acls_string += "_"; + acls_string += tmp.sprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", a->pDeny.testFlag(ChanACL::None)?"None,":"", a->pDeny.testFlag(ChanACL::Write)?"Write,":"", \ + a->pDeny.testFlag(ChanACL::Traverse)?"Traverse,":"", a->pDeny.testFlag(ChanACL::Enter)?"Enter,":"", a->pDeny.testFlag(ChanACL::Speak)?"Speak,":"", \ + a->pDeny.testFlag(ChanACL::MuteDeafen)?"Mute,":"", a->pDeny.testFlag(ChanACL::Move)?"Move,":"", a->pDeny.testFlag(ChanACL::MakeChannel)?"MakeChannel,":"", \ + a->pDeny.testFlag(ChanACL::LinkChannel)?"LinkChannel,":"", a->pDeny.testFlag(ChanACL::Whisper)?"Whisper,":"", a->pDeny.testFlag(ChanACL::TextMessage)?"TextMessage,":"", \ + a->pDeny.testFlag(ChanACL::MakeTempChannel)?"MakeTempChannel,":"", a->pDeny.testFlag(ChanACL::Kick)?"Kick,":"", a->pDeny.testFlag(ChanACL::Ban)?"Ban,":"", \ + a->pDeny.testFlag(ChanACL::Register)?"Register,":"", a->pDeny.testFlag(ChanACL::SelfRegister)?"SelfRegister,":""); + acls_string.remove(acls_string.length() -1, 1); + acls_string += ", "; } + acls_string.remove(acls_string.length() -2, 2); + log(acls_string); + } clearACLCache();