Userdaten aus Active Directory übernehmen
Userdaten aus Active Directory übernehmen
Wir haben OTRS auf einem Windows 2000-System installiert und wollen die Benutzerdaten (Kunden) aus dem vorhandenen Active Directory übernehmen.
Was ist zu tun??
Wir haben den Vorschlag aus dem Wiki schon probiert, aber ohne Erfolg
Fehlermeldung siehe Anhang
Vielen Dank für Eure Hilfe
Was ist zu tun??
Wir haben den Vorschlag aus dem Wiki schon probiert, aber ohne Erfolg
Fehlermeldung siehe Anhang
Vielen Dank für Eure Hilfe
You do not have the required permissions to view the files attached to this post.
hier die daten:
wäre es möglich das ich einen komplett-falschen "code" benutze?!
habe alles in die Config.pm eingetragen
Code: Select all
# ---------------------------------------------------- #
# Customer Authentifizirung via LDAP #
# ---------------------------------------------------- #
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} = 'host';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'uid';
$Self->{'Customer::AuthModule::LDAP::UserAttr'} = 'UID';
$Self->{'Customer::AuthModule::LDAP::GroupDN'} = ;
$Self->{'Customer::AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};
# ---------------------------------------------------- #
# customer Auth #
# ---------------------------------------------------- #
$Self->{CustomerUser} = {
Name => 'LDAP Datenquelle',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => 'host',
BaseDN => 'dc=host,dc=de',
SSCOPE => 'sub',
AlwaysFilter => ,
Params => {
port => 389,
timeout => 120,
async => 0,
version => 3,
},
},
CustomerKey => 'uid',
CustomerID => 'mail',
CustomerUserListFields => ['sn', 'cn', 'mail'],
CustomerUserSearchFields => ['uid', 'cn', 'sn', 'mail'],
CustomerUserSearchPrefix => ,
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
CustomerUserExcludePrimaryCustomerID => 0,
AdminSetPreferences => 0,
Map => [
[ 'UserSalutation', 'Title', 'title', 1, 0, 'var', , 0 ],
[ 'UserFirstname', 'Firstname', 'cn', 1, 1, 'var', , 0 ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var', , 0 ],
[ 'UserLogin', 'Username', 'uid', 1, 1, 'var', , 0 ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var', , 0 ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var', , 0 ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var', , 0 ],
[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var', , 0 ],
[ 'UserComment', 'Comment', 'description', 1, 0, 'var', , 0 ],
],
};
wäre es möglich das ich einen komplett-falschen "code" benutze?!
habe alles in die Config.pm eingetragen
Welche OTRS-Version verwendest du?
Unter 2.0.4 und 2.1.0 mit Authentification gegen ADS funktioniert diese Config
Was bei dir auf jeden Fall falsch war, wenn du gegen ADS Authentifizierst:
UID heißt in der ADS sAMAccounName.
Du wirst diese Zeilen an eure Umgebung anpassen müssen:
$Self->{'Customer::AuthModule::LDAP::Host'} = 'IP-Adresse';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'DC=host,DC=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=User,ou=OU,ou=OU,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
BaseDN => 'dc=host, dc=de',
UserDN => 'cn=User, ou=OU, ou=OU, dc=host, dc=de',
UserPw => 'Passwort',
DIESE ZEILEN BRAUCHST DU NU, WENN NICH ANONYM IN DER ADS GELESEN WERDEN KANN:
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=User,ou=OU,ou=OU,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
Der Rest sollte so passen.
Unter 2.0.4 und 2.1.0 mit Authentification gegen ADS funktioniert diese Config
Code: Select all
# --------------------------------------------------- #
# #
# Start of config options!!! #
# CustomerUser stuff #
# #
# --------------------------------------------------- #
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} = 'IP-Adresse';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'DC=host,DC=de';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=User,ou=OU,ou=OU,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
$Self->{UserSyncLDAPMap} = {
Firstname => 'givenName',
Lastname => 'sn',
Email => 'mail',
};
# ---------------------------------------------------- #
# customer Auth #
# ---------------------------------------------------- #
# CustomerUser1
# (customer user ldap backend and settings)
$Self->{CustomerUser1} = {
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'IP-Adresse',
# ldap base dn
BaseDN => 'dc=host, dc=de',
# search scope (one|sub)
SSCOPE => 'sub',
# The following is valid but would only be necessary if the
# anonymous user does NOT have permission to read from the LDAP tree
UserDN => 'cn=User, ou=OU, ou=OU, dc=host, dc=de',
UserPw => 'Passwort',
AlwaysFilter => '',
SourceCharset => 'utf-8',
DestCharset => 'iso-8859-1',
},
# customer uniq id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
#[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'sAmaccountName', 0, 1, 'var' ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
#[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
#[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
],
};
Was bei dir auf jeden Fall falsch war, wenn du gegen ADS Authentifizierst:
UID heißt in der ADS sAMAccounName.
Du wirst diese Zeilen an eure Umgebung anpassen müssen:
$Self->{'Customer::AuthModule::LDAP::Host'} = 'IP-Adresse';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'DC=host,DC=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=User,ou=OU,ou=OU,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
BaseDN => 'dc=host, dc=de',
UserDN => 'cn=User, ou=OU, ou=OU, dc=host, dc=de',
UserPw => 'Passwort',
DIESE ZEILEN BRAUCHST DU NU, WENN NICH ANONYM IN DER ADS GELESEN WERDEN KANN:
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=User,ou=OU,ou=OU,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
Der Rest sollte so passen.
SUSE 9.3 / OTRS 2.0.4 / Apache2 / MySQL 4
dankeschön für den code
habe nun unter [ Kunden Benutzer <-> Gruppen ] das "neue" backend ausgewählt, und nun kommt immer
dankeschön
habe nun unter [ Kunden Benutzer <-> Gruppen ] das "neue" backend ausgewählt, und nun kommt immer
ich hoffe auch da kann mir geholfen werden....Warnung: Sorry, feature not activ!
Kommentar: CustomerGroupSupport needs to be activ in Kernel/Config.pm, read more about this feature in the documentation. Take care!
dankeschön
ich habe den CustomerGroupSupport aktiviert...
nur zum verständniss...
wenn ich otrs "ldap-fähig" gemacht habe, müsste sich doch jeder kunde mit seinem "ldapccount" bzw seinen logindaten anmelden können? ohne das der benutzer vorher in otrs existiert hat...
es erscheint immer
EDIT: unter GenericAgent ist ein Job aufgetaucht mit dem hostnamen welcher in der config.pm angeben wurde
EDIT: ich glaube wir machen etwas grundlegend falsch, mal nochmal alles durchlesen
EDIT: ich möchte erreichen das jeder Benutzer im AD ein account bei OTRS bekommt, sprich ich nicht für jeden Benutzer ein Account manuell anlegen muss
nur zum verständniss...
wenn ich otrs "ldap-fähig" gemacht habe, müsste sich doch jeder kunde mit seinem "ldapccount" bzw seinen logindaten anmelden können? ohne das der benutzer vorher in otrs existiert hat...
es erscheint immer
beim kundenloginAnmeldung fehlgeschlagen! Benutzername oder Passwort falsch.
EDIT: unter GenericAgent ist ein Job aufgetaucht mit dem hostnamen welcher in der config.pm angeben wurde
EDIT: ich glaube wir machen etwas grundlegend falsch, mal nochmal alles durchlesen
EDIT: ich möchte erreichen das jeder Benutzer im AD ein account bei OTRS bekommt, sprich ich nicht für jeden Benutzer ein Account manuell anlegen muss
ja, mit der Kunden LDAP-Anmeldung brauchst du die Kunden natürlich nicht in der Datenbank.
Hab das gerade nochmal auf meiner Testmaschine nachvollzogen mit leerer Kundendatenbank.
Nach der änderung der Config bekam ich den selbern Fehler.
Nach Neustart des Apache, otrs und sql ging es dann aber mit genau dieser Config, dass alle User aus der AD sich anmelden konten.
Sinn und Zweck der LDAP-Anmeldung ist es ja ,dass du den User nicht nochmal anlegen musst.
Den Job im GenericAgent konnt ich leider nich nachvollziehen....hab ich nicht bekommen
Hab das gerade nochmal auf meiner Testmaschine nachvollzogen mit leerer Kundendatenbank.
Nach der änderung der Config bekam ich den selbern Fehler.
Nach Neustart des Apache, otrs und sql ging es dann aber mit genau dieser Config, dass alle User aus der AD sich anmelden konten.
Sinn und Zweck der LDAP-Anmeldung ist es ja ,dass du den User nicht nochmal anlegen musst.
Den Job im GenericAgent konnt ich leider nich nachvollziehen....hab ich nicht bekommen
SUSE 9.3 / OTRS 2.0.4 / Apache2 / MySQL 4
Code: Select all
# --------------------------------------------------- #
# #
# Start of config options!!! #
# CustomerUser stuff #
# #
# --------------------------------------------------- #
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} = 'hostname.des.ad';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'DC=domäne,DC=de';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=Benutzername,ou=Gruppe.des.Benutzers,ou=Gruppe.des.Benutzers,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
$Self->{UserSyncLDAPMap} = {
Firstname => 'givenName',
Lastname => 'sn',
Email => 'mail',
};
# ---------------------------------------------------- #
# customer Auth #
# ---------------------------------------------------- #
# CustomerUser1
# (customer user ldap backend and settings)
$Self->{CustomerUser1} = {
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'hostname.des.ad',
# ldap base dn
BaseDN => 'dc=domäne, dc=de',
# search scope (one|sub)
SSCOPE => 'sub',
# The following is valid but would only be necessary if the
# anonymous user does NOT have permission to read from the LDAP tree
UserDN => 'cn=Benutzername, ou=Gruppe.des.Benutzers, ou=Gruppe.des.Benutzers, dc=domäne, dc=de',
UserPw => 'Passwort',
AlwaysFilter => '',
SourceCharset => 'utf-8',
DestCharset => 'iso-8859-1',
},
# customer uniq id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
#[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'sAmaccountName', 0, 1, 'var' ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
#[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
#[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
],
};
das ist meine config welche ich in der config.pm eingetragen habe,
ich habe im AD 3 Gruppen (mit Untergruppen, wie sind diese zu integrieren) in denen jeweils Benutzer gespeichert sind, wie sieht eine config aus die versch. "Benutzergruppen/container" enthält?
Alle Benutzer sind in derselben Domäne
Eventuell ist hier dein Fehler:
Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=Benutzername,ou=Gruppe.des.Benutzers,ou=Gruppe.des.Benutzers,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
Bist du sicher, dass die DN stimmt?
Du musst hier einen User angeben, der aus der ADS lesen kann.
hier solltest du dann den selben User wie oben verwenden:
UserDN => 'cn=Benutzername, ou=Gruppe.des.Benutzers, ou=Gruppe.des.Benutzers, dc=domäne, dc=de',
UserPw => 'Passwort',
Du kannst dir ja mal testweise im AD einen User anlegen, und diesen zum Admin machen.
Weißt du, wie man die DN angibt?
Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=Benutzername,ou=Gruppe.des.Benutzers,ou=Gruppe.des.Benutzers,dc=host,dc=de';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passwort';
Bist du sicher, dass die DN stimmt?
Du musst hier einen User angeben, der aus der ADS lesen kann.
hier solltest du dann den selben User wie oben verwenden:
UserDN => 'cn=Benutzername, ou=Gruppe.des.Benutzers, ou=Gruppe.des.Benutzers, dc=domäne, dc=de',
UserPw => 'Passwort',
Du kannst dir ja mal testweise im AD einen User anlegen, und diesen zum Admin machen.
Weißt du, wie man die DN angibt?
SUSE 9.3 / OTRS 2.0.4 / Apache2 / MySQL 4
wenn der LDAP-Baum zum Beispiel so aussieht:
Die Domäne ist "Domäne.de"
du hast 3 Organisationseinheiten, und in der Dritten liegt der User
Firma
-->Abteilung
--->Unterabteilung
--->Test User
Dann sieht die DN so aus:
CN=Test User, OU=Unterabteilung,OU=Abteilung,OU=Firma,DC=Domäne,DC=de
Die Domäne ist "Domäne.de"
du hast 3 Organisationseinheiten, und in der Dritten liegt der User
Firma
-->Abteilung
--->Unterabteilung
--->Test User
Dann sieht die DN so aus:
CN=Test User, OU=Unterabteilung,OU=Abteilung,OU=Firma,DC=Domäne,DC=de
SUSE 9.3 / OTRS 2.0.4 / Apache2 / MySQL 4
hier sieht es so aus als ob immernoch versucht wird den benutzer über die "otrsdb" zu identifizieren...[Notice][Kernel::System::Auth::DB::Auth] User: username doesn't exist or is invalid!!! (REMOTE_ADDR: *.*.*.*)
ich habe den "ldap-code" in der config.pm eingetragen, und unter [Kunden Benutzer] habe ich zwei eintrage bei Quelle auswählen (zum Hinzufügen): stehen...
Database Backend
No Name 1 << mittels "ändern" angewählt...
woran sehe ich genau ob "ldap" aktiviert wurde, müsste doch in der fehlerlog ein entsprechender eintrag mit [Kernel::System::Auth::LDAP::Auth oder so zu sehen sein, wie es schonmal bei mir zu sehen war...
Hmmm. Evtl mußt du das noch in der Sysconfig umstellen.
unter Framework-->Frontend::Customer::Auth.
im ersten Schlüssel kannst du zwischen DB, LDAP, Radius und HTTPBasicAuth wählen.
Stelle hier mal LDAP ein
Unter dem Schlüssel Customer::AuthModule::LDAP::Host trägst du die IP des LDAP Servers ein,
unter Customer::AuthModule::LDAP::BaseDN trägst du DC=Domäne,DC=de
ein
unter Customer::AuthModule::LDAP::UID trägst du sAMAccountName ein
unter Framework-->Frontend::Customer::Auth.
im ersten Schlüssel kannst du zwischen DB, LDAP, Radius und HTTPBasicAuth wählen.
Stelle hier mal LDAP ein
Unter dem Schlüssel Customer::AuthModule::LDAP::Host trägst du die IP des LDAP Servers ein,
unter Customer::AuthModule::LDAP::BaseDN trägst du DC=Domäne,DC=de
ein
unter Customer::AuthModule::LDAP::UID trägst du sAMAccountName ein
SUSE 9.3 / OTRS 2.0.4 / Apache2 / MySQL 4
ich habe ein älteres backup, quasi unbearbeitet, aber ldap scheint nicht funktionieren zu wollen, nichtmal ein authentifizierungsversuch über ldap wird gestartet laut log
EDIT:
[Wed Sep 20 14:15:32 2006][Notice][Kernel::System::CustomerAuth::LDAP::Auth] CustomerUser: USERNAME authentification failed, no LDAP entry found!BaseDN='DC=domäne,DC=de', Filter='(sAMAccountName=USERNAME)', (REMOTE_ADDR: *.*.*.*).
scheint nun wnigstens eine authentifikation über ldap starten zu wollen, aber findet keinen eintrag!?
EDIT:
[Wed Sep 20 14:15:32 2006][Notice][Kernel::System::CustomerAuth::LDAP::Auth] CustomerUser: USERNAME authentification failed, no LDAP entry found!BaseDN='DC=domäne,DC=de', Filter='(sAMAccountName=USERNAME)', (REMOTE_ADDR: *.*.*.*).
scheint nun wnigstens eine authentifikation über ldap starten zu wollen, aber findet keinen eintrag!?
Im Normalfall sieht das dann so aus:
BaseDN => dc=firma,dc=lan
Hast Du evtl ne Subdomäne?
BaseDN => dc=entwicklung,dc=firma,dc=lan
Im alten OTRS Manual ist die Konfiguration noch etwas ausführlicher beschrieben:
http://doc.otrs.org/1.3/de/html/ldap-integration.html
edit:
Hier nochmal ne Beispiel Config:
BaseDN => dc=firma,dc=lan
Hast Du evtl ne Subdomäne?
BaseDN => dc=entwicklung,dc=firma,dc=lan
Im alten OTRS Manual ist die Konfiguration noch etwas ausführlicher beschrieben:
http://doc.otrs.org/1.3/de/html/ldap-integration.html
edit:
Hier nochmal ne Beispiel Config:
# ---------------------------------------------------- #
# Customer Authentifizierung via LDAP #
# ---------------------------------------------------- #
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} = 'server.firma.lan';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=firma,dc=lan';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter'} = '';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'CN=username,OU=gruppe,OU=gruppe,DC=firma,DC=lan';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'password';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::UserAttr'} = 'DN';
#$Self->{'Customer::AuthModule::LDAP::GroupDN'} = '';
$Self->{'Customer::AuthModule::LDAP::Params'} = {
# port => 389,
# timeout => 120,
# async => 0,
# version => 3,
SourceCharset => 'utf-8',
DestCharset => 'utf-8',
};
# ---------------------------------------------------- #
# customer Auth #
# ---------------------------------------------------- #
# CustomerUser
# (customer user ldap backend and settings)
$Self->{CustomerUser} = {
Name=> 'LDAP Datenquelle',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'server.firma.lan',
# ldap base dn
BaseDN => 'dc=firma, dc=lan',
# search scope (one|sub)
SSCOPE => 'sub',
UserDN => 'CN=username,OU=gruppe,OU=gruppe,DC=firma,DC=lan',
UserPw => 'password',
AlwaysFilter => '',
SourceCharset => 'utf-8',
DestCharset => 'iso-8859-1',
},
# customer uniq id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
#[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
#[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
#[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
],
};