forward/0040775000567100000120000000000010367766341012225 5ustar jcameronwheelforward/images/0040775000567100000120000000000007430416474013466 5ustar jcameronwheelforward/images/icon.gif0100644000567100000120000000061507431332671015077 0ustar jcameronwheelGIF89a00fff!Made with GIMP!,00I8;`(d zl뾰N`DOB+ _pF4: R8tZ Щt@Ծ-/ɇ }wv^Μq8utmz|~iaFK{}\7bpaqVTT3˦ϝ)&')ߞha>ZđHR@+PcXeʑԐz0]εĂ5xIsP P:Hqc)* #HY|49J;z+bɁ%25ųgk@N;forward/lang/0040775000567100000120000000000010337336467013145 5ustar jcameronwheelforward/lang/fr0100644000567100000120000001052210173124034013451 0ustar jcameronwheelindex_title=Rgles de gestion des mails index_desc=Ce module vous permet de dfinir des rgles de gestion des messages qui vous sont envoys sur ce serveur. Si vous choisissez de dfinir des rgles, vos messages ne seront plus dlivrs dans votre bote aux lettres, moins que vous ne le spcifiez dans l'une des rgles. index_none=Aucune rgle de gestion n'est dfinie. Tous les messages seront delivrs normalement dans votre bite aux lettres. index_add=Ajouter une rgle de gestion. index_return=rgles de gestion des messages index_edit=Editer le fichier $1 manuellement. aliases_to=Rgle de gestion aliases_from=Message destin .. aliases_type1=Transfrer $1 aliases_type2=Transfrer aux adresses listes dans le fichier $1 aliases_type3=Ecrire dans le fichier $1 aliases_type4=Passer au programme $1 aliases_type5=Rpondre automatiquement avec le message contenu dans le fichier $1 aliases_type6=Appliquer les filtres du fichier $1 aliases_type7=Rediriger dans la bote aux lettres aliases_enabled=Active? aform_type0=(aucune) aform_type1=Transfrer ... aform_type2=Transfrer aux adresses listes dans le fichier... aform_type3=Stocker dans le fichier... aform_type4=Passer au programme... aform_type5=Rpondre automatiquement avec le message contenu dans le fichier... aform_type6=Appliquer les filtres du fichier... aform_type7=Dlivrer dans ma bote aux lettres aform_edit=Editer une rgle de gestion aform_create=Ajouter une rgle de gestion aform_enabled=Active? aform_val=Action aform_afile=Modifier.. aform_return=rgle de gestion aform_name=Message destin ... afile_title=Edition du fichier d'adresses afile_desc=Utilisez la zone de texte ci-dessous pour modifier les adresses du fichier $1 afile_undo=Annuler les modifications afile_ewrite=Erreur lors de l'criture dans le fichier d'adresses : $1 asave_err=Impossible de sauvegarder la rgle de gestion asave_eaddr='$1' n'est pas une adresse valide asave_etype1='$1' n'est pas une adresse email valide asave_etype2=Le fichier d'adresse '$1' n'est pas valide ou n'existe pas asave_etype3='$1' n'est pas un nom de fichier valide asave_etype4='$1' n'est pas un programme valide ou n'existe pas asave_etype4none=Vous devez indiquer un programme asave_etype1q=Qmail ne supporte pas :include: asave_etype2q=Qmail a besoin que le path de Mailbox soit dfini par l'administrateur system asave_ename=L'adresse e-mail manque ou est invalide asave_esame=Un alias pour cette adresse existe dj asave_enone=Aucun email n'a t entre comme email destination de la redirection asave_ecannot=Type de redirection selectionn invalide ffile_title=Edition du fichier de filtres ffile_desc=Utilisez le formulaire ci-dessous pour dfinir les filtres du fichier $1. ffile_efile=Vous n'avez pas la permission d'diter $1. ffile_line=Si le champ $1 $2 $3 alors transfrer $4 ffile_from=de ffile_to= ffile_subject=sujet ffile_cc=CC ffile_body=corps du message ffile_what0=ne correspond pas au modle ffile_what1=correpond au modle ffile_other=sinon transfrer $1 ffile_err=La sauvegarde du fichier de filtres a chou ffile_ematch=Correspondance manquante ffile_eaction=Vous devez indiquer une adresse de transfert ffile_ewrite=Erreur lors de l'criture dans le fichier de filtre : $1 rfile_title=Edition du fichier de rponse automatique rfile_desc=Utilisez la zone de texte ci-dessous pour diter le message de rponse automatique $1. Ce message peut contenir les macros $SUBJECT, $FROM, $TO, $DATE et $BODY qui seront rsolues lorsque le message sera envoy. rfile_desc2=Vous pouvez aussi faire modifier ou ajouter les en-tte du mail redirig en spcifiant des lignes comme:
From: foo@bar.com
Subject: En vacance
au dbut du message separ du message lui mme par une ligne blanche. rfile_efile=Vous n'avez pas la permission d'diter le fichier $1. rfile_undo=Annuler les modifications rfile_ewrite=Erreur lors de l'criture dans le fichier de rponse automatique : $1 rfile_replies=Surveiller les rponses automatiques pour viter les messages multpiles la mme adresse rfile_period=Interval minimum entre rponses rfile_default=Defaut (1 heure) rfile_secs=secondes rfile_eperiod=Nombre de secondes entre les rponses manquant ou invalide edit_title=Editer le fichier Forward edit_desc=Cette page vous permet d'diter manuellement le contenu du fichier $1. Attention, aucun controle d'erreur n'est ralis sur ce que vous saisissez. forward/lang/en0100664000567100000120000001267510337336467013502 0ustar jcameronwheelindex_title=Mail Forwarding index_desc=This module allows you to setup forwarding for email sent to your account on this server. If you choose to forward mail, it will no longer be delivered to your mailbox unless you specifically add a rule to forward to 'Normal user mailbox'. index_none=No mail forwarding is setup. All mail will be delivered only to your mailbox, or to Procmail if it is in use. index_add=Add a mail forwarding rule. index_return=mail forwarding index_edit=Edit $1 file manually. index_mode=Configuration mode: index_simple1=Simple index_simple0=Complex index_header=Simple mail forwarding options index_local=Deliver locally? index_localyes=Yes, deliver to my mailbox index_forward=Forward to other address? index_forwardyes=Yes, forward to index_auto=Send automatic reply? index_autoyes=Yes, respond with message .. index_period=Minimum time between autoreplies index_noperiod=No minimum index_mins=minutes index_from=From: address for replies index_fromauto=Determine automatically aliases_to=Forward to.. aliases_from=Mail for.. aliases_type1=Address $1 aliases_type2=Addresses in file $1 aliases_type3=File $1 aliases_type4=Program $1 aliases_type5=Autoreply file $1 aliases_type6=Apply filter file $1 aliases_type7=Normal user mailbox aliases_type8=Vacation autoreply aliases_enabled=Enabled? aform_type0=None aform_type1=Email address aform_type2=Addresses in file aform_type3=Write to file aform_type4=Feed to program aform_type5=Autoreply from file aform_type6=Apply filter file aform_type7=Normal user mailbox aform_type8=Vacation autoreply aform_edit=Edit Mail Forwarding aform_create=Add Mail Forwarding aform_enabled=Enabled? aform_val=Forward to aform_afile=Edit.. aform_return=alias aform_name=Mail for.. aform_vacation=Edit vacation options.. afile_title=Edit Address File afile_desc=Use the text area below to edit the addresses in the file $1. afile_undo=Undo Changes afile_ewrite=Failed to write to addresses file : $1 asave_err=Failed to save forwarding asave_eaddr='$1' is not a valid address asave_etype1='$1' is not a valid email address asave_etype2=Addresses file '$1' is not valid or does not exist asave_etype3='$1' is not a valid filename asave_etype4='$1' is not a valid program or does not exist asave_etype5=No autoreply filename given asave_etype4none=No program given asave_etype6=No filter filename given asave_etype1q=Qmail does not support :include: asave_etype2q=Qmail requires the Mailbox path to be set by system administrator asave_ename=Missing or invalid mail for name asave_esame=An alias for that address already exists asave_enone=Nothing was selected to forward to asave_ecannot=Invalid forwarding type selected ffile_title=Edit Filter File ffile_desc=Use the form below to setup filter rules in the file $1. ffile_efile=You are not allowed to edit $1. ffile_line=If the $1 field $2 $3 then forward to $4 ffile_from=from ffile_to=to ffile_subject=subject ffile_cc=CC ffile_body=body ffile_what0=doesn't match ffile_what1=matches ffile_other=Otherwise forward to $1 ffile_err=Failed to save filter file ffile_ematch=Missing match ffile_eaction=Missing forwarding address ffile_ewrite=Failed to write to filter file : $1 rfile_title=Edit Autoreply File rfile_desc=Use the text area below to edit the autoreply message in $1. The message may contain the macros $SUBJECT, $FROM, $TO, $DATE and $BODY which will be expanded when the autoreply is activated. rfile_desc2=You can also set mail headers that add to or replace the defaults used in the autoreply by putting lines like:
From: foo@bar.com
Subject: On holiday
at the top of the message, separated from the body by a single blank line. rfile_efile=You are not allowed to edit $1. rfile_undo=Undo Changes rfile_ewrite=Failed to write to autoreply file : $1 rfile_replies=Track automatic responses to prevent multiple messages to the same address? rfile_period=Minimum interval between replies rfile_default=Default (1 hour) rfile_secs=seconds rfile_eperiod=Missing or invalid number of seconds between replies rfile_no_autoreply=Don't send autoreplies to rfile_from=From: address for reply rfile_auto=Automatic (based on recipient's address) rfile_efrom=Missing From: address rfile_fromdesc=A From: address should always be specified where possible, as the automatic method may not be reliable. rfile_err=Failed to save autoreply file vfile_title=Edit Vacation Reply File vfile_desc=Use the text area below to edit the autoreply message in $1. vfile_subject=Message subject vfile_err=Failed to save vacation reply file vfile_esubject=Missing message subject edit_title=Edit Forward File edit_desc=This page allows you to manually edit the contents of your $1 file. Be careful, as no error checking is done on your input. vacation_title=Vacation Options vacation_header=Vacation auto-reply options vacation_user=Your username vacation_usersel=User .. vacation_interval=Reply interval vacation_days=days vacation_aliases=Aliases for your address vacation_msg=Vacation message file vacation_err=Failed to save vacation options vacation_ealias='$1' is not a valid alias vacation_einterval=Missing or invalid reply interval vacation_euser=Missing or invalid username vacation_emsg=Missing or invalid message file vacation_return=vacation options simple_err=Failed to save mail forwarding options simple_eforward=No forwarding address entered simple_eforward2=A single forwarding address must be entered, like foo@bar.com simple_eautotext=No automatic reply text entered simple_efrom=Missing From: address forward/lang/de0100664000567100000120000001343510207325645013453 0ustar jcameronwheelafile_desc=Sie können hier die Adressen in der Datei $1 ändern. afile_ewrite=Konnte Datei nicht schreiben: $1 afile_title=Adressdatei bearbeiten afile_undo=Änderungen rückgängig machen aform_afile=Bearbeiten... aform_create=Weiterleitung hinzufügen aform_edit=Weiterleitung bearbeiten aform_enabled=Aktiv? aform_name=E-Mail an... aform_return=Alias aform_type0=Keine aform_type1=E-Mail-Adresse aform_type2=E-Mail-Addressen in Datei aform_type3=Datei/Verzeichnis aform_type4=Programm aform_type5=Automatisch antworten mit Datei aform_type6=Filtern durch Filterdatei aform_type7=Lokales Postfach aform_type8=Abwesenheitsbenachrichtigung aform_vacation=Editiere Abwesenheitsbenachrichtigungsoptionen aform_val=Weiterleiten an aliases_enabled=Aktiv? aliases_from=E-Mail an... aliases_to=Weiterleiten an.. aliases_type1=Adresse $1 aliases_type2=Adressen in Datei $1 aliases_type3=Datei/Verzeichnis $1 aliases_type4=Programm $1 aliases_type5=Automatisch mit Datei $1 antworten aliases_type6=Filtern durch Filterdatei $1 aliases_type7=Lokales Postfach aliases_type8=Abwesenheitsbenachrichtigung asave_eaddr='$1' ist keine gültige Adresse asave_ecannot=Ungültige Weiterleitungsart ausgewählt asave_ename=Die Adresse, für die eine Weiterleitung definiert werden soll, ist ungültig asave_enone=Es wurde kein Ziel für die Weiterleitung ausgewählt asave_err=Konnte Einstellungen nicht sichern asave_esame=Ein Alias für diese Adresse existiert bereits asave_etype1='$1' ist keine gültige E-Mail-Adresse asave_etype1q=Qmail unterstützt :include: nicht asave_etype2=Die Datei '$1' ist keine gültige Adressdatei oder existiert nicht asave_etype2q=Bei Qmail muss der Pfad für Ihr lokales Postfach vom Systemadministrator konfiguriert werden asave_etype3='$1' ist kein gültiger Dateiname asave_etype4='$1' ist kein gültiger Programmname oder existiert nicht asave_etype4none=Kein Programm angegeben asave_etype5=Es wurde kein Dateiname für die Abwesenheitsbenachrichtigung angegeben asave_etype6=Es wurde kein Dateinamen für den Filter angegeben edit_desc=Sie können hier den Inhalt der Datei $1 von Hand bearbeiten. Vorsicht, es erfolgt keine Überprüfung auf Fehler. edit_title=Weiterleitung von Hand bearbeiten ffile_body=Inhalt der E-Mail ffile_cc=CC (Kopie an) ffile_desc=Sie können hier die Filterdatei $1 bearbeiten. ffile_eaction=Zieladresse fehlt ffile_efile=Zugriff auf Datei $1 Zugriff verweigert. ffile_ematch=Regelausdruck fehlt ffile_err=Konnte Filterdatei nicht schreiben ffile_ewrite=Konnte Datei nicht speichern : $1 ffile_from=From (Absender) ffile_line=$1 vergleichen mit Regelausdruck $3, bei $2 weiterleiten an $4 ffile_other=Andernfalls weiterleiten an $1 ffile_subject=Subject (Betreff) ffile_title=Filterdatei bearbeiten ffile_to=To (Empfänger) ffile_what0=Übereinstimmung ffile_what1=keiner Übereinstimmung index_add=Neue Weiterleitung hinzufügen index_desc=Mit diesem Modul können Sie Ihre E-Mail weiterleiten. In diesem Fall wird Ihre E-Mail nicht mehr auf dem lokalen System zugestellt, sofern Sie dies nicht ausdrücklich in einer der Regeln angeben. index_edit=Datei $1 editieren. index_none=Keine Weiterleitung; jede E-Mail wird lokal zugestellt. index_return=E-Mail-Weiterleitung index_title=E-Mail-Weiterleitung rfile_auto=Automatisch (basierend auf der Empfänger-E-Mail-Adresse) rfile_default=Standard (1 Stunde) rfile_desc=Sie können hier die Antwort in der Datei $1 bearbeiten. Sie können die Makros $SUBJECT, $FROM, $TO, $DATE und $BODY verwenden, die durch den jeweiligen Wert ersetzt werden, wenn eine automatische Antwort verschickt wird. rfile_desc2=Sie können die E-Mail-Header auch ändern oder Daten in Ihrem Autoreply ergänzen. Beispiel:
From: foo@bar.com
Subject: Bin in Urlaub.
Setzen Sie diese an den Beginn Ihrer Nachricht und trennen Sie Header und Body durch eine einzelne leere Zeile. rfile_efile=Zugriff auf die Datei $1 verweigert. rfile_efrom=Fehlende From:-Adresse rfile_eperiod=Fehlende oder ungültige Anzahl von Sekunden zwischen den Antworten rfile_err=Konnte Abwesenheitsbenachrichtigungsdatei nicht speichern rfile_ewrite=Konnte Datei nicht schreiben : $1 rfile_from=From:-Adresse für die Antwort rfile_fromdesc=Eine From:-Adresse sollte immer festgelegt werden, da die automatische Methode nicht wirklich zuverlässig ist. rfile_no_autoreply=Sende keine Abwesenheitsbenachrichtigungen an rfile_period=Minimales Intervall zwischen den Antworten rfile_replies=Andere automatische Antworten abfangen um einen Ping-Pong-Effekt zu verhindern? rfile_secs=Sekunden rfile_title=Text für automatische Antwort bearbeiten rfile_undo=Änderungen rückgängig machen vacation_aliases=Alias für Ihre Adresse vacation_days=Tage vacation_ealias='$1' ist kein gültiger Alias vacation_einterval=Fehlendes oder ungültiges Antowrt-Intervall vacation_emsg=Fehlende oder ungültige Nachrichtendatei vacation_err=Konnte Optioen für die Abwesenheitsbenachrichtigung nicht speichern vacation_euser=Fehlender oder ungültiger Benutzername vacation_header=Optionen der automatischen Abwesenheitsbenachrichtigung vacation_interval=Antwort-Intervall vacation_msg=Nachrichten-Datei der Abwesenheitsbenachrichtigung vacation_return=Optionen der Abwesenheitsbenachrichtigung vacation_title=Optionen der Abwesenheitsbenachrichtigung vacation_user=Ihr Benutzername vacation_usersel=Benutzer .. vfile_desc=Benutzen Sie das Textfeld unten um die Abwesenheitsbenachrichtigung in $1 zu bearbeiten. vfile_err=Konnte die Antwortdatei für die Abwesenheitsbenachrichtigung nicht speichern vfile_esubject=Fehlender Nachrichten-Betreff vfile_subject=Nachrichten-Betreff vfile_title=Editiere Datei für die Abwesenheitsbenachrichtigung forward/lang/ja_JP.euc0100644000567100000120000000643210173124041014603 0ustar jcameronwheelindex_title=᡼ž index_desc=Υ⥸塼ϡΥСΤʤΥȤ줿Żҥ᡼žǽꤷޤ ⤷ʤŻҥ᡼ž뤳Ȥ˷ʤ顢ʤäˡɸŪʥ桼᡼ܥåפž٤§äʤ¤ꡢʤΥ᡼ܥåãʤǤ礦 index_none=᡼žꤵƤޤ ٤ƤΥ᡼ϡʤΥ᡼ܥåˤãޤ index_add=᡼žΥ롼ꤹ index_return=᡼ž index_edit=$1 եޥ˥奢ꤹ aliases_to=ž.. aliases_from=Mail for.. aliases_type1=ɥ쥹 $1 aliases_type2=եΥɥ쥹 $1 aliases_type3=ե $1 aliases_type4=ץ $1 aliases_type5=Autoreply file $1 aliases_type6=Apply filter file $1 aliases_type7=Normal user mailbox aliases_enabled=ͭˤޤ? aform_type0=ʤ aform_type1=Żҥ᡼륢ɥ쥹 aform_type2=եΥɥ쥹 aform_type3=Write to file aform_type4=Feed to program aform_type5=Autoreply from file aform_type6=Apply filter file aform_type7=Normal user mailbox aform_edit=᡼žԽ aform_create=᡼žä aform_enabled=ͭˤޤ? aform_val=ž aform_afile=Խ.. aform_return=ꥢ aform_name=Mail for.. afile_title=ɥ쥹եԽ afile_desc=Use the text area below to edit the addresses in the file $1. afile_undo=ѹ򸵤᤹ afile_ewrite=Failed to write to addresses file : $1 asave_err=ž¸˼Ԥޤ asave_eaddr='$1' is not a valid address asave_etype1='$1' ᡼륢ɥ쥹ǤϤޤ asave_etype2=ɥ쥹ե '$1' ʤ뤤¸ߤޤ asave_etype3='$1' ե̾ǤϤޤ asave_etype4='$1' ʥץǤϤʤ뤤¸ߤޤ asave_etype4none=ץबͿޤ asave_etype1q=Qmail ϥݡȤƤޤ :include: asave_etype2q=Qmail requires the Mailbox path to be set by system administrator asave_ename=Missing or invalid mail for name asave_esame=Υɥ쥹ΥꥢǤ¸ߤޤ asave_enone=ž򤵤ޤǤ ffile_title=Filter File Խ ffile_desc=Use the form below to setup filter rules in the file $1. ffile_efile=You are not allowed to edit $1. ffile_line=If the $1 field $2 $3 then forward to $4 ffile_from=from ffile_to=to ffile_subject=subject ffile_cc=CC ffile_body=body ffile_what0=doesn't match ffile_what1=matches ffile_other=Otherwise forward to $1 ffile_err=Failed to save filter file ffile_ematch=Missing match ffile_eaction=Missing forwarding address ffile_ewrite=Failed to write to filter file : $1 rfile_title=ưֿե Խ rfile_desc=ΥƥȥꥢǤ $1 μưֿåԽǤޤ The message may contain the macros $SUBJECT, $FROM, $TO, $DATE and $BODY which will be expanded when the autoreply is activated. rfile_desc2=You can also set mail headers that add to or replace the defaults used in the autoreply by putting lines like:
From: foo@bar.com
Subject: On holiday
at the top of the message, separated from the body by a single blank line. rfile_efile=ʤ$1Խ뤳ȤĤƤޤ rfile_undo=ѹ򸵤᤹ rfile_ewrite=ưֿեν񤭹ߤ˼Ԥޤ : $1 edit_title=Forward File Խ edit_desc=ΥڡϼȤǤʤ $1 եƤԽޤ!, Ϥ줿Ƥϥ顼åޤ forward/lang/nl0100644000567100000120000000704110173124045013457 0ustar jcameronwheelindex_title=Uw E-mail doorsturen index_desc=Met deze module kunt U uw e-mail laten doorsturen of een antwoordapparaat op uw e-mail instellen. De e-mail zal niet meer in uw postvak op deze server worden opgeslagen tenzij U een speciale regel doorsturen aan 'Normale gebruikers postvak' toevoegt. index_none=Geen doorstuurinstelling gevonden. E-mail wordt in uw postvak opgeslagen. index_add=Voeg een doorstuuregel toe index_return=E-mail doorsturen index_edit=$1 bestand met de hand aanpassen. aliases_to=Stuur door aan.. aliases_from=E-mail voor.. aliases_type1=Adres $1 aliases_type2=Meerdere adressen in bestand $1 aliases_type3=File $1 aliases_type4=Programma $1 aliases_type5=Activeer antwoordapparaat uit bestand $1 aliases_type6=Gebruik filterbestand $1 aliases_type7=Normaal gebruikerspostvak aliases_enabled=Ingesteld? aform_type0=Geen aform_type1=E-mail adres aform_type2=Adressen in bestand aform_type3=Opslaan in bestand aform_type4=Invoer voor programma aform_type5=Antwoordapparaat, tekst uit bestand aform_type6=Gebruik filterbestand aform_type7=Normale gebruikers postvak aform_edit=E-mail doorsturen instellen aform_create=e-mail doorsturen bewerken aform_enabled=Ingesteld? aform_val=Doorsturen aan aform_abestand=Bewerken.. aform_return=alias aform_name=E-mail aan.. afile_title=Bewerk adresbestand afile_desc=Gebruik het tekstveld hieronder om de adressen in de lijst te bewerken $1. afile_undo=Ongedaan maken afile_ewrite=Kon adressen niet opslaan in bestand $1. asave_err=Kon doorstuur instellingen niet opslaan asave_eaddr='$1' is geen geldig adres asave_etype1='$1' is geen geldig e-mailadres asave_etype2=Adressenbestand '$1' is onleesbaar of bestaat niet asave_etype3='$1' is geen geldige bestandnaam asave_etype4='$1' is geen programma, of bestaat niet asave_etype4none=Geen programma opgegeven asave_etype1q=Qmail ondersteunt :include: niet asave_etype2q=Qmail vereist dat de administrator het Mailbox pad opzet. asave_ename=Ontbrekend of ongeldig e-mailadres voor naam asave_esame=Er bestaat reeds een alias voor dit e-mailadres asave_enone=Er is niemand geselecteerd om aan door te sturen ffile_title=Bewerk filterbestand ffile_desc=Gebruik het formulier hieronder om de filterregels op te zetten $1. ffile_efile= U heeft geen rechten om file $1 te bewerken. ffile_line=Als het $1 veld $2 $3 stuur dan door aan $4 ffile_from=afzender ffile_to=ontvanger ffile_subject=onderwerp ffile_cc=CC ffile_body=inhoud ffile_what0=niet bevat ffile_what1=bevat ffile_other=Stuur anders door aan $1. ffile_err=Kon filerbestand niet opslaan ffile_ematch=Zoekclausule ontbreekt ffile_eaction=Doorstuuradres ontbreekt ffile_ewrite=Kon filterbestand $1 niet opslaan rfile_title=Antwoordapparaatbestand bewerken rfile_desc=Gebruik het tesktvak hieronder om de berichttekst voor het antwoordapparaat in $1 te bewerken. Het bericht mag de macro's $SUBJECT, $FROM, $TO, $DATE en $BODY bevatten, die zullen worden ge-expandeerd als het antwoordapparaat wordt geactiveerd. rfile_desc2=U kunt ook mailkoppen toevoegen die de standaardwaarde veranderen of die extra toegevoegd zullen worden zoals
From: foo@bar.com
Subject: Ik ben op vakantie
Deze moeten helemaal bovenaan het bericht worden ingevoegd, gevolgd door een lege regel. rfile_efile=U heeft geen rechten om $1 te berwerken. rfile_undo=Ongedaan maken rfile_ewrite=Kon berichttekst voor antwoordapparaat $1 niet opslaan. edit_title=Doorstuurbestand bewerken edit_desc=Op deze pagina kunt u handmatig de inhoud van uw $1-bestand bewerken. Voorzichtigheid is geboden, omdat er geen verdere controle is op uw wijzigingen. forward/lang/es0100644000567100000120000000671410173124030013455 0ustar jcameronwheelindex_title=Reenvio de correo index_desc=Este mdulo le permite configurar el reenvio de correo enviado a su cuenta en este servidor. Si decide reenviar su correo, no ser entregado a su casilla de correo a menos que especficamente agregue una regla de reenvio a 'Casilla normal de correo'. index_none=No esta configurado el reenvio de correo. Todo el correo ser entregado en su casilla. index_add=Agregar una regla de reenvio. index_return=reenvio de correo index_edit=Editar $1 en forma manual. aliases_to=Reenviar a.. aliases_from=Correo para.. aliases_type1=Direccion $1 aliases_type2=Direcciones en el archivo $1 aliases_type3=Archivo $1 aliases_type4=Programa $1 aliases_type5=Archivo de autorespuesta $1 aliases_type6=Aplicar archivo de filtro $1 aliases_type7=Casilla normal de correo aliases_enabled=Habilitado? aform_type0=Ninguno aform_type1=Direccin de correo aform_type2=Direcciones en archivo aform_type3=Escribir a archivo aform_type4=Drselo a un programa aform_type5=Autorespuesta desde archivo aform_type6=Aplicar archivo de filtro aform_type7=Casilla normal de correo aform_edit=Editar Reenvio de Correo aform_create=Agregar Reenvio de Correo aform_enabled=Habilitado? aform_val=Reenviar a aform_afile=Editar.. aform_return=alias aform_name=Correo para.. afile_title=Editar Archivo de Direcciones afile_desc=Use el rea de texto debajo para editar las direcciones en el archivo $1. afile_undo=Deshacer Cambios afile_ewrite=Fall al escribir archivo de direcciones: $1 asave_err=Failed to save forwarding asave_eaddr='$1' is not a valid address asave_etype1='$1' is not a valid email address asave_etype2=Addresses file '$1' is not valid or does not exist asave_etype3='$1' is not a valid filename asave_etype4='$1' is not a valid program or does not exist asave_etype4none=No program given asave_etype1q=Qmail does not support :include: asave_etype2q=Qmail requires the Mailbox path to be set by system administrator asave_ename=Missing or invalid mail for name asave_esame=An alias for that address already exists asave_enone=Nothing was selected to forward to ffile_title=Edit Filter File ffile_desc=Use the form below to setup filter rules in the file $1. ffile_efile=You are not allowed to edit $1. ffile_line=If the $1 field $2 $3 then forward to $4 ffile_from=from ffile_to=to ffile_subject=subject ffile_cc=CC ffile_body=body ffile_what0=doesn't match ffile_what1=matches ffile_other=Otherwise forward to $1 ffile_err=Failed to save filter file ffile_ematch=Missing match ffile_eaction=Missing forwarding address ffile_ewrite=Failed to write to filter file : $1 rfile_title=Editar Archivo de Autorespuesta rfile_desc=Use el rea de texto debajo para editar el mensaje de autorespuesta en $1. El mensaje puede contener las variables $SUBJECT (Asunto), $FROM (De), $TO (Para), $DATE (Fecha) y $BODY (Cuerpo) que sern expandidas cuando la autorespuesta sea utilizada. rfile_desc2=Tambin puede colocar encabezados de correo para agregar o reemplazar a los de por defecto usados en la autorespuesta, colocando lneas como:
From: foo@bar.com
Subject: De vacaciones
al principio del mensaje, separado del cuerpo por una sola lna en blanco. rfile_efile=No le esta permitido editar el archivo $1. rfile_undo=Deshacer Cambios rfile_ewrite=Fall al escribir el archivo de autorespuesta: $1 edit_title=Editar Archivo de Reenvio edit_desc=Esta pgina permite editar manualmente los conetidos de su archivo $1. Sea cuidadoso, ya que no se verifica por errores en lo que escriba. forward/lang/el0100755000567100000120000000753410173124016013456 0ustar jcameronwheelindex_title= index_desc= . , ' '. index_none= . . index_add= . index_return= index_edit= $1. aliases_to= .. aliases_from= .. aliases_type1= $1 aliases_type2= $1 aliases_type3= $1 aliases_type4= $1 aliases_type5= $1 aliases_type6= $1 aliases_type7= aliases_enabled=; aform_type0= aform_type1= aform_type2= aform_type3= aform_type4= aform_type5= aform_type6= aform_type7= aform_edit= aform_create= aform_enabled=; aform_val= aform_afile=.. aform_return=alias aform_name= .. afile_title= afile_desc= $1. afile_undo= afile_ewrite= : $1 asave_err= asave_eaddr='$1' asave_etype1='$1' asave_etype2= '$1' asave_etype3='$1' asave_etype4='$1' asave_etype4none= asave_etype1q=To Qmail :include: asave_etype2q= Qmail Mailbox asave_ename=Missing or invalid mail for name asave_esame= asave_enone= asave_ecannot= ffile_title= ffile_desc= $1. ffile_efile= $1. ffile_line= $1 $2 $3 $4 ffile_from= ffile_to= ffile_subject= ffile_cc= ffile_body= ffile_what0= ffile_what1= ffile_other= $1 ffile_err= ffile_ematch= ffile_eaction= ffile_ewrite= : $1 rfile_title= rfile_desc= $1. $SUBJECT, $FROM, $TO, $DATE $BODY . rfile_desc2= ..:
From: foo@bar.com
Subject: On holiday
, . rfile_efile= $1. rfile_undo= rfile_ewrite= : $1 edit_title= edit_desc= $1 . . forward/lang/tr0100644000567100000120000001030010173124051013460 0ustar jcameronwheelindex_title=Mail letimi index_desc=Bu sunucu zerindeki hesabnza mail gndermek iin iletimi dzenlemeye bu modl izin verir. Eer mail iletimini seerseniz,'Normal kullanc mail kutusuna'iletmek iin zellikle bir kural eklemedike mail kutunuza tanmas ok uzun srmez . index_none=Hibir mail iletimi ayarlanmaz.Tm mailler yalnzca mail kutunuza tanabilir, veya eer kullanmdaysa Procmaile. index_add=Bir mail iletimi kural eklemek. index_return=mail iletimi index_edit=$1 dosyasn elle dzenlemek. aliases_to=..e iletim aliases_from=..iin Mail aliases_type1=$1 Adresi aliases_type2=$1 dosyasndaki adresler aliases_type3=$1 dosyas aliases_type4=$1 program aliases_type5=$1 dosyasn otomatik cevaplama aliases_type6=$1 dosyasna filtre uygulamak aliases_type7=Normal kullanc mail kutusu aliases_enabled=Grnsn m? aform_type0=Hibiri aform_type1=Email adres aform_type2=Dosyadaki adresler aform_type3=Dosyaya yazmak aform_type4=Program beslemek aform_type5=Dosyadan otomatik cevaplamak aform_type6=Dosyaya filtreleme uygulamak aform_type7=Normal kullanc mail kutusu aform_edit=Mail letimini Dzenlemek aform_create=Mail letimi Eklemek aform_enabled=Grnsn m? aform_val=..e iletim aform_afile=..Dzenlemek aform_return=takma isim aform_name=..iin Mail afile_title=Dosya Adresi Dzenlemek afile_desc=$1 dosyasndaki adresleri dzenlemek iin aadaki metin alann kullanmak. afile_undo=Deiiklikleri geri al afile_ewrite=Dosya adreslerine yazma baarsz : $1 asave_err=letimi kaydetme baarsz asave_eaddr='$1' geerli bir adres deil asave_etype1='$1' geerli bir email adresi deil asave_etype2=Adreslerin dosyas '$1' geerli deil veya mevcut deil asave_etype3='$1' geerli bir dosya ad deil asave_etype4='$1' geerli bir program deil veya mevcut deil asave_etype4none=Hibir program verilmedi asave_etype1q=Qmail desteklemez :kapsamak: asave_etype2q=Qmail ynetici tarafndan konulan Mail kutusu yolunu ister asave_ename=sim iin atlanlm ya da geersiz mail asave_esame=Mevcut olan adresler iin bir takma ad asave_enone=letim iin hibirey seilmedi asave_ecannot=Geersiz iletim tipi seildi ffile_title=Dosya Filtresi Dzenlemek ffile_desc=$1 dosyasndaki filtreleme kurallarn ayarlamak iin aadaki formu kullanmak. ffile_efile=$1 i dzenlemenize izin verilmez. ffile_line=Eer $1 $2 $3 e konumlandysa daha sonra $4 e iletmek ffile_from=den ffile_to=e ffile_subject=konu ffile_cc=CC ffile_body=gvde ffile_what0=birletirilmez ffile_what1=birlemeler ffile_other=$1 e dier bir yoldan iletim ffile_err=Filtre dosyasn kaydetme baarsz ffile_ematch=Atlanlm birletirme ffile_eaction=Atlanlm iletim adresleri ffile_ewrite=Filtre dosyasna yazma baarsz : $1 rfile_title=Otomatik cevaplama Dosyasn Dzenlemek rfile_desc=$1 deki otomatik cevaplama mesajn dzenlemek iin aadaki metin alann kullanmak. Mesaj u makrolar kapsar $SUBJECT, $FROM, $TO, $DATE and $BODY ki bunlar otomatik cevaplama aktif olduunda geniletilebilir. rfile_desc2=Konulan izgiler tarafndan otomatik cevaplamadaki defaultlar deitiren veya ekleyen mail balklarn ayarlayabilirsiniz. rnein:
From: foo@bar.com
Subject: On holiday
mesajn tepesinde, yalnz bo bir izgi tarafndan gvdeden ayrlm. rfile_efile=$1 i dzenlemenize izin verilmez. rfile_undo=Deiiklikleri geri al rfile_ewrite=Otomatik cevaplama dosyasna yazma baarsz : $1 rfile_replies=Ayn adrese birden fazla mesaj engellemek iin otomatik cevaplarn izini srlsn m? rfile_period=Cevaplar arasndaki minumum aralk rfile_default=Default (1 saat) rfile_secs=saniye rfile_eperiod=Cevaplar arasndaki atlanm veya geersiz saniye numaralar rfile_no_autoreply=Otomatik cevaplar ..e gndermeyin rfile_from=Den: cevaplar iin adresler rfile_auto=Otomatik (alcnn adresine bal) rfile_efrom=adres : den atlanm rfile_fromdesc=Bir yerden : adresler olabilecekleri yerlerden zelletirilmi olamaldr, gvenilir olmayan metotlar gibi. edit_title=letim Dosyasn Dzenlemek edit_desc=Bu sayfa $1 dosyanzn ieriini elle dzeltmenize izin verir. Dikkatli olun, girdiiniz deerlerde hibir hata kontrol yaplmad gibi. forward/lang/ru_RU0100644000567100000120000001252410320214556014105 0ustar jcameronwheelindex_title= index_desc=This module allows you to setup forwarding for email sent to your account on this server. If you choose to forward mail, it will no longer be delivered to your mailbox unless you specifically add a rule to forward to 'Normal user mailbox'. index_none=No mail forwarding is setup. All mail will be delivered only to your mailbox, or to Procmail if it is in use. index_add=Add a mail forwarding rule. index_return=mail forwarding index_edit=Edit $1 file manually. index_mode=Configuration mode: index_simple1=Simple index_simple0=Complex index_header=Simple mail forwarding options index_local=Deliver locally? index_localyes=Yes, deliver to my mailbox index_forward=Forward to other address? index_forwardyes=Yes, forward to index_auto=Send automatic reply? index_autoyes=Yes, respond with message .. index_period=Minimum time between autoreplies index_noperiod=No minimum index_mins=minutes aliases_to=Forward to.. aliases_from=Mail for.. aliases_type1=Address $1 aliases_type2=Addresses in file $1 aliases_type3=File $1 aliases_type4=Program $1 aliases_type5=Autoreply file $1 aliases_type6=Apply filter file $1 aliases_type7=Normal user mailbox aliases_type8=Vacation autoreply aliases_enabled=Enabled? aform_type0=None aform_type1=Email address aform_type2=Addresses in file aform_type3=Write to file aform_type4=Feed to program aform_type5=Autoreply from file aform_type6=Apply filter file aform_type7=Normal user mailbox aform_type8=Vacation autoreply aform_edit=Edit Mail Forwarding aform_create=Add Mail Forwarding aform_enabled=Enabled? aform_val=Forward to aform_afile=Edit.. aform_return=alias aform_name=Mail for.. aform_vacation=Edit vacation options.. afile_title=Edit Address File afile_desc=Use the text area below to edit the addresses in the file $1. afile_undo=Undo Changes afile_ewrite=Failed to write to addresses file : $1 asave_err=Failed to save forwarding asave_eaddr='$1' is not a valid address asave_etype1='$1' is not a valid email address asave_etype2=Addresses file '$1' is not valid or does not exist asave_etype3='$1' is not a valid filename asave_etype4='$1' is not a valid program or does not exist asave_etype5=No autoreply filename given asave_etype4none=No program given asave_etype6=No filter filename given asave_etype1q=Qmail does not support :include: asave_etype2q=Qmail requires the Mailbox path to be set by system administrator asave_ename=Missing or invalid mail for name asave_esame=An alias for that address already exists asave_enone=Nothing was selected to forward to asave_ecannot=Invalid forwarding type selected ffile_title=Edit Filter File ffile_desc=Use the form below to setup filter rules in the file $1. ffile_efile=You are not allowed to edit $1. ffile_line=If the $1 field $2 $3 then forward to $4 ffile_from=from ffile_to=to ffile_subject=subject ffile_cc=CC ffile_body=body ffile_what0=doesn't match ffile_what1=matches ffile_other=Otherwise forward to $1 ffile_err=Failed to save filter file ffile_ematch=Missing match ffile_eaction=Missing forwarding address ffile_ewrite=Failed to write to filter file : $1 rfile_title=Edit Autoreply File rfile_desc=Use the text area below to edit the autoreply message in $1. The message may contain the macros $SUBJECT, $FROM, $TO, $DATE and $BODY which will be expanded when the autoreply is activated. rfile_desc2=You can also set mail headers that add to or replace the defaults used in the autoreply by putting lines like:
From: foo@bar.com
Subject: On holiday
at the top of the message, separated from the body by a single blank line. rfile_efile=You are not allowed to edit $1. rfile_undo=Undo Changes rfile_ewrite=Failed to write to autoreply file : $1 rfile_replies=Track automatic responses to prevent multiple messages to the same address? rfile_period=Minimum interval between replies rfile_default=Default (1 hour) rfile_secs=seconds rfile_eperiod=Missing or invalid number of seconds between replies rfile_no_autoreply=Don't send autoreplies to rfile_from=From: address for reply rfile_auto=Automatic (based on recipient's address) rfile_efrom=Missing From: address rfile_fromdesc=A From: address should always be specified where possible, as the automatic method may not be reliable. rfile_err=Failed to save autoreply file vfile_title=Edit Vacation Reply File vfile_desc=Use the text area below to edit the autoreply message in $1. vfile_subject=Message subject vfile_err=Failed to save vacation reply file vfile_esubject=Missing message subject edit_title=Edit Forward File edit_desc=This page allows you to manually edit the contents of your $1 file. Be careful, as no error checking is done on your input. vacation_title=Vacation Options vacation_header=Vacation auto-reply options vacation_user=Your username vacation_usersel=User .. vacation_interval=Reply interval vacation_days=days vacation_aliases=Aliases for your address vacation_msg=Vacation message file vacation_err=Failed to save vacation options vacation_ealias='$1' is not a valid alias vacation_einterval=Missing or invalid reply interval vacation_euser=Missing or invalid username vacation_emsg=Missing or invalid message file vacation_return=vacation options simple_err=Failed to save mail forwarding options simple_eforward=No forwarding address entered simple_eforward2=A single forwarding address must be entered, like foo@bar.com simple_eautotext=No automatic reply text entered forward/index.cgi0100775000567100000120000001152410337336361014013 0ustar jcameronwheel#!/usr/local/bin/perl # index.cgi # Display mail forwarding from .forward file require './forward-lib.pl'; &ui_print_header(undef, $text{'index_title'}, "", undef, 0, 1); &ReadParse(); if ($config{'mail_system'} == 0) { # See if we can use or offer simple mode $simple = &get_simple(); } if ($simple) { # Possible .. show selector $in{'simple'} = 1 if (!defined($in{'simple'})); print $text{'index_mode'},"\n"; foreach $s (1, 0) { if ($s == $in{'simple'}) { print $text{'index_simple'.$s},"\n"; } else { print "",$text{'index_simple'.$s},"\n"; } print " | \n" if ($s != 0); } print "

\n"; } if ($in{'simple'} && $simple) { # Simple mode for Sendmail print &ui_form_start("save_simple.cgi", "post"); print &ui_table_start($text{'index_header'}, undef, 2); print &ui_table_row($text{'index_local'}, &ui_checkbox("local", 1, $text{'index_localyes'}, $simple->{'local'})); print &ui_table_row($text{'index_forward'}, &ui_checkbox("forward", 1,$text{'index_forwardyes'}, $simple->{'forward'})." ". &ui_textbox("forwardto", $simple->{'forward'} || $userconfig{'forwardto'}, 40)); print &ui_table_row($text{'index_auto'}, &ui_checkbox("auto", 1,$text{'index_autoyes'}, $simple->{'auto'})."
\n". &ui_textarea("autotext", $simple->{'autotext'}, 5, 70)); $period = $simple->{'replies'} && $simple->{'period'} ? int($simple->{'period'}/60) : $simple->{'replies'} ? 60 : undef; print &ui_table_row($text{'index_period'}, &ui_opt_textbox("period", $period, 3, $text{'index_noperiod'})." ". $text{'index_mins'}); ($froms, $doms) = &mailbox::list_from_addresses(); $df = $froms->[0]; print &ui_table_row($text{'index_from'}, &ui_radio("from_def", $simple->{'from'} ? 0 : 1, [ [ 1, $text{'index_fromauto'} ], [ 0, &ui_textbox("from", $simple->{'from'} || $df, 40) ] ])); print &ui_table_end(); print &ui_form_end([ [ "save", $text{'save'} ] ]); } elsif ($config{'mail_system'} == 0) { # Sendmail forwarding print "$text{'index_desc'}

\n"; @aliases = &list_aliases(); if (@aliases) { # find a good place to split $lines = 0; for($i=0; $i<@aliases; $i++) { $aline[$i] = $lines; $al = scalar(@{$aliases[$i]->{'values'}}); $lines += ($al ? $al : 1); } $midline = int(($lines+1) / 2); for($mid=0; $mid<@aliases && $aline[$mid] < $midline; $mid++) { } # render tables print "
\n"; &aliases_table(@aliases[0..$mid-1]); print "\n"; if ($mid < @aliases) { &aliases_table(@aliases[$mid..$#aliases]); } print "
\n"; } else { print "$text{'index_none'}

\n"; } } else { # Qmail forwarding print "$text{'index_desc'}

\n"; @aliases = &list_dotqmails(); if (@aliases) { # find a good place to split $lines = 0; for($i=0; $i<@aliases; $i++) { $aline[$i] = $lines; $al = scalar(@{$aliases[$i]->{'values'}}); $lines += ($al ? $al : 1); } $midline = int(($lines+1) / 2); for($mid=0; $mid<@aliases && $aline[$mid] < $midline; $mid++) { } # render tables print "
\n"; &dotqmail_table(@aliases[0..$mid-1]); print "\n"; if ($mid < @aliases) { &dotqmail_table(@aliases[$mid..$#aliases]); } print "
\n"; } else { print "$text{'index_none'}

\n"; } } if (!$in{'simple'} || !$simple) { print "$text{'index_add'}\n"; print "   ", &text('index_edit', ".forward"),"\n" if ($config{'mail_system'} == 0 && $config{'edit'}); print "

\n"; } &ui_print_footer("/", $text{'index'}); sub aliases_table { print "\n"; print "\n"; foreach $a (@_) { print "\n"; print "\n"; printf "\n", $a->{'enabled'} ? $text{'yes'} : "$text{'no'}"; print "\n"; } print "
$text{'aliases_to'} $text{'aliases_enabled'}
{'num'}\">"; foreach $v (@{$a->{'values'}}) { ($anum, $astr) = &alias_type($v); print &text("aliases_type$anum", "$astr"),"
\n"; } print "
%s
\n"; } sub dotqmail_table { print "\n"; print "\n"; foreach $a (@_) { print "\n"; print "\n"; } print "
$text{'aliases_from'} $text{'aliases_to'}
{'file'}\">", $a->{'name'} ? "$remote_user-$a->{'name'}" : $remote_user, " \n"; foreach $v (@{$a->{'values'}}) { ($anum, $astr) = &alias_type($v); print &text("aliases_type$anum", "$astr"),"
\n"; } print "
\n"; } forward/module.info0100664000567100000120000000067310367766474014401 0ustar jcameronwheeldesc=Mail Forwarding and Replies desc_de=E-Mail-Weiterleitung (.forward) category=mail usermin=1 depends=mailbox desc_ja_JP.euc=᡼ ž desc_nl=E-mail Doorsturen desc_es=Reenvio de Correo desc_el= longdesc=Edit the .forward or .qmail-* files that control what happens to email sent to your account. desc_fr=Redirection Mails desc_ru_RU= desc_ru_SU= version=1.191 forward/edit_alias.cgi0100755000567100000120000000054710115200237014765 0ustar jcameronwheel#!/usr/local/bin/perl # edit_alias.cgi # Edit an existing .forward entry require './forward-lib.pl'; &ReadParse(); if (!$in{'new'}) { if ($in{'file'}) { $a = &get_dotqmail($in{'file'}); } else { @aliases = &list_aliases(); $a = $aliases[$in{'num'}]; } &alias_form($text{'aform_edit'}, $a); } else { &alias_form($text{'aform_create'}, $a); } forward/forward-lib.pl0100664000567100000120000003002410337335614014756 0ustar jcameronwheel# forward-lib.pl # Common functions for editing .forward do '../web-lib.pl'; &init_config(); require '../ui-lib.pl'; # Copy scripts to /etc/usermin and set up smrsh if needed while we still can # (before a user switch) foreach $script ("autoreply.pl", "filter.pl") { local $rpath = "$module_root_directory/$script"; local $cpath = "$module_config_directory/$script"; local @rst = stat($rpath); local @cst = stat($cpath); if (!@cst || $cst[7] != $rst[7]) { system("cp $rpath $cpath"); } if ($config{'smrsh_dir'} && !-r "$config{'smrsh_dir'}/$script") { symlink($cpath, "$config{'smrsh_dir'}/$script"); } } # If vacation is installed, link it from /etc/smrsh too $vacation_path = &has_command("vacation"); if ($vacation_path) { if ($config{'smrsh_dir'} && !-r "$config{'smrsh_dir'}/vacation") { symlink($vacation_path, "$config{'smrsh_dir'}/vacation"); } } &switch_to_remote_user(); &create_user_config_dirs(); $forward_file = "$remote_user_info[7]/.forward"; &foreign_require("mailbox", "mailbox-lib.pl"); $mail_path = &mailbox::mailbox_file(); # list_aliases() # Returns an array of data structures, each containing information about # one sendmail alias from .forward sub list_aliases { local($lnum, @rv, $file, $lalias); $lnum = 0; open(AFILE, $forward_file); while() { s/\r|\n//g; # remove newlines if (/^(#*)\s*(.*)$/) { local(%alias, @values, $v); $alias{'eline'} = $alias{'line'} = $lnum; $alias{'file'} = $forward_file; $alias{'enabled'} = $1 ? 0 : 1; $v = $alias{'value'} = $2; while($v =~ /^\s*,?\s*()"([^"]+)"(.*)$/ || $v =~ /^\s*,?\s*(\|)"([^"]+)"(.*)$/ || $v =~ /^\s*,?\s*()([^,\s]+)(.*)$/) { push(@values, $1.$2); $v = $3; } $alias{'values'} = \@values; $alias{'num'} = scalar(@rv); if (&indexof($alias{'name'}, @skip) < 0) { push(@rv, \%alias); $lalias = \%alias; } } elsif (/^(#*)\s+(\S.*)$/ && $lalias && ($1 && !$lalias->{'enabled'} || !$1 && $lalias->{'enabled'})) { # continuation of last alias $lalias->{'eline'} = $lnum; local $v = $2; $lalias->{'value'} .= $v; while($v =~ /^\s*,?\s*()"([^"]+)"(.*)$/ || $v =~ /^\s*,?\s*(\|)"([^"]+)"(.*)$/ || $v =~ /^\s*,?\s*()([^,\s]+)(.*)$/) { push(@{$lalias->{'values'}}, $1.$2); $v = $3; } } else { $lalias = undef; } $lnum++; } close(AFILE); return @rv; } # alias_form([alias]) # Display a form for editing or creating an alias. Each alias can map to # 1 or more programs, files, lists or users sub alias_form { local($a, @values, $v, $type, $val, @typenames); $a = $_[1]; if ($a) { @values = @{$a->{'values'}}; } @typenames = map { $text{"aform_type$_"} } (0 .. 8); $typenames[0] = "<$typenames[0]>"; my @js; for($i=0; $i<=@values; $i++) { ($type, $val) = $values[$i] ? &alias_type($values[$i]) : (0, ""); push @js,"document.forms[0].val_$i.disabled=".(($type==0||$type==7||$type==8)?"true":"false") } &ui_print_header(undef, $_[0],"", undef, undef, undef, undef, undef,undef, "onload=\"".join(";",@js)."\""); print "

\n"; if ($a) { print "\n"; print "\n"; } else { print "\n"; } print "\n"; print "\n"; print "
",$a ? $text{'aform_edit'} : $text{'aform_create'},"
\n"; if ($config{'mail_system'} == 0) { print "\n"; printf "\n", !$a || $a->{'enabled'} ? "" : "checked"; } else { print "\n"; printf "\n", $a->{'name'}; } local %types = map { $_, 1 } split(/\,/, $config{'types'}); $types{8} = $types{5}; for($i=0; $i<=@values; $i++) { ($type, $val) = $values[$i] ? &alias_type($values[$i]) : (0, ""); print "\n"; print "\n"; } print "\n"; print "
$text{'aform_enabled'} $text{'yes'}\n", !$a || $a->{'enabled'} ? "checked" : ""; printf " $text{'no'}
$text{'aform_name'} %s\n", $a->{'name'} ? '' : 'checked', $remote_user; print " " x 3; printf " %s-", $a->{'name'} ? 'checked' : '', $remote_user; printf "
$text{'aform_val'}\n"; print "\n"; local $lnk = $config{'mail_system'} == 1 ? "file=$a->{'file'}" : "num=$a->{'num'}"; if ($type == 2 && $a) { print "", "$text{'aform_afile'}\n"; } elsif ($type == 5 && $a) { print "", "$text{'aform_afile'}\n"; } elsif ($type == 6 && $a) { print "", "$text{'aform_afile'}\n"; } elsif ($type == 8 && $a) { print "$text{'aform_vacation'}\n"; } print "
\n"; if ($a) { print "\n"; print "\n"; } else { print "\n"; } print "
\n"; &ui_print_footer("index.cgi?simple=0", $text{'index_return'}); } # create_alias(&details) # Create a new alias sub create_alias { if ($config{'mail_system'} == 0) { &open_tempfile(AFILE, ">>$forward_file"); &print_tempfile(AFILE, $_[0]->{'enabled'} ? "" : "# ", join(',', map { /\s/ ? "\"$_\"" : $_ } @{$_[0]->{'values'}}),"\n"); &close_tempfile(AFILE); &set_forward_perms(); } else { &open_tempfile(AFILE, ">$remote_user_info[7]/". ($_[0]->{'name'} ? ".qmail-$_[0]->{'name'}" : ".qmail")); foreach $v (@{$_[0]->{'values'}}) { &print_tempfile(AFILE, $v,"\n"); } &close_tempfile(AFILE); } } # delete_alias(&details) sub delete_alias { if ($config{'mail_system'} == 0) { local $lref = &read_file_lines($_[0]->{'file'}); local $len = $_[0]->{'eline'} - $_[0]->{'line'} + 1; splice(@$lref, $_[0]->{'line'}, $len); &flush_file_lines(); } else { unlink("$remote_user_info[7]/$_[0]->{'file'}"); } } # modify_alias(&old, &details) # Update some existing alias sub modify_alias { if ($config{'mail_system'} == 0) { local $str = ($_[1]->{'enabled'} ? "" : "# ") . join(',', map { /\s/ ? "\"$_\"" : $_ } @{$_[1]->{'values'}}); local $lref = &read_file_lines($_[0]->{'file'}); local $len = $_[0]->{'eline'} - $_[0]->{'line'} + 1; splice(@$lref, $_[0]->{'line'}, $len, $str); &flush_file_lines(); } else { &delete_alias($_[0]); &create_alias($_[1]); } } # alias_type(string) # Return the type and destination of some alias string sub alias_type { local @rv; if ($_[0] =~ /^\|($user_module_config_directory|$module_config_directory)\/autoreply.pl\s+(\S+)/) { @rv = (5, $2); } elsif ($_[0] =~ /^\|($user_module_config_directory|$module_config_directory)\/filter.pl\s+(\S+)/) { @rv = (6, $2); } elsif ($vacation_path && $_[0] =~ /^\|$vacation_path\s*(.*)/) { @rv = (8, $1); } elsif ($_[0] =~ /^\|(.*)$/) { @rv = (4, $1); } elsif ($_[0] eq $mail_path) { @rv = (7, undef); } elsif ($_[0] =~ /^(\..*)$/ && $config{'mail_system'} == 1) { @rv = (3, $1); } elsif ($_[0] =~ /^(\/.*)$/) { @rv = (3, $1); } elsif ($_[0] =~ /^:include:(.*)$/ && $config{'mail_system'} == 0) { @rv = (2, $1); } elsif ($_[0] =~ /^\\($remote_user)$/ && $config{'mail_system'} == 0) { @rv = (7, undef); } elsif ($_[0] =~ /^&(.*)$/) { @rv = (1, $1); } else { @rv = (1, $_[0]); } return wantarray ? @rv : $rv[0]; } # list_dotqmails() # Returns a list of .qmail* files in the user's home directory sub list_dotqmails { local @rv; opendir(DIR, $remote_user_info[7]); while($f = readdir(DIR)) { next if ($f !~ /^\.qmail(-(\S+))?$/); push(@rv, &get_dotqmail($f)); } closedir(DIR); return @rv; } sub get_dotqmail { $_[0] =~ /^\.qmail(-(\S+))?$/; local $alias = { 'file' => $_[0], 'name' => $2 }; open(AFILE, "$remote_user_info[7]/$_[0]"); while() { s/\r|\n//g; s/#.*$//g; if (/\S/) { push(@{$alias->{'values'}}, $_); } } close(AFILE); return $alias; } sub set_forward_perms { chmod(0644, $forward_file); } sub make_absolute { if ($_[0] =~ /^\//) { return $_[0]; } else { return "$remote_user_info[7]/$_[0]"; } } sub make_relative { if ($_[0] =~ /^\Q$remote_user_info[7]\/\E(.*)$/) { return $1; } else { return $_[0]; } } # get_simple() # If the current forwarding rules are simple (local delivery, autoreply # and forwarding only), return a hash ref containing the settings. Otherwise, # return undef. sub get_simple { local @aliases = &list_aliases(); local $simple; foreach my $a (@aliases) { foreach my $v (@{$a->{'values'}}) { local ($atype, $aval) = &alias_type($v); if ($atype == 1) { # Forward to an address return undef if ($simple->{'forward'}); $simple->{'forward'} = $aval; } elsif ($atype == 7) { # Local delivery $simple->{'local'} = 1; } elsif ($atype == 5) { # Usermin autoreply program return undef if ($simple->{'autoreply'}); $simple->{'autoreply'} = &make_absolute($aval); $simple->{'auto'} = 1; &read_autoreply($simple->{'autoreply'}, $simple); } else { # Some un-supported rule return undef; } } } $simple ||= { 'local' => 1 }; # if no settings, assume local delivery if (!$simple->{'autoreply'}) { # Get autoreply message from default file $simple->{'autoreply'} = &make_absolute("autoreply.txt"); &read_autoreply($simple->{'autoreply'}, $simple); } return $simple; } # read_autoreply(file, &simple) sub read_autoreply { local ($file, $simple) = @_; local @lines; open(FILE, $file); while() { if (/^Reply-Tracking:\s*(.*)/) { $simple->{'replies'} = $1; } elsif (/^Reply-Period:\s*(.*)/) { $simple->{'period'} = $1; } elsif (/^No-Autoreply:\s*(.*)/) { $simple->{'no_autoreply'} = $1; } elsif (/^No-Autoreply-Regexp:\s*(.*)/) { push(@{$simple->{'no_autoreply_regexp'}}, $1); } elsif (/^From:\s*(.*)/) { $simple->{'from'} = $1; } else { push(@lines, $_); } } close(FILE); $simple->{'autotext'} = join("", @lines); } # save_simple(&simple) # Creates a .forward file with the given simple settings sub save_simple { local ($simple) = @_; if ($simple->{'local'} && !$simple->{'forward'} && !$simple->{'auto'}) { # If doing only local delivery, just remove .forward &unlink_file($forward_file); } else { # Need to create .forward &open_tempfile(FORWARD, ">$forward_file"); if ($simple->{'local'}) { &print_tempfile(FORWARD, "\\$remote_user\n"); } if ($simple->{'forward'}) { &print_tempfile(FORWARD, $simple->{'forward'},"\n"); } if ($simple->{'auto'}) { local $afile = $simple->{'autoreply'}; &print_tempfile(FORWARD, "\"|$module_config_directory/autoreply.pl $afile $remote_user\"\n"); } &close_tempfile(FORWARD); &set_forward_perms(); } if ($simple->{'autotext'}) { # Save autoreply text if (!$simple->{'autoreply'}) { # Create autoreply file $simple->{'autoreply'} = "$remote_user_info[7]/autoreply.txt"; } &open_tempfile(AUTO, ">$simple->{'autoreply'}"); if ($simple->{'replies'}) { &print_tempfile(AUTO, "Reply-Tracking: $simple->{'replies'}\n"); } if ($simple->{'period'}) { &print_tempfile(AUTO, "Reply-Period: $simple->{'period'}\n"); } if ($simple->{'no_autoreply'}) { &print_tempfile(AUTO, "No-Autoreply: $simple->{'no_autoreply'}\n"); } foreach my $r (@{$simple->{'no_autoreply_regexp'}}) { &print_tempfile(AUTO, "No-Autoreply-Regexp: $r\n"); } if ($simple->{'from'}) { &print_tempfile(AUTO, "From: $simple->{'from'}\n"); } &print_tempfile(AUTO, $simple->{'autotext'}); &close_tempfile(AUTO); } } 1; forward/save_alias.cgi0100755000567100000120000000577510173123770015020 0ustar jcameronwheel#!/usr/local/bin/perl # save_alias.cgi # Save or delete a new or existing .forward entry require './forward-lib.pl'; &ReadParse(); &error_setup($text{'asave_err'}); if (!$in{'new'}) { if ($config{'mail_system'} == 0) { @aliases = &list_aliases(); $a = $aliases[$in{'num'}]; } else { $a = &get_dotqmail($in{'file'}); } } if ($in{'delete'}) { # delete some alias $loga = $a; &delete_alias($a); } else { # saving or creating .. check inputs local %types = map { $_, 1 } split(/\,/, $config{'types'}); $types{8} = $types{5}; for($i=0; defined($t = $in{"type_$i"}); $i++) { !$t || $types{$t} || &error($text{'asave_ecannot'}); $v = $in{"val_$i"}; if ($t == 1 && $v !~ /^([^\/\|:]\S*)$/) { &error(&text('asave_etype1', $v)); } elsif ($t == 3 && $v !~ /^\/(\S+)$/ && $config{'mail_system'} == 0) { &error(&text('asave_etype3', $v)); } elsif ($t == 3 && $v !~ /^[\/\.](\S+)$/ && $config{'mail_system'} == 1) { &error(&text('asave_etype3', $v)); } elsif ($t == 4) { $v =~ /^(\S+)/ || &error($text{'asave_etype4none'}); -x $1 || &error(&text('asave_etype4', $1)); } elsif ($t == 5 && !$v) { &error(&text('asave_etype5')); } elsif ($t == 6 && !$v) { &error(&text('asave_etype6')); } elsif ($t == 2 && $config{'mail_system'} == 1) { &error(&text('asave_etype1q', $v)); } elsif ($t == 7 && $config{'mail_system'} == 1 && !$mail_path) { &error(&text('asave_etype2q', $v)); } if ($t >= 2 && $t <= 6 && $v !~ /^\//) { # Path is relative to home dir $v = "$remote_user_info[7]/$v"; } if ($t == 1 || $t == 3) { push(@values, $v); } elsif ($t == 2) { push(@values, ":include:$v"); } elsif ($t == 4) { push(@values, "|$v"); } elsif ($t == 5) { # Setup autoreply script push(@values, "|$module_config_directory/autoreply.pl $v $remote_user"); } elsif ($t == 6) { # Setup filter script push(@values, "|$module_config_directory/filter.pl $v $remote_user"); } elsif ($t == 7) { # Just write to user's mail file push(@values, $config{'mail_system'} ? $mail_path : "\\$remote_user"); } elsif ($t == 8) { # Set up vacation program if ($a && $a->{'values'}->[$i] && &alias_type($a->{'values'}->[$i]) == 8) { # Use old settings push(@values, $a->{'values'}->[$i]); } else { # Default vacation setup push(@values, "|$vacation_path $remote_user"); system("vacation -i >/dev/null 2>&1"); } } } @values || &error($text{'asave_enone'}); $newa{'values'} = \@values; if ($config{'mail_system'} == 0) { $newa{'enabled'} = $in{'enabled'}; } else { $in{'name_def'} || $in{'name'} =~ /^\S+$/ || &error($text{'asave_ename'}); $newa{'name'} = $in{'name_def'} ? undef : $in{'name'}; if ($in{'new'} || $newa{'name'} ne $a->{'name'}) { @aliases = &list_dotqmails(); ($same) = grep { $_->{'name'} eq $newa{'name'} } @aliases; $same && &error($text{'asave_esame'}); } } if ($in{'new'}) { &create_alias(\%newa); } else { &modify_alias($a, \%newa); } $loga = \%newa; } &redirect(""); forward/edit_afile.cgi0100775000567100000120000000155110160470461014762 0ustar jcameronwheel#!/usr/local/bin/perl # edit_afile.cgi # Display the contents of an address file require './forward-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'afile_title'}, ""); $in{'vfile'} = &make_absolute($in{'vfile'}); open(FILE, $in{'file'}); @lines = ; close(FILE); print "",&text('afile_desc', "$in{'vfile'}"),"

\n"; print "

\n"; print &ui_hidden("file", $in{'file'}),"\n"; print &ui_hidden("num", $in{'num'}),"\n"; print &ui_hidden("vfile", $in{'vfile'}),"\n"; print "

\n"; print " ", "\n"; print "

\n"; &ui_print_footer("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}", $text{'aform_return'}); forward/save_afile.cgi0100775000567100000120000000055410206064446015000 0ustar jcameronwheel#!/usr/local/bin/perl # save_afile.cgi # Save an addresses file require './forward-lib.pl'; &ReadParseMime(); $in{'text'} =~ s/\r//g; $in{'text'} =~ s/\n*$/\n/; &open_tempfile(FILE, ">$in{'vfile'}", 1) || &error(&text('afile_ewrite', $!)); &print_tempfile(FILE, $in{'text'}); &close_tempfile(FILE); &redirect("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}"); forward/autoreply.pl0100775000567100000120000001142510367766341014611 0ustar jcameronwheel#!/usr/local/bin/perl # autoreply.pl # Simple autoreply script # read sendmail module config $ENV{'PATH'} = "/bin:/usr/bin:/sbin:/usr/sbin"; $p = -l $0 ? readlink($0) : $0; $p =~ /^(.*)\/[^\/]+$/; if (open(CONF, "$1/config")) { while() { if (/^(\S+)=(.*)/) { $config{$1} = $2; } } close(CONF); } if (!$config{'sendmail_path'}) { # Make some guesses about sendmail if (-x "/usr/sbin/sendmail") { %config = ( 'sendmail_path' => '/usr/sbin/sendmail' ); } elsif (-x "/usr/lib/sendmail") { %config = ( 'sendmail_path' => '/usr/lib/sendmail' ); } else { die "Failed to find sendmail or config file"; } } # read headers and body while() { s/\r|\n//g; if (/^(\S+):\s+(.*)/) { $header{lc($1)} = $2; $lastheader = lc($1); } elsif (/^\s+(.*)/ && $lastheader) { $header{$lastheader} .= $_; } elsif (!$_) { last; } } while() { $body .= $_; } if ($header{'x-webmin-autoreply'}) { print STDERR "Cancelling autoreply to an autoreply\n"; exit 0; } if ($header{'x-mailing-list'} || $header{'list-id'} || $header{'precedence'} =~ /junk|bulk|list/i || $header{'to'} =~ /Multiple recipients of/i) { # Do nothing if post is from a mailing list exit 0; } if ($header{'from'} =~ /postmaster|mailer-daemon/i) { # Do nothing if post is a bounce exit 0; } # work out the correct to address @to = ( &split_addresses($header{'to'}), &split_addresses($header{'cc'}), &split_addresses($header{'bcc'}) ); $to = $to[0]->[0]; foreach $t (@to) { if ($t->[0] =~ /^([^\@\s]+)/ && $1 eq $ARGV[1]) { $to = $t->[0]; } } # build list of default reply headers $rheader{'From'} = $to; $rheader{'To'} = $header{'reply-to'} ? $header{'reply-to'} : $header{'from'}; $rheader{'Subject'} = "Autoreply to $header{'subject'}"; $rheader{'X-Webmin-Autoreply'} = 1; $rheader{'X-Originally-To'} = $header{'to'}; chop($host = `hostname`); $rheader{'Message-Id'} = "<".time().".".$$."\@".$host.">"; # read the autoreply file if (open(AUTO, $ARGV[0])) { while() { s/\$SUBJECT/$header{'subject'}/g; s/\$FROM/$header{'from'}/g; s/\$TO/$to/g; s/\$DATE/$header{'date'}/g; s/\$BODY/$body/g; if (/^(\S+):\s*(.*)/ && !$doneheaders) { if ($1 eq "No-Autoreply-Regexp") { push(@no_regexp, $2); } else { $rheader{$1} = $2; $rheaders .= $_; } } else { $rbody .= $_; $doneheaders = 1; } } close(AUTO); } else { $rbody = "Failed to open autoreply file $ARGV[0] : $!"; } # Open the replies tracking DBM, if one was set if ($rheader{'Reply-Tracking'}) { $track_replies = dbmopen(%replies, $rheader{'Reply-Tracking'}, 0700); } if ($track_replies) { # See if we have replied to this address before $period = $rheader{'Reply-Period'} || 60*60; ($from) = &split_addresses($header{'from'}); if ($from) { $lasttime = $replies{$from->[0]}; $now = time(); if ($now < $lasttime+$period) { # Autoreplied already in this period .. just halt exit(0); } $replies{$from->[0]} = $now; } } delete($rheader{'Reply-Tracking'}); delete($rheader{'Reply-Period'}); # Check if there is a deny list, and if so don't send a reply @fromsplit = &split_addresses($header{'from'}); if (@fromsplit) { $from = $fromsplit[0]->[0]; ($fromuser, $fromdom) = split(/\@/, $from); foreach $n (split(/\s+/, $rheader{'No-Autoreply'})) { if ($n =~ /^(\S+)\@(\S+)$/ && lc($from) eq lc($n) || $n =~ /^\*\@(\S+)$/ && lc($fromdom) eq lc($1) || $n =~ /^(\S+)\@\*$/ && lc($fromuser) eq lc($1) || $n =~ /^\*\@\*(\S+)$/ && lc($fromdom) =~ /$1$/i || $n =~ /^(\S+)\@\*(\S+)$/ && lc($fromuser) eq lc($1) && lc($fromdom) =~ /$2$/i) { exit(0); } } delete($rheader{'No-Autoreply'}); } # Check if message matches one of the deny regexps foreach $re (@no_regexp) { if ($re =~ /\S/ && $rheaders =~ /$re/i) { print STDERR "Skipping due to match on $re\n"; exit(1); } } # run sendmail and feed it the reply ($rfrom) = &split_addresses($rheader{'From'}); if ($rfrom->[0]) { open(MAIL, "|$config{'sendmail_path'} -t -f$rfrom->[0]"); } else { open(MAIL, "|$config{'sendmail_path'} -t -f$to"); } foreach $h (keys %rheader) { print MAIL "$h: $rheader{$h}\n"; } print MAIL "\n"; print MAIL $rbody; close(MAIL); # split_addresses(string) # Splits a comma-separated list of addresses into [ email, real-name ] pairs sub split_addresses { local (@rv, $str = $_[0]); while(1) { if ($str =~ /^[\s,]*(([^<>\(\)\s]+)\s+\(([^\(\)]+)\))(.*)$/) { push(@rv, [ $2, $3, $1 ]); $str = $4; } elsif ($str =~ /^[\s,]*("([^"]+)"\s+<([^\s<>]+)>)(.*)$/ || $str =~ /^[\s,]*(([^<>]+)\s+<([^\s<>]+)>)(.*)$/ || $str =~ /^[\s,]*(([^<>\[\]]+)\s+\[mailto:([^\s\[\]]+)\])(.*)$/|| $str =~ /^[\s,]*(()<([^\s<>]+)>)(.*)/ || $str =~ /^[\s,]*(()([^\s<>,]+))(.*)/) { push(@rv, [ $3, $2, $1 ]); $str = $4; } else { last; } } return @rv; } forward/filter.pl0100775000567100000120000000354410007630566014043 0ustar jcameronwheel#!/usr/local/bin/perl # filter.pl # read sendmail module config $p = -l $0 ? readlink($0) : $0; $p =~ /^(.*)\/[^\/]+$/; if (open(CONF, "$1/config")) { while() { if (/^(\S+)=(.*)/) { $config{$1} = $2; } } close(CONF); } if (!$config{'sendmail_path'}) { # Make some guesses about sendmail if (-x "/usr/sbin/sendmail") { %config = ( 'sendmail_path' => '/usr/sbin/sendmail' ); } elsif (-x "/usr/lib/sendmail") { %config = ( 'sendmail_path' => '/usr/lib/sendmail' ); } else { die "Failed to find sendmail or config file"; } } # read headers and body $fromline = ; while() { $headers .= $_; s/\r|\n//g; if (/^(\S+):\s+(.*)/) { $header{lc($1)} = $2; } elsif (!$_) { last; } } while() { $body .= $_; } # read the filter file if (open(FILTER, $ARGV[0])) { while() { s/\r|\n//g; if (/^(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/) { push(@filter, [ $1, $2, $3, $4 ]); } elsif (/^(\S+)\s+(\S+)$/) { push(@filter, [ $1, $2 ]); } } close(FILTER); } else { print STDERR "Filter file $ARGV[0] does not exist!\n"; exit 1; } # run the filter to find the first matching rule open(LOG, ">>$ARGV[0].log"); foreach $f (@filter) { local $field = $f->[2] eq 'body' ? $body : $header{$f->[2]}; local $st = 0; if ($f->[0] == 0) { $st = ($field !~ /$f->[3]/i); } elsif ($f->[0] == 1) { $st = ($field =~ /$f->[3]/i); } elsif ($f->[0] == 2) { $st = 1; } if ($st) { # The rule matched! if ($f->[1] =~ /^\//) { # Write to a file open(MAIL, ">>$f->[1]") || die "Failed to open $f->[1] ; $!"; print MAIL $fromline; } else { # Forward to another address open(MAIL, "|$config{'sendmail_path'} ". quotemeta($f->[1])); } print MAIL $headers; print MAIL $body; close(MAIL); $now = localtime(time()); print LOG "[$now] [$header{'from'}] [",join(" ",@$f),"]\n"; last; } } forward/edit_rfile.cgi0100775000567100000120000000475110160470573015014 0ustar jcameronwheel#!/usr/local/bin/perl # edit_rfile.cgi # Display the contents of an autoreply file require './forward-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'rfile_title'}, ""); $in{'vfile'} = &make_absolute($in{'vfile'}); open(FILE, $in{'vfile'}); while() { if (/^Reply-Tracking:\s*(.*)/) { $replies = $1; } elsif (/^Reply-Period:\s*(.*)/) { $period = $1; } elsif (/^No-Autoreply:\s*(.*)/) { $no_autoreply = $1; } elsif (/^From:\s*(.*)/) { $from = $1; } else { push(@lines, $_); } } close(FILE); if (!-r $in{'vfile'}) { ($froms, $doms) = &mailbox::list_from_addresses(); $from = $froms->[0]; } print &text('rfile_desc', "$in{'vfile'}"),"

\n"; print "$text{'rfile_desc2'}

\n"; print "

\n"; print &ui_hidden("file", $in{'file'}),"\n"; print &ui_hidden("num", $in{'num'}),"\n"; print &ui_hidden("vfile", $in{'vfile'}),"\n"; print "

\n"; print "\n"; # Show From: address option print "\n"; printf "\n", $from; print "\n"; # Show reply-tracking option printf "\n", $replies ? "checked" : "", $text{'rfile_replies'}; print "\n"; # Show reply period input print "\n"; printf "\n", $period, $text{'rfile_secs'}; # Show people to not autoreply to print "\n"; printf "\n", $no_autoreply; print "
$text{'rfile_from'} %s\n", $from eq '' ? "checked" : "", $text{'rfile_auto'}; printf "\n", $from eq '' ? "" :"checked"; printf "
$text{'rfile_fromdesc'}
%s
   $text{'rfile_period'} %s\n", $period eq '' ? "checked" : "", $text{'rfile_default'}; printf "\n", $period eq '' ? "" :"checked"; printf " %s
$text{'rfile_no_autoreply'}
\n"; print " ", "\n"; print "

\n"; &ui_print_footer("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}", $text{'aform_return'}); forward/save_rfile.cgi0100775000567100000120000000175110206064646015023 0ustar jcameronwheel#!/usr/local/bin/perl # save_rfile.cgi # Save an autoreply file require './forward-lib.pl'; &ReadParseMime(); &error_setup($text{'rfile_err'}); $in{'period_def'} || $in{'period'} =~ /^\d+$/ || &error($text{'rfile_eperiod'}); $in{'from_def'} || $in{'from'} =~ /\S/ || &error($text{'rfile_efrom'}); $in{'text'} =~ s/\r//g; &open_tempfile(FILE, ">$in{'vfile'}", 1) || &error(&text('rfile_ewrite', $!)); if ($in{'replies'}) { $rfile = "$user_module_config_directory/replies"; $rfile = $in{'replies_file'} if ($in{'replies_file'} && $in{'replies_file'} ne $rfile); &print_tempfile(FILE, "Reply-Tracking: $rfile\n"); } if (!$in{'period_def'}) { &print_tempfile(FILE, "Reply-Period: $in{'period'}\n"); } if ($in{'no_autoreply'}) { &print_tempfile(FILE, "No-Autoreply: $in{'no_autoreply'}\n"); } if (!$in{'from_def'}) { &print_tempfile(FILE, "From: $in{'from'}\n"); } &print_tempfile(FILE, $in{'text'}); &close_tempfile(FILE); &redirect("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}"); forward/edit_ffile.cgi0100775000567100000120000000331310206213337014763 0ustar jcameronwheel#!/usr/local/bin/perl # edit_ffile.cgi # Allow editing of a filter config file require './forward-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'ffile_title'}, ""); $in{'vfile'} = &make_absolute($in{'vfile'}); open(FILE, $in{'vfile'}); while() { s/\r|\n//g; if (/^(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/) { push(@filter, [ $1, $2, $3, $4 ]); } elsif (/^(2)\s+(\S+)$/) { $other = $2; } } close(FILE); print "",&text('ffile_desc', "$in{'vfile'}"),"

\n"; print "

\n"; print &ui_hidden("file", $in{'file'}),"\n"; print &ui_hidden("num", $in{'num'}),"\n"; print &ui_hidden("vfile", $in{'vfile'}),"\n"; $i = 0; foreach $f (@filter, [ 1, '', '', '' ]) { $field = "\n"; $what = "\n"; $match = "\n"; $action = "\n"; print &text('ffile_line', $field, $what, $match, $action),"
\n"; $i++; } print &text('ffile_other', ""),"
\n"; print "\n"; print "
\n"; &ui_print_footer("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}", $text{'aform_return'}); forward/save_ffile.cgi0100775000567100000120000000125310206212731014772 0ustar jcameronwheel#!/usr/local/bin/perl # save_ffile.cgi # Save a filter file require './forward-lib.pl'; &ReadParseMime(); &error_setup($text{'ffile_err'}); for($i=0; defined($in{"field_$i"}); $i++) { next if (!$in{"field_$i"}); $in{"match_$i"} || &error($text{'ffile_ematch'}); $in{"action_$i"} || &error($text{'ffile_eaction'}); push(@filter, $in{"what_$i"}." ".$in{"action_$i"}." ". $in{"field_$i"}." ".$in{"match_$i"}."\n"); } push(@filter, "2 ".$in{'other'}."\n") if ($in{'other'}); &open_tempfile(FILE, ">$in{'vfile'}", 1) || &error(&text('ffile_ewrite', $!)); &print_tempfile(FILE, @filter); &close_tempfile(FILE); &redirect("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}"); forward/config-msc-linux0100664000567100000120000000007610160411542015307 0ustar jcameronwheelmail_system=1 types=1,2,3,4,5,6,7 edit=1 smrsh_dir=/etc/smrsh forward/config.info0100664000567100000120000000037610160411534014330 0ustar jcameronwheelmail_system=Mail system installed,1,0-Sendmail,1-Qmail types=Allowed forwarding types,13,1-Address,2-Addresses in file,3-File,4-Program,5-Autoreply,6-Filter,7-User mailbox edit=Allow editing of .forward file,1,1-Yes,0-No smrsh_dir=SMRSH directory,3,None forward/config0100664000567100000120000000007610160411540013370 0ustar jcameronwheelmail_system=0 types=1,2,3,4,5,6,7 edit=1 smrsh_dir=/etc/smrsh forward/config.info.de0100644000567100000120000000045310006026344014711 0ustar jcameronwheeledit=Erlaube das Editieren von .forward-Dateien,1,1-Ja,0-Nein mail_system=Installiertes E-Mail-System,1,0-Sendmail,1-Qmail smrsh_dir=SMRSH-Verzeichnis,3,Keines types=Erlaubte Weiterleitungsarten,13,1-Addresse,2-Addressen aus Datei,3-Datei,4-Programm,5-Autoreply,6-Filter,7-Benutzer Mailbox forward/edit_forward.cgi0100775000567100000120000000114210307162256015345 0ustar jcameronwheel#!/usr/local/bin/perl # edit_forward.cgi # Display a form for editing the .forward file manually require './forward-lib.pl'; &ui_print_header(undef, $text{'edit_title'}, ""); print &text('edit_desc', ".forward"),"

\n"; print "

\n"; print "
\n"; print "
\n"; &ui_print_footer("index.cgi?simple=0", $text{'index_return'}); forward/save_forward.cgi0100775000567100000120000000046110206064744015362 0ustar jcameronwheel#!/usr/local/bin/perl # save_forward.cgi # Save the manually edited .forward file require './forward-lib.pl'; &ReadParseMime(); $in{'forward'} =~ s/\r//g; &open_tempfile(FORWARD, ">$forward_file"); &print_tempfile(FORWARD, $in{'forward'}); &close_tempfile(FORWARD); &set_forward_perms(); &redirect(""); forward/save_vacation.cgi0100775000567100000120000000207210160264406015516 0ustar jcameronwheel#!/usr/local/bin/perl # Update a vacation alias command require './forward-lib.pl'; &ReadParse(); &error_setup($text{'vacation_err'}); # Validate and parse args $args = ""; $in{'aliases'} =~ s/\r//g; foreach $a (split(/\n+/, $in{'aliases'})) { $a =~ /^\S+$/ || &error(&text('vacation_ealias', $a)); $args .= " -a $a"; } if (!$in{'interval_def'}) { $in{'interval'} =~ /^\d+$/ || &error($text{'vacation_einterval'}); $args .= " -r $in{'interval'}"; } if (!$in{'msg_def'}) { $in{'msg'} =~ /^\S+$/ || &error($text{'vacation_emsg'}); $args .= " -m $in{'msg'}"; } foreach $u (split(/\0/, $in{'unknown'})) { $args .= " $u"; } if ($in{'user_def'}) { $args .= " $remote_user"; } else { $in{'user'} =~ /^\S+$/ || &error($text{'vacation_euser'}); $args .= " $in{'user'}"; } # Update actual alias if ($config{'mail_system'} == 0) { @aliases = &list_aliases(); $a = $aliases[$in{'num'}]; } else { $a = &get_dotqmail($in{'file'}); } $a->{'values'}->[$in{'idx'}] = "|$vacation_path$args"; &modify_alias($a, $a); &redirect("edit_alias.cgi?num=$in{'num'}file=$in{'file'}"); forward/CHANGELOG0100664000567100000120000000116510337336666013437 0ustar jcameronwheel---- Changes since 1.100 ---- If the vacation program is installed, a forwarding alias can be created to deliver mail to the vacation program which then sends an automatic reply. The options which control how the vacation command behaves can be edited using the module. ---- Changes since 1.150 ---- Added a simple mode, for setting up one or more of local delivery, forwarding or autoresponding. ---- Changes since 1.160 ---- In simple mode, the autoreply message is kept and can be edited even when autoresponding is not enabled. ---- Changes since 1.170 ---- In simple mode a From: address for autoreplies can now be entered. forward/edit_vacation.cgi0100775000567100000120000000440510160466214015510 0ustar jcameronwheel#!/usr/local/bin/perl # Show form for editing vacation command options require './forward-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'vacation_title'}, ""); if ($config{'mail_system'} == 0) { @aliases = &list_aliases(); $a = $aliases[$in{'num'}]; } else { $a = &get_dotqmail($in{'file'}); } $dst = $a->{'values'}->[$in{'idx'}]; ($type, $args) = &alias_type($dst); $type == 8 || &error("Not a vacation alias!"); # Parse command-line args @args = split(/\s+/, $args); $user = pop(@args); while(@args) { $arg = shift(@args); if ($arg eq "-m") { $msg = shift(@args); } elsif ($arg eq "-a") { $alias = shift(@args); push(@als, $alias); } elsif ($arg eq "-r") { $interval = shift(@args); } else { push(@unknown, $arg); } } print &ui_form_start("save_vacation.cgi", "post"); print &ui_table_start($text{'vacation_header'}, undef, 2); print &ui_hidden("file", $in{'file'}); print &ui_hidden("num", $in{'num'}); print &ui_hidden("idx", $in{'idx'}); foreach $u (@unknown) { print &ui_hidden("unknown", $u); } # Username for this user print &ui_table_row($text{'vacation_user'}, &ui_radio("user_def", $user eq $remote_user ? 1 : 0, [ [ 1, $text{'default'} ], [ 0, $text{'vacation_usersel'} ] ])."\n". &ui_textbox("user", $user eq $remote_user ? undef : $user, 20)); # Extra aliases print &ui_table_row($text{'vacation_aliases'}, &ui_textarea("aliases", join("\n", @als), 5, 30)); # Message file $defmsg = ".vacation.msg"; print &ui_table_row($text{'vacation_msg'}, &ui_radio("msg_def", $msg ? 0 : 1, [ [ 1, $text{'default'}." ($defmsg)" ], [ 0, " " ] ])."\n". &ui_textbox("msg", $msg, 30)." ". "". "$text{'aform_afile'}\n"); # Autoreply interval print &ui_table_row($text{'vacation_interval'}, &ui_radio("interval_def", $interval ? 0 : 1, [ [ 1, $text{'default'} ], [ 0, " " ] ])."\n". &ui_textbox("interval", $interval, 5)." ". $text{'vacation_days'}); print &ui_table_end(); print &ui_form_end([ [ "save", $text{'save'} ] ]); &ui_print_footer("edit_alias.cgi?num=$in{'num'}file=$in{'file'}", $text{'aform_return'}); forward/edit_vfile.cgi0100775000567100000120000000342210160466766015023 0ustar jcameronwheel#!/usr/local/bin/perl # edit_vfile.cgi # Display the contents of a vacation autoreply file require './forward-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'vfile_title'}, ""); $in{'vfile'} = &make_absolute($in{'vfile'}); open(FILE, $in{'vfile'}); while() { if (/^Subject:\s*(.*)/) { $subject = $1; } elsif (/^From:\s*(.*)/) { $from = $1; } else { push(@lines, $_); } } close(FILE); if (!-r $in{'vfile'}) { ($froms, $doms) = &mailbox::list_from_addresses(); $from = $froms->[0]; } print &text('vfile_desc', "$in{'vfile'}"),"

\n"; print "

\n"; print &ui_hidden("file", $in{'file'}),"\n"; print &ui_hidden("num", $in{'num'}),"\n"; print &ui_hidden("vfile", $in{'vfile'}),"\n"; print &ui_hidden("idx", $in{'idx'}),"\n"; print "

\n"; print "\n"; # Show From: address option print "\n"; print "\n"; # Show Subject: line option print "\n"; print "\n"; print "
$text{'rfile_from'}",&ui_radio("from_def", $from ? 0 : 1, [ [ 1, $text{'default'} ], [ 0, " " ] ]),"\n", &ui_textbox("from", $from, 50),"
$text{'vfile_subject'}",&ui_radio("subject_def", $subject ? 0 : 1, [ [ 1, $text{'default'} ], [ 0, " " ] ]),"\n", &ui_textbox("subject", $subject, 50),"
\n"; print " ", "\n"; print "

\n"; &ui_print_footer(defined($in{'idx'}) ? ( "edit_vacation.cgi?num=$in{'num'}&file=$in{'file'}&idx=$in{'idx'}", $text{'vacation_return'} ) : ( ), "edit_alias.cgi?num=$in{'num'}&file=$in{'file'}", $text{'aform_return'}); forward/save_vfile.cgi0100775000567100000120000000141410206064720015014 0ustar jcameronwheel#!/usr/local/bin/perl # save_vfile.cgi # Save an vacation reply file require './forward-lib.pl'; &ReadParseMime(); &error_setup($text{'vfile_err'}); $in{'from_def'} || $in{'from'} =~ /\S/ || &error($text{'rfile_efrom'}); $in{'subject_def'} || $in{'subject'} =~ /\S/ || &error($text{'vfile_esubject'}); $in{'text'} =~ s/\r//g; &open_tempfile(FILE, ">$in{'vfile'}", 1) || &error(&text('rfile_ewrite', $!)); if (!$in{'from_def'}) { &print_tempfile(FILE, "From: $in{'from'}\n"); $hl++; } if (!$in{'subject_def'}) { &print_tempfile(FILE, "Subject: $in{'subject'}\n"); $hl++; } if ($hl && $in{'text'} !~ /^(\S+):\s+\S/) { &print_tempfile(FILE, "\n"); } &print_tempfile(FILE, $in{'text'}); &close_tempfile(FILE); &redirect("edit_alias.cgi?num=$in{'num'}&file=$in{'file'}"); forward/save_simple.cgi0100775000567100000120000000250710337336454015217 0ustar jcameronwheel#!/usr/local/bin/perl # Save simple email forwarding options require './forward-lib.pl'; &error_setup($text{'simple_err'}); &ReadParse(); # Validate and store inputs $simple = &get_simple(); $simple->{'local'} = $in{'local'}; if ($in{'forward'}) { $in{'forwardto'} || &error($text{'simple_eforward'}); $in{'forwardto'} =~ /^\S+$/ || &error($text{'simple_eforward2'}); $simple->{'forward'} = $in{'forwardto'}; } else { delete($simple->{'forward'}); } $userconfig{'forwardto'} = $in{'forwardto'}; if ($in{'autotext'}) { $simple->{'autotext'} = $in{'autotext'}; if (!$simple->{'from'}) { ($froms, $doms) = &mailbox::list_from_addresses(); $simple->{'from'} = $froms->[0]; } if ($in{'period_def'}) { delete($simple->{'replies'}); delete($simple->{'period'}); } else { $in{'period'} =~ /^\d+$/ || &error($text{'simple_eperiod'}); $simple->{'period'} = $in{'period'}*60; $simple->{'replies'} ||= "$user_module_config_directory/replies"; } if ($in{'from_def'}) { delete($simple->{'from'}); } else { $in{'from'} =~ /\S/ || &error($text{'simple_efrom'}); $simple->{'from'} = $in{'from'}; } } if ($in{'auto'}) { $in{'autotext'} =~ /\S/ || &error($text{'simple_eautotext'}); } $simple->{'auto'} = $in{'auto'}; # Save settings &save_simple($simple); &save_user_module_config(); &redirect("index.cgi?simple=1");