parent
2eef94e31a
commit
f3f5a170cd
|
@ -0,0 +1,28 @@
|
||||||
|
The attribute "host" is only in objectclass account.
|
||||||
|
Unfortunatly "account" conflicts with
|
||||||
|
"inetorgperson". so there's no perfect way to use
|
||||||
|
both.
|
||||||
|
|
||||||
|
In order to get attribute host working you have to
|
||||||
|
modify schema/inetoergperson and include host:
|
||||||
|
|
||||||
|
|
||||||
|
# inetOrgPerson
|
||||||
|
# The inetOrgPerson represents people who are associated with an
|
||||||
|
# organization in some way. It is a structural class and is derived
|
||||||
|
# from the organizationalPerson which is defined in X.521 [X521].
|
||||||
|
objectclass ( 2.16.840.1.113730.3.2.2
|
||||||
|
NAME 'inetOrgPerson'
|
||||||
|
DESC 'RFC2798: Internet Organizational Person'
|
||||||
|
SUP organizationalPerson
|
||||||
|
STRUCTURAL
|
||||||
|
MAY (
|
||||||
|
audio $ businessCategory $ carLicense $ departmentNumber $
|
||||||
|
displayName $ employeeNumber $ employeeType $ givenName $
|
||||||
|
homePhone $ homePostalAddress $ initials $ jpegPhoto $
|
||||||
|
labeledURI $ mail $ manager $ mobile $ o $ pager $
|
||||||
|
photo $ roomNumber $ secretary $ uid $ userCertificate $
|
||||||
|
x500uniqueIdentifier $ preferredLanguage $
|
||||||
|
userSMIMECertificate $ userPKCS12 $ host )
|
||||||
|
)
|
||||||
|
|
|
@ -171,7 +171,7 @@ function checkglobal($values, $type, $values_old=false) { // This functions chec
|
||||||
// Check if Homedir is valid
|
// Check if Homedir is valid
|
||||||
$return->general_homedir = str_replace('$group', $values->general_group, $values->general_homedir);
|
$return->general_homedir = str_replace('$group', $values->general_group, $values->general_homedir);
|
||||||
if ($values->general_username != '')
|
if ($values->general_username != '')
|
||||||
$return->general_homedir = str_replace('$user', $values->general_username, $values->general_homedir);
|
$return->general_homedir = str_replace('$user', $values->general_username, $return->general_homedir);
|
||||||
if ($return->general_homedir != $values->general_homedir) $errors[] = array('INFO', _('Home Directory'), _('Replaced $user or $group in homedir.'));
|
if ($return->general_homedir != $values->general_homedir) $errors[] = array('INFO', _('Home Directory'), _('Replaced $user or $group in homedir.'));
|
||||||
if ( !ereg('^[/]([a-z]|[A-Z])([a-z]|[A-Z]|[0-9]|[.]|[-]|[_])*([/]([a-z]|[A-Z])([a-z]|[A-Z]|[0-9]|[.]|[-]|[_])*)*$', $return->general_homedir ))
|
if ( !ereg('^[/]([a-z]|[A-Z])([a-z]|[A-Z]|[0-9]|[.]|[-]|[_])*([/]([a-z]|[A-Z])([a-z]|[A-Z]|[0-9]|[.]|[-]|[_])*)*$', $return->general_homedir ))
|
||||||
$errors[] = array('ERROR', _('Home Directory'), _('Homedirectory contents invalid characters.'));
|
$errors[] = array('ERROR', _('Home Directory'), _('Homedirectory contents invalid characters.'));
|
||||||
|
@ -315,7 +315,7 @@ function checkunix($values, $type) { // This function checks all unix account pa
|
||||||
if ( !ereg('^(([-][1])|([0-9]*))$', $values->unix_pwdallowlogin))
|
if ( !ereg('^(([-][1])|([0-9]*))$', $values->unix_pwdallowlogin))
|
||||||
$errors[] = array('ERROR', _('Password Expire'), _('Password Expire must be are natural number or -1.'));
|
$errors[] = array('ERROR', _('Password Expire'), _('Password Expire must be are natural number or -1.'));
|
||||||
if ( !ereg('^([0-9]*)$', $values->unix_pwdwarn)) $errors[] = array('ERROR', _('Password Warn'), _('Password Warn must be are natural number.'));
|
if ( !ereg('^([0-9]*)$', $values->unix_pwdwarn)) $errors[] = array('ERROR', _('Password Warn'), _('Password Warn must be are natural number.'));
|
||||||
if ((!$values->unix_host=='') && !ereg('^([a-z]|[A-Z]|[0-9]|[.]|[-])+(([,])+([a-z]|[A-Z]|[0-9]|[.]|[-])+)*$', $values->unix_host))
|
if ((!$values->unix_host=='') && !ereg('^([a-z]|[A-Z]|[0-9]|[.]|[-])+(([,])+([ ])*([a-z]|[A-Z]|[0-9]|[.]|[-])+)*$', $values->unix_host))
|
||||||
$errors[] = array('ERROR', _('Unix workstations'), _('Unix workstations is invalid.'));
|
$errors[] = array('ERROR', _('Unix workstations'), _('Unix workstations is invalid.'));
|
||||||
return $errors;
|
return $errors;
|
||||||
}
|
}
|
||||||
|
@ -706,7 +706,12 @@ function loaduser($dn) { // Will load all needed values from an existing account
|
||||||
if (isset($attr['shadowWarning'][0])) $return->unix_pwdwarn = $attr['shadowWarning'][0];
|
if (isset($attr['shadowWarning'][0])) $return->unix_pwdwarn = $attr['shadowWarning'][0];
|
||||||
if (isset($attr['shadowInactive'][0])) $return->unix_pwdallowlogin = $attr['shadowInactive'][0];
|
if (isset($attr['shadowInactive'][0])) $return->unix_pwdallowlogin = $attr['shadowInactive'][0];
|
||||||
if (isset($attr['shadowExpire'][0])) $return->unix_pwdexpire = $attr['shadowExpire'][0]*86400;
|
if (isset($attr['shadowExpire'][0])) $return->unix_pwdexpire = $attr['shadowExpire'][0]*86400;
|
||||||
if (isset($attr['host'][0])) $return->unix_host = $attr['host'][0];
|
$i=0;
|
||||||
|
while (isset($attr['host'][$i])) {
|
||||||
|
if ($i==0) $return->unix_host = $attr['host'][$i];
|
||||||
|
else $return->unix_host = $return->unix_host . ', ' . $attr['host'][$i];
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
if ($_SESSION['config']->samba3 == 'yes') {
|
if ($_SESSION['config']->samba3 == 'yes') {
|
||||||
if (isset($attr['sambaAcctFlags'][0])) {
|
if (isset($attr['sambaAcctFlags'][0])) {
|
||||||
if (strrpos($attr['sambaAcctFlags'][0], 'W')) $return->smb_flagsW=true;
|
if (strrpos($attr['sambaAcctFlags'][0], 'W')) $return->smb_flagsW=true;
|
||||||
|
@ -947,7 +952,13 @@ function createuser($values) { // Will create the LDAP-Account
|
||||||
$attr['gecos'] = $values->general_gecos; // posixAccount_may
|
$attr['gecos'] = $values->general_gecos; // posixAccount_may
|
||||||
$attr['description'] = $values->general_gecos; // posixAccount_may sambaAccount_may
|
$attr['description'] = $values->general_gecos; // posixAccount_may sambaAccount_may
|
||||||
|
|
||||||
if ($values->unix_host!='') $attr['host'] = $values->unix_host; // account_may
|
$values->unix_host = str_replace(' ', '', $values->unix_host);
|
||||||
|
$hosts = explode (',', $values->unix_host);
|
||||||
|
$i=0;
|
||||||
|
while(isset($hosts[$i])) {
|
||||||
|
$attr['host'][$i] = $hosts[$i];
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
if ($values->unix_pwdminage!='') $attr['shadowMin'] = $values->unix_pwdminage; // shadowAccount_may
|
if ($values->unix_pwdminage!='') $attr['shadowMin'] = $values->unix_pwdminage; // shadowAccount_may
|
||||||
if ($values->unix_pwdmaxage!='') $attr['shadowMax'] = $values->unix_pwdmaxage; // shadowAccount_may
|
if ($values->unix_pwdmaxage!='') $attr['shadowMax'] = $values->unix_pwdmaxage; // shadowAccount_may
|
||||||
if ($values->unix_pwdwarn!='') $attr['shadowWarning'] = $values->unix_pwdwarn; // shadowAccount_may
|
if ($values->unix_pwdwarn!='') $attr['shadowWarning'] = $values->unix_pwdwarn; // shadowAccount_may
|
||||||
|
@ -1104,8 +1115,37 @@ function modifyuser($values,$values_old) { // Will modify the LDAP-Account
|
||||||
$attr['gecos'] = $values->general_gecos; // posixAccount_may
|
$attr['gecos'] = $values->general_gecos; // posixAccount_may
|
||||||
$attr['description'] = $values->general_gecos; // posixAccount_may sambaAccount_may
|
$attr['description'] = $values->general_gecos; // posixAccount_may sambaAccount_may
|
||||||
}
|
}
|
||||||
if (($values->unix_host != $values_old->unix_host) && ($values->unix_host !=''))
|
|
||||||
$attr['host'] = $values->unix_host; // shadowAccount_may
|
if (($values->unix_host != $values_old->unix_host)) {
|
||||||
|
$values->unix_host = str_replace(' ', '', $values->unix_host);
|
||||||
|
$hosts = explode (',', $values->unix_host);
|
||||||
|
$values_old->unix_host = str_replace(' ', '', $values_old->unix_host);
|
||||||
|
$hosts_old = explode (',', $values_old->unix_host);
|
||||||
|
$i=0;
|
||||||
|
while (isset($hosts[$i])) {
|
||||||
|
if ( in_array($hosts[$i], $hosts_old) ) unset ($hosts[$i]);
|
||||||
|
else $i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$i=0;
|
||||||
|
$j=0;
|
||||||
|
while(isset($hosts[$i])) {
|
||||||
|
if ($hosts[$i]!='') {
|
||||||
|
$attr['host'][$j] = $hosts[$i];
|
||||||
|
$j++;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$i=0;
|
||||||
|
$j=0;
|
||||||
|
while(isset($hosts_old[$i])) {
|
||||||
|
if ($hosts_old[$i]!='') {
|
||||||
|
$attr_rem['host'][$j] = $hosts_old[$i];
|
||||||
|
$j++;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
if (($values->unix_pwdminage != $values_old->unix_pwdminage) && ($values->unix_pwdminage !=''))
|
if (($values->unix_pwdminage != $values_old->unix_pwdminage) && ($values->unix_pwdminage !=''))
|
||||||
$attr['shadowMin'] = $values->unix_pwdminage; // shadowAccount_may
|
$attr['shadowMin'] = $values->unix_pwdminage; // shadowAccount_may
|
||||||
if (($values->unix_pwdminage != $values_old->unix_pwdminage) && ($values->unix_pwdminage ==''))
|
if (($values->unix_pwdminage != $values_old->unix_pwdminage) && ($values->unix_pwdminage ==''))
|
||||||
|
|
|
@ -31,7 +31,12 @@
|
||||||
@admins = ('cn=Manager,dc=my-domain,dc=com');
|
@admins = ('cn=Manager,dc=my-domain,dc=com');
|
||||||
$server="127.0.0.1"; # IP or DNS of ldap-server
|
$server="127.0.0.1"; # IP or DNS of ldap-server
|
||||||
$server_port='389'; # Port used from ldap
|
$server_port='389'; # Port used from ldap
|
||||||
$server_tls='no'; # Use TLS? ************* Not working yet
|
$server_tls='no'; # Use TLS?
|
||||||
|
$server_tls_verify='require'; # none,optional or require a valid server certificated
|
||||||
|
$server_tls_clientcert=''; # path to client certificate
|
||||||
|
$server_tls_clientkey=''; # path to client certificate
|
||||||
|
$server_tls_decryptkey=''; # To to decrypt clientkey
|
||||||
|
$server_tls_cafile=''; # Path to CA-File
|
||||||
$debug=true; # Show debug messages
|
$debug=true; # Show debug messages
|
||||||
|
|
||||||
# Don't change anything below this line
|
# Don't change anything below this line
|
||||||
|
@ -92,7 +97,15 @@ foreach my $admin (@admins) { # Check if user is admin
|
||||||
}
|
}
|
||||||
if ($found==true) {
|
if ($found==true) {
|
||||||
# Connect to ldap-server and check if password is valid.
|
# Connect to ldap-server and check if password is valid.
|
||||||
$ldap = Net::LDAP->new($server, port => $server_port) or die ('Can\'t connect to ldapserver.');
|
$ldap = Net::LDAP->new($server, port => $server_port, version => 3) or die ('Can\'t connect to ldapserver.');
|
||||||
|
if ($server_tls eq 'yes') {
|
||||||
|
$mesg = $ldap->start_tls(
|
||||||
|
verify => $server_tls_verify,
|
||||||
|
clientcert => $server_tls_clientcert,
|
||||||
|
clientkey => $server_tls_clientkey,
|
||||||
|
decrypte => sub { $server_tls_decryptkey; },
|
||||||
|
cafile => $server_tls_cafile);
|
||||||
|
}
|
||||||
$result = $ldap->bind (dn => $vals[0], password => $vals[1]) ;
|
$result = $ldap->bind (dn => $vals[0], password => $vals[1]) ;
|
||||||
$ldap->unbind(); # Close ldap connection.
|
$ldap->unbind(); # Close ldap connection.
|
||||||
if (!$result->code) { # password is valid
|
if (!$result->code) { # password is valid
|
||||||
|
@ -109,7 +122,9 @@ if ($found==true) {
|
||||||
($<, $>) = ($>, $<); # Get root privileges
|
($<, $>) = ($>, $<); # Get root privileges
|
||||||
if (! -e $path) {
|
if (! -e $path) {
|
||||||
system 'mkdir', '-m 755', '-p', $path; # Create paths to homedir
|
system 'mkdir', '-m 755', '-p', $path; # Create paths to homedir
|
||||||
system 'mkdir', '-m 700', $user[7]; # Create himdir itself
|
}
|
||||||
|
if (! -e $user[7]) {
|
||||||
|
system 'mkdir', '-m 755', $user[7]; # Create himdir itself
|
||||||
system "cp -a /etc/skel/* /etc/skel/.[^.]* $user[7]"; # Copy /etc/sekl into homedir
|
system "cp -a /etc/skel/* /etc/skel/.[^.]* $user[7]"; # Copy /etc/sekl into homedir
|
||||||
system 'chown', '-R', "$user[2]:$user[3]" , $user[7]; # Change owner to new user
|
system 'chown', '-R', "$user[2]:$user[3]" , $user[7]; # Change owner to new user
|
||||||
system '/usr/sbin/useradd.local', $user[0]; # run useradd-script
|
system '/usr/sbin/useradd.local', $user[0]; # run useradd-script
|
||||||
|
|
Loading…
Reference in New Issue