diff --git a/iscsi-target/config b/iscsi-target/config
new file mode 100644
index 000000000..10afcf37e
--- /dev/null
+++ b/iscsi-target/config
@@ -0,0 +1,3 @@
+config_file=/etc/ietd.conf
+ietadm=ietadm
+init_name=iscsitarget
diff --git a/iscsi-target/config.info b/iscsi-target/config.info
new file mode 100644
index 000000000..88e23c9c9
--- /dev/null
+++ b/iscsi-target/config.info
@@ -0,0 +1,3 @@
+config_file=iSCSI target configuration file,0
+ietadm=Full path to ietadm command,0
+init_name=Bootup script name,0
diff --git a/iscsi-target/index.cgi b/iscsi-target/index.cgi
new file mode 100644
index 000000000..b711a2e1c
--- /dev/null
+++ b/iscsi-target/index.cgi
@@ -0,0 +1,56 @@
+#!/usr/local/bin/perl
+# Display a list of iSCSI targets?
+
+use strict;
+use warnings;
+require './iscsi-target-lib.pl';
+our (%text, %config, $module_name);
+
+&ui_print_header(undef, $text{'index_title'}, "", "intro", 1, 1);
+
+my $err = &check_config();
+if ($err) {
+ &ui_print_endpage(
+ $err." ".&text('index_clink', "../config.cgi?$module_name"));
+ }
+
+my @links = ( "list_extents.cgi", "list_devices.cgi",
+ "list_targets.cgi", "edit_opts.cgi",
+ "edit_manual.cgi" );
+my @titles = ( $text{'extents_title'}, $text{'devices_title'},
+ $text{'targets_title'}, $text{'opts_title'},
+ $text{'manual_title'} );
+my @icons = ( "images/extents.gif", "images/devices.gif",
+ "images/targets.gif", "images/opts.gif",
+ "images/manual.gif" );
+&icons_table(\@links, \@titles, \@icons, 5);
+
+print &ui_hr();
+print &ui_buttons_start();
+
+# Show start/stop/restart buttons
+my $pid = &is_iscsi_target_running();
+if ($pid) {
+ print &ui_buttons_row("restart.cgi", $text{'index_restart'},
+ $text{'index_restartdesc'});
+ print &ui_buttons_row("stop.cgi", $text{'index_stop'},
+ $text{'index_stopdesc'});
+ }
+else {
+ print &ui_buttons_row("start.cgi", $text{'index_start'},
+ $text{'index_startdesc'});
+ }
+
+# Show start at boot button
+&foreign_require("init");
+my $starting = &init::action_status($config{'init_name'});
+print &ui_buttons_row("atboot.cgi",
+ $text{'index_atboot'},
+ $text{'index_atbootdesc'},
+ undef,
+ &ui_radio("boot", $starting == 2 ? 1 : 0,
+ [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ]));
+
+print &ui_buttons_end();
+
+&ui_print_footer("/", $text{'index'});
diff --git a/iscsi-target/install_check.pl b/iscsi-target/install_check.pl
new file mode 100755
index 000000000..2b5f41d3e
--- /dev/null
+++ b/iscsi-target/install_check.pl
@@ -0,0 +1,15 @@
+# install_check.pl
+
+do 'iscsi-target-lib.pl';
+
+# is_installed(mode)
+# For mode 1, returns 2 if the server is installed and configured for use by
+# Webmin, 1 if installed but not configured, or 0 otherwise.
+# For mode 0, returns 1 if installed, 0 if not
+sub is_installed
+{
+my ($mode) = @_;
+my $err = &check_config();
+return $err ? 0 : $mode + 1;
+}
+
diff --git a/iscsi-target/iscsi-target-lib.pl b/iscsi-target/iscsi-target-lib.pl
new file mode 100644
index 000000000..2cd995cea
--- /dev/null
+++ b/iscsi-target/iscsi-target-lib.pl
@@ -0,0 +1,63 @@
+# iscsi-target-lib.pl
+# Common functions for managing and configuring an iSCSI target
+
+BEGIN { push(@INC, ".."); };
+use strict;
+use warnings;
+use WebminCore;
+&init_config();
+&foreign_require("raid");
+&foreign_require("fdisk");
+&foreign_require("lvm");
+&foreign_require("mount");
+our (%text, %config, %gconfig, $module_config_file);
+
+# check_config()
+# Returns undef if the iSCSI server is installed, or an error message if
+# missing
+sub check_config
+{
+return &text('check_econfig', "$config{'config_file'}")
+ if (!-r $config{'config_file'});
+return &text('check_eietadm', "$config{'ietadm'}")
+ if (!&has_command($config{'ietadm'}));
+return undef;
+}
+
+# get_iscsi_config()
+# Returns an array ref of entries from the iSCSI target config file
+sub get_iscsi_config
+{
+my @rv;
+my $fh = "CONFIG";
+my $lnum = 0;
+&open_readfile($fh, $config{'config_file'}) || return [ ];
+my $parent = undef;
+while(<$fh>) {
+ s/\r|\n//g;
+ s/#.*$//;
+ my @w = split(/\s+/, $_);
+ my $dir;
+ if (@w) {
+ $dir = { 'name' => $w[0],
+ 'value' => $w[1],
+ 'line' => $lnum };
+ }
+ if (/^\S/) {
+ # Top-level directive
+ $parent = $dir;
+ push(@rv, $parent);
+ }
+ elsif (@w) {
+ # Sub-directive
+ $parent || &error("Sub-directive with no parent at line $lnum");
+ $parent->{'members'} ||= [ ];
+ push(@{$parent->{'members'}}, $dir);
+ }
+ $lnum++;
+ }
+close($fh);
+return \@rv;
+}
+
+1;
diff --git a/iscsi-target/lang/en b/iscsi-target/lang/en
new file mode 100644
index 000000000..f8b735634
--- /dev/null
+++ b/iscsi-target/lang/en
@@ -0,0 +1,3 @@
+
+config_econfig=The iSCSI target configuration file $1 was not found on your system.
+config_eietadm=The iSCSI target administration command $1 was not found on your system.
diff --git a/postfix/lang/de b/postfix/lang/de
index 0069242d7..1e2a6d286 100644
--- a/postfix/lang/de
+++ b/postfix/lang/de
@@ -1,4 +1,6 @@
__norefs=1
+acl_aliases=Kann Alias editieren?
+acl_aliases_options=Kann Alias Optionen editieren?
acl_ldap=Kann LDAP editieren?
acl_smtp=Kann smtp editieren?
acl_smtpd=Kann smtpd editieren?
@@ -7,12 +9,17 @@ acl_transport=Kann transport editieren?
acl_virtual=Kann virtual editieren?
address_rewriting_ecannot=Sie haben keine Berechtigung, Adressumschreibung und Maskierung zu bearbeiten.
address_rewriting_title=Adressumschreibung und Maskierung
+afile_efile=Es ist Ihnen nicht erlaubt $1 zu editieren
+afile_undo=Änderungen rückgängig
aform_afile=Editiere...
aform_cmt=Beschreibung
+aform_create=Alias erstellen
+aform_edit=Alias editieren
aform_enabled=Aktiviert?
aform_name=Adresse
aform_return=alias
aform_type1=E-Mail Adresse
+aform_type2=Adressen in Datei
aform_type3=Schreibe in Datei
alias_delete_create=Sie wollen den Alias löschen, den Sie gerade erstellen!?
alias_save=Alias speichern
@@ -63,10 +70,18 @@ chooser_muser=Datenbank Login
chooser_mysql=MySQL Datenbank
chooser_mysqlsrc=MySQL Quelle
chooser_other=Andere Quelle
+client_err=Fehlgeschlage Client Restriktionen zu speichern
+client_evalue=Fehlender Wert für Restriktion $1
+client_other=Andere Restriktionen :
+client_restrict=Client Restriktionen
+client_restrict0=Ausgewählte unten ..
client_restrict1=Postfix Standard (erlaube alle Clients)
client_return=SMTP-Client Einschränkungen
client_title=SMTP-Client Einschränkungen
+cmanual_ecannot=Es ist Ihnen nicht erlaubt die Postfix Konfigurationsdatei zu editieren
cmanual_edata=Nichts eingegeben!
+cmanual_efile=Die ausgewählte Datei ist nicht Bestandteil der Postfix Konfiguration
+cmanual_err=Fehlgeschlagen Konfigurationsdatei zu speichern
cmanual_file=Editiere Konfigurationsdatei:
cmanual_ok=Editieren
cmanual_title=Editiere Konfigurationsdateien
@@ -113,6 +128,8 @@ ldap_non_existent=Es scheint, dass LDAP nicht auf Ihrem Postfix-System existiert
ldap_title=LDAP-Lookups
local_delivery_ecannot=Sie haben keine Berechtigung, die lokalen Lieferungseinstellungen zu bearbeiten
local_delivery_title=Lokale Lieferung
+log_smtp=SMTP Client Optionen geändert
+log_smtpd=SMTP Server Optionen geändert
log_start=Postfix Server gestartet
log_stop=Postfix Server gestoppt
mail_all=Alle auswählen
@@ -164,6 +181,7 @@ mailq_size=Größe
mailq_status=Status
mailq_subject=Betreff
mailq_to=Zu
+manual_change=Ändern
map_click=Klicken Sie auf eine Verknüpfung, um Ihre Eigenschaften zu bearbeiten
map_delete_create=Sie können keine Verknüpfung löschen, die Sie gerade erstellen
map_save=Verknüpfung speichern
@@ -398,12 +416,15 @@ rfile_efile=Es ist Ihnen nicht erlaubt $1 zu editieren.
rfile_efrom=Fehlende "Von:" Adresse
rfile_file=Ja, benutze Logdatei
rfile_secs=Sekunden
+rfile_undo=Änderung rückgängig
sasl_elogin=Fehleder oder ungültiger SMTP Login
sasl_epass=Ungültiges SMTP Passwort
sasl_level_encrypt=Immer
sasl_level_none=Niemals
sasl_opts=SMTP Sicherheitseinstellungen
sasl_permit_inet_interfaces=Erlaube Verbindungen von diesem System
+sasl_permit_mynetworks=Erlaube Verbindungen vom gleichen Netzwerk
+sasl_permit_sasl_authenticated=Erlaube authentifizierte Clients
sasl_title=SMTP-Authentifizierung und Verschlüsselung
sasl_userpass=Login als $1 mit Passwort $2
search_efield=Sie müssen ein Suchtyp wählen.
@@ -441,6 +462,7 @@ view_reply=Antworten
view_reply2=Antworten an alle
view_return=Original E-Mail
view_strip=Entferne Anhänge
+view_title=Lese E-Mail
virtual_ecannot=Sie haben keine Berechtigung, Verknüpfung für virtuelle Domänen zu bearbeiten
virtual_title=Virtuelle Domänen
what_is_it=Was ist das?