Wer kennt sie nicht, die täglichen/nächtlichen SPAM Faxe. Wenn man alles elektronisch über einen zentralen Faxserver kaufen lässt und die Faxe als PDF per Mail bekommt, hat man zwar keine Papierkosten, aber es nervt halt einfach.
Die Faxe kommen auch regelmäßig mit unterdrückter Rufnummer rein, damit man

a) keinen Nummernfilter setzen kann und
b) keine (triviale) Möglichkeit hat den Absender herauszufinden oder bei der Bundesnetzagentur Beschwerde einzulegen.

Da CapiSuite per default keine Möglichkeit bietet, anonyme Faxe abzulehnen, muss das entsprechende Python Skript händisch um diese Funktion erweitert werden. Bei openSUSE befindet sich dieses Skript unter

/usr/lib64/capisuite/incoming.py

Die betreffende Eingangsfunktion für die Faxe (faxIncoming) muss jetzt um ein IF Statement erweitert werden und sieht dann (Auszug) so aus:

def faxIncoming(call,call_from,call_to,curr_user,config,already_connected):
  try:
    udir=cs_helpers.getOption(config,"","fax_user_dir")
    if (udir==None):
      capisuite.error("global option fax_user_dir not found! -> rejecting call")
      capisuite.reject(call,0x34A9)
      return
    if (call_from=="-"):
      capisuite.log("call from empty number. suppressed.",1,call)
      capisuite.reject(call,0x34A9)
      return
    udir=os.path.join(udir,curr_user)+"/"

Praktischerweise setzt CapiSuite bei unbekannter Rufnummer diese auf „-„, so kann man mit dem o.g. IF Statement ganz einfach einen Capi Reject senden.  Man kann so nett sein und ein 0x3495 (Call Rejected) senden oder wie ich ein 0x34A9 (Temporary failure). Hier eine Liste der Capi Fehlercodes: Link

Wenn nun ein Fax mit unterdrückter Nummer hereinkommt, sieht man im Logfile was genau passiert:

0x8c8750: Connection object created for incoming call PLCI 401 from - to x CIP 0x4
0x8c8750: call from empty number. suppressed.
0x8c8750: rejecting with cause 34a9
0x8c8750: Connection object deleted

Da ich einen termporären Fehler zurückgebe, versucht es der Spammer dann noch ein paar dutzend mal, was die Leitung – eventuell – etwas ausbremst und er nicht so viele SPAM Faxe verschicken kann wie sonst 😉

Hier das diff File für alle Schreibfaulen als tar.gz: incoming.py.tar.gz