X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fpersonal%2Fgeneric%2Fclass_user.inc;h=8c1b16b0eeb529d01a4c6888c22484421080458e;hb=37179d3551c8396d91ac25937e8e102cc9726953;hp=2141c2ec34891abe5fb420e33ec4369e9f03d486;hpb=2731357c333228187a504bee9df887dbf18f5538;p=gosa.git diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc index 2141c2ec3..8c1b16b0e 100644 --- a/plugins/personal/generic/class_user.inc +++ b/plugins/personal/generic/class_user.inc @@ -16,14 +16,11 @@ class user extends plugin var $plHeadline= "Generic"; var $plDescription= "This does something"; - /* CLI vars */ - var $cli_summary= "Handling of GOsa's user base object"; - var $cli_description= "Some longer text\nfor help"; - var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); - /* Plugin specific values */ var $base= ""; + var $orig_base= ""; var $cn= ""; + var $new_dn= ""; var $personalTitle= ""; var $academicTitle= ""; var $homePostalAddress= ""; @@ -85,8 +82,8 @@ class user extends plugin /* attribute list for save action */ var $attributes= array("sn", "givenName", "uid", "personalTitle", "academicTitle", - "homePostalAddress", "homePhone", "labeledURI", "o", "ou", "dateOfBirth", "gender","preferredLanguage", - "departmentNumber", "employeeNumber", "employeeType", "l", "st", + "homePostalAddress", "homePhone", "labeledURI", "ou", "o", "dateOfBirth", "gender","preferredLanguage", + "departmentNumber", "employeeNumber", "employeeType", "l", "st","jpegPhoto", "roomNumber", "telephoneNumber", "mobile", "pager", "cn", "userPKCS12", "postalAddress", "facsimileTelephoneNumber", "userSMIMECertificate"); @@ -202,6 +199,8 @@ class user extends plugin if (isset ($this->attrs['gender'])){ $this->gender= strtoupper($this->attrs['gender'][0]); } + + $this->orig_base = $this->base; } @@ -219,7 +218,12 @@ class user extends plugin } else { if(is_array($this->dateOfBirth)){ $date = $this->dateOfBirth; - }else{ + + // Trigger on dates like 1985-04-01, getdate only understands timestamps + } else if (!empty($this->dateOfBirth) && !is_numeric($this->dateOfBirth)){ + $date= getdate(strtotime($this->dateOfBirth)); + + } else { $date = getdate($this->dateOfBirth); } } @@ -257,7 +261,10 @@ class user extends plugin $smarty->assign("gender_list", $sex); /* Assign prefered langage */ - $language= array(0 => " ", "fr_FR" => ("fr_FR"), "en_EN" => ("en_EN"), "de_DE" => ("de_DE"), "it_IT" => ("it_IT"), "nl_NL" => ("nl_NL")); + $language= array(0 => " ", "fr_FR" => ("fr_FR"), "en_EN" => ("en_EN"), + "de_DE" => ("de_DE"), "it_IT" => ("it_IT"), + "nl_NL" => ("nl_NL"), "ru_RU" => ("ru_RU"), + "zh_CN" => ("zh_CN")); $smarty->assign("preferredLanguage_list", $language); /* Get random number for pictures */ @@ -308,8 +315,8 @@ class user extends plugin /* Remove picture? */ if (isset($_POST['picture_remove'])){ + $this->set_picture (); $this->jpegPhoto= "*removed*"; - $this->set_picture ("./images/default.jpg"); $this->is_modified= TRUE; return($smarty->fetch (get_template_path('generic_picture.tpl', TRUE, dirname(__FILE__)))); @@ -453,8 +460,25 @@ class user extends plugin /* Read out data*/ $timeto = $certificate->getvalidto_date(); $timefrom = $certificate->getvalidfrom_date(); - $str = "
CN".preg_replace("/ /", " ", $certificate->getname())."

". - sprintf(_("Certificate is valid from %s to %s and is currently %s."), "".date('d M Y',$timefrom)."","".date('d M Y',$timeto)."", $certificate->isvalid()?""._("valid")."":""._("invalid").""); + + /* Additional info if start end time is '0' */ + $add_str_info = ""; + if($timeto == 0 && $timefrom == 0){ + $add_str_info = "
"._("(Some types of certificates are currently not supported and may be displayed as 'invalid'.)").""; + } + + $str = " + + + + +
CN".preg_replace("/ /", " ", $certificate->getname())."

". + + sprintf(_("Certificate is valid from %s to %s and is currently %s."), + "".date('d M Y',$timefrom)."", + "".date('d M Y',$timeto)."", + $certificate->isvalid()?""._("valid")."": + ""._("invalid")."").$add_str_info; $smarty->assign($cert."info",$str); $smarty->assign($cert."_state","true"); } else { @@ -479,7 +503,7 @@ class user extends plugin $this->pw_storage= $this->config->current['HASH']; } - $temp = passwordMethod::get_available_methods(); + $temp = @passwordMethod::get_available_methods(); $hashes = $temp['name']; $smarty->assign("pwmode", $hashes); @@ -561,8 +585,43 @@ class user extends plugin $og->save (); } + /* Kerberos server defined? */ + if (isset($this->config->data['SERVERS']['KERBEROS'])){ + $cfg= $this->config->data['SERVERS']['KERBEROS']; + } + if (isset($cfg['SERVER']) && function_exists('kadm5_init_with_password')){ + + /* Connect to the admin interface */ + $handle = kadm5_init_with_password($cfg['SERVER'], $cfg['REALM'], + $cfg['ADMIN'], $cfg['PASSWORD']); + + /* Errors? */ + if ($handle === FALSE){ + print_red (_("Kerberos database communication failed")); + return (2); + } + + /* Build user principal, get list of existsing principals */ + $principal= $this->uid."@".$cfg['REALM']; + $principals = kadm5_get_principals($handle); + + /* User exists in database? */ + if (in_array($principal, $principals)){ + + /* Ok. User exists. Remove him/her */ + $ret= kadm5_delete_principal ( $handle, $principal); + if ($ret === FALSE){ + print_red (_("Can't remove user from kerberos database.")); + } + } + + /* Free kerberos admin handle */ + kadm5_destroy($handle); + } + + /* Optionally execute a command after we're done */ - $this->handle_post_events("remove"); + $this->handle_post_events("remove",array("uid" => $this->uid)); } @@ -596,7 +655,8 @@ class user extends plugin /* Save base and pw_storage, since these are no LDAP attributes */ if (isset($_POST['base'])){ foreach(array("base", "pw_storage") as $val){ - if(isset($_POST[$val])){ + + if(isset($_POST[$val]) && chkacl ($this->acl, "$val") == ""){ $data= validate($_POST[$val]); if ($data != $this->$val){ $this->is_modified= TRUE; @@ -628,9 +688,6 @@ class user extends plugin /* Only force save of changes .... If this attributes aren't changed, avoid saving. */ - if ($this->use_dob == "1"){ - $this->dateOfBirth= date("Y-m-d", $this->dateOfBirth); - } if($this->gender=="0") $this->gender =""; if($this->preferredLanguage=="0") $this->preferredLanguage =""; @@ -638,6 +695,12 @@ class user extends plugin /* First use parents methods to do some basic fillup in $this->attrs */ plugin::save (); + if ($this->use_dob == "1"){ + /* If it is an array, the generic page has never been loaded - so there's no difference. Using an array would cause an error btw. */ + if(!is_array($this->attrs['dateOfBirth'])) { + $this->attrs['dateOfBirth']= date("Y-m-d", $this->attrs['dateOfBirth']); + } + } /* Remove additional objectClasses */ $tmp= array(); foreach ($this->attrs['objectClass'] as $key => $set){ @@ -783,27 +846,20 @@ class user extends plugin $this->attrs["jpegPhoto"] = $output; } - } elseif(!$this->new) { + } else{ $this->attrs["jpegPhoto"] = array(); } - /* Build new dn */ - if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ - $new_dn= 'uid='.$this->uid.','.get_people_ou().$this->base; - } else { - $new_dn= 'cn='.$this->cn.','.get_people_ou().$this->base; - } - /* This only gets called when user is renaming himself */ $ldap= $this->config->get_ldap_link(); - if ($this->dn != $new_dn){ + if ($this->dn != $this->new_dn){ /* Write entry on new 'dn' */ - $this->move($this->dn, $new_dn); + $this->move($this->dn, $this->new_dn); /* Happen to use the new one */ - change_ui_dn($this->dn, $new_dn); - $this->dn= $new_dn; + change_ui_dn($this->dn, $this->new_dn); + $this->dn= $this->new_dn; } @@ -890,7 +946,7 @@ class user extends plugin /* Ok. User exists. Remove him/her when pw_storage has changed to be NOT kerberos. */ - if ($this->pw_storage != "kerberos"){ + if ($this->pw_storage != $this->config->current['KRBSASL']){ $ret= kadm5_delete_principal ( $handle, $principal); if ($ret === FALSE){ @@ -900,8 +956,8 @@ class user extends plugin } else { - /* User doesn't exists, create it when pw_storage is kerberos. */ - if ($this->pw_storage == "kerberos"){ + /* User doesn't exists, create it when pw_storage is kerberos or SASL. */ + if ($this->pw_storage == "kerberos" || $this->pw_storage == "sasl" ){ $ret= kadm5_create_principal ( $handle, $principal); if ($ret === FALSE){ @@ -917,9 +973,9 @@ class user extends plugin /* Optionally execute a command after we're done */ if ($mode == "add"){ - $this->handle_post_events("add"); + $this->handle_post_events("add",array("uid" => $this->uid)); } elseif ($this->is_modified){ - $this->handle_post_events("modify"); + $this->handle_post_events("modify",array("uid" => $this->uid)); } /* Fix tagging if needed */ @@ -936,21 +992,34 @@ class user extends plugin $message= plugin::check(); /* Assemble cn */ - $this->cn= $this->givenName." ".$this->sn; + $pt= ""; + if(isset($this->config->current['INCLUDE_PERSONAL_TITLE']) && preg_match("/true/i",$this->config->current['INCLUDE_PERSONAL_TITLE'])){ + if(!empty($this->personalTitle)){ + $pt = $this->personalTitle." "; + } + } + + $this->cn= $pt.$this->givenName." ".$this->sn; /* Permissions for that base? */ if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ - $new_dn= 'uid='.$this->uid.','.get_people_ou().$this->base; + $this->new_dn= 'uid='.$this->uid.','.get_people_ou().$this->base; } else { - $new_dn= 'cn='.$this->cn.','.get_people_ou().$this->base; + /* Don't touch dn, if cn hasn't changed */ + if (isset($this->saved_attributes['cn']) && $this->saved_attributes['cn'] == $this->cn && + $this->orig_base == $this->base){ + $this->new_dn= $this->dn; + } else { + $this->new_dn= $this->create_unique_dn('cn', get_people_ou().$this->base); + } } $ui= get_userinfo(); - $acl= get_permissions ($new_dn, $ui->subtreeACL); - $acl= get_module_permission($acl, "user", $new_dn); + $acl= get_permissions ($this->new_dn, $ui->subtreeACL); + $acl= get_module_permission($acl, "user", $this->new_dn); if ($this->dn == "new" && chkacl($acl, "create") != ""){ $message[]= _("You have no permissions to create a user on this 'Base'."); - } elseif ($this->dn != $new_dn && $this->dn != "new"){ + } elseif ($this->dn != $this->new_dn && $this->dn != "new"){ $acl= get_permissions ($this->dn, $ui->subtreeACL); $acl= get_module_permission($acl, "user", $this->dn); if (chkacl($acl, "create") != ""){ @@ -981,10 +1050,8 @@ class user extends plugin $message[]= _("The required field 'Login' is not set."); } if (!(isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid")){ - $ldap->cd($this->config->current['BASE']); - $ldap->search("(cn=".$this->cn.")", array("uid")); - $ldap->fetch(); - if ($ldap->count() != 0 && $this->dn != $new_dn && $this->dn == 'new'){ + $ldap->cat($this->new_dn); + if ($ldap->count() != 0 && $this->dn != $this->new_dn && $this->dn == 'new'){ $message[]= _("There's already a person with this 'Name'/'Given name' combination in the database."); } } @@ -1116,9 +1183,9 @@ class user extends plugin /* Load picture from file to object */ - function set_picture($filename) + function set_picture($filename ="") { - if (!is_file($filename)){ + if (!is_file($filename) || $filename == ""){ $filename= "./images/default.jpg"; $this->jpegPhoto= "*removed*"; } @@ -1202,7 +1269,7 @@ class user extends plugin foreach($attrs['gosaSubtreeACL'] as $attr){ if((preg_match("/:user#/",$attr))||(preg_match("/:all/",$attr))){ - $s = preg_replace("/^.*ou=groups,/","",$attrs['dn']); + $s = preg_replace("/^.*".get_groups_ou().",/","",$attrs['dn']); foreach($this->config->idepartments as $key => $dep) { if(preg_match("/".$s."/i",$key)){ @@ -1282,6 +1349,23 @@ class user extends plugin } } } + + + function PrepareForCopyPaste($source) + { + plugin::PrepareForCopyPaste($source); + + /* Reset certificate information addepted from source user + to avoid setting the same user certificate for the destination user. */ + $this->userPKCS12= ""; + $this->userSMIMECertificate= ""; + $this->userCertificate= ""; + $this->certificateSerialNumber= ""; + $this->old_certificateSerialNumber= ""; + $this->old_userPKCS12= ""; + $this->old_userSMIMECertificate= ""; + $this->old_userCertificate= ""; + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: