crpb

Danke für den Hinweis. Angesprochenes Feature ist im Paket grommunio-antispam ab der Version "grommunio-antispam-3.2-<distro>.6.1" enthalten.

  • crpb replied to this.

    mwilliams

    Jo, sieht schon besser aus.
    Ich schau mir ja nur den Code an aber irgendwie macht mich die nächste Baustelle stutzig.
    Wer hat denn sqlite3 installiert? Das einzige was mit Core verfügbar ist schimpft sich /usr/bin/sqlite3_analyzer.

    EDIT: Eine frage zu der Verwirklichung:
    Könnte ich quasi mit

    echo 'select message_id,mid_string from messages where parent_fid=0xb;' | sqlite3 "${MAILDIR}/exmdb/exchange.sqlite3" -tabs -noheader | while read -r TRASHMSG; do
      MSGID=$(echo "${TRASHMSG}" | awk '{ print $1 }')
      /usr/libexec/gromox/delmsg -d "${MAILDIR}" -f 0x17 "${MSGID}"
    done

    die Gelöschten Elemente leeren? ;P

      5 days later

      Installieren mit: zypper in sqlite3, benötigt man sowieso wenn man in den Datenbanken was ändern oder nachsehen muss.

      • crpb replied to this.

        WalterH
        Jo danke Walter :-).
        Ging eher darum das sqlite3 als Abhängigkeit gesetzt wird für das Paket grommunio-antispam damit man gar nicht drüber nachdenken muss.
        Ich denke @mwilliams hat den wink mit dem Zaunpfahl schon verstanden.

        Wo wird sqlite3 direkt aufgerufen?
        Die Programme verwenden die Sqlite3 Bibliotheken, die Programme sollten das Executable nicht benötigen. Nur die Admins verwenden sqlite3.

        grommunio-antispam-3.2-lp153.6.1.x86_64.rpm
        Datei /usr/sbin/grommunio-spam-run.sh Zeile 20

           18
           19 echo "${MYSQL_QUERY[@]}" | ${MYSQL_CMD[@]} | while read -r USERNAME MAILDIR ; do
        >> 20   echo 'select message_id,mid_string from messages where parent_fid=0x17;' | sqlite3 "${MAILDIR}/exmdb/exchange.sqlite3" -tabs -noheader | while read -r SPAMMSG; do
           21         MSGFILE=$(echo "${SPAMMSG}" | awk '{ print $2 }')

        Ich ging davon aus das die auch benutzt wird und laut rpm nur libsqlite3.so

        cb@asterix ~/denv/Downloads % rpm -ivh grommunio-antispam-3.2-lp153.6.1.x86_64.rpm |& grep sqlite3
                libsqlite3.so.0()(64bit) is needed by grommunio-antispam-3.2-lp153.6.1.x86_64

        Das ist natürlich besch... wenn die Abhängigkeit fehlt. Bei den Entwicklern ist sqlite3 natürlich installiert. Vermutlich deshalb übersehen.

        • crpb replied to this.

          WalterH Bei den Entwicklern ist sqlite3 natürlich installiert. Vermutlich deshalb übersehen.

          Exakt!

          crpb Ich gehe davon aus, das es funktioniert. Nur muss man dann den Cleaner laufen lasse, da die Elemente nur aus der Datenbank gelöscht werden aber auf der Disk bleiben, wie auch bei allen anderen Löschvorgängen.
          for i in /var/lib/gromox/user/*/*; do /usr/libexec/gromox/cleaner -v -d "$i"; done

          • crpb replied to this.

            WalterH

            Aja, ich werde es mal bei gelegenheit in meiner Test-VM laufen lassen.
            Apropos Cleanup hab ich die lösung ja schon in Bunt bei mir im Standard-Environment. :P

            https://gist.github.com/crpb/bb414090acc4a4db5715c2a4116cad1d

            # vim: filetype=sh
            
            # FARBSPIELE #
            RED='\033[0;31m'
            GREEN='\033[0;32m'
            YELLOW='\033[0;33m'
            BLUE='\033[0;34m'
            NC='\033[0m' # No Color
            function red { printf "${RED}$@${NC}\n" ; } 
            function green { printf "${GREEN}$@${NC}\n" ; } 
            function yellow { printf "${YELLOW}$@${NC}\n" ; } 
            function blue { printf "${BLUE}$@${NC}\n" ; } 
            
            # Grommunio Konsolen Helferlein
            
            # Gromox - Cleanup already deleted files
            grom_cleanup() {
              local maildir
              MESSAGE="\n\n\tTo really cleanup use: "$(blue "grom_cleanup")" "$(red "clean")"\n"
              SWITCH="-n";
              if [[ "$1" = "clean" ]]; then SWITCH="";MESSAGE=""; fi
              for user in $(grom_users); do
                yellow "User: ${user}:"
                maildir="$(grommunio-admin user query --filter username="${user}" maildir)"
                /usr/libexec/gromox/cleaner "${SWITCH}" -d "${maildir}" |grep --color=always -e "^" -e "[^ ]*[0-9](M|G|k)B" 
              done
              echo -e "$MESSAGE"
            }
            
            # Grommunio-Users
            # List Domains
            grom_doms() { grommunio-admin domain list |awk '{print $2}' ; } 
            # List User
            grom_users() {
              local doms
              if [[ "$#" -ge 1 ]]; then
                doms=$(grep "^${1}" <<< "$(grom_doms)")
              else
                doms=$(grom_doms)
              fi  
              for dom in $doms; do \
                grommunio-admin user query --format json-structured | \ 
                jq -r '.[]|select(.username|endswith("'"${dom}"'"))|.username'
              done
            }

            Was dann noch fehlt, passt aber nicht zu den Thread, man muss gelegentlich die Datenbanken verkleinern, funktioniert z.B. so für die erste Domain Datenbank, für die User Datenbanken so ähnlich, nur anderer Path:

            systemctl stop gromox-http
            sqlite3 /data/gromox/domain/1/exmdb/exchange.sqlite3 'VACUUM;'
            systemctl start gromox-http

            • crpb replied to this.

              WalterH
              Ei super. Vielen Dank! Also einfach wie ne steinalte Postgres behandeln *haha*

              EDIT: Nagut... es geht ja viel einfacher...

              grom_cleanup clean 
              /usr/libexec/gromox/delmsg -d /var/lib/gromox/user/*/* -f 0xb
              for db in /var/lib/gromox/user/*/*/exmdb/exchange.sqlite3; do ls -l "$db"; sqlite3 "$db" 'VACUUM;'; ls -l "$db"; done
              9 days later

              mwilliams

              Wie ist das denn eigtl. mit dem gutem Metzger-Schinken (HAM) und lernen das der doch ganz gut war?
              Ist da auch irgendwas geplant? Den Ordner gibt's ja standardmäßig so nicht.

              2 months later

              Könnte man das Löschen der Elemente als optional konfigurieren?
              Wir haben dann doch immer mal wieder false positives die wir erst nach einiger Zeit finden. Wenn ich das Spam-lernen automatisch aufsetze, dann würden diese Email gelöscht werden.

              6 days later

              Also tendenziell wären das ja nur ein paar Zeilen im Skript und wohl noch ne configdatei irgendwo um es zu steuern.

              Jedoch kenne ich mich nicht so sehr mit rspamd aus inwiefern den das interessiert wenn die Nachricht bereits als Spam geflagged wurde. Ich vermute mal es ist egal wenn man das mehrmals macht.

              Das hier sollte doch reichen oder? NICHT GETESTET!

              grommunio-test:~ # cat << EOF > /etc/sysconfig/grommunio-antispam
              # Delete Messages after rspamc learn_spam
              # Defaults to YES / true
              DELETE_MESSAGE=true
              EOF
              grommunio-test:~ # diff /usr/sbin/grommunio-spam-run.sh ~/grommunio-spam-run.sh
              2a3,4
              > . /etc/sysconfig/grommunio-antispam
              >
              33c35
              <         if [ ${EXITSTATUS} -eq 0 ]; then
              ---
              >       if [ ${EXITSTATUS} -eq 0 ] && [ ${DELETE_MESSAGE:-"true"} = "true" ]; then
              16 days later

              © 2020-2024 grommunio GmbH. All rights reserved. | https://grommunio.com | Data Protection | Legal notice