Code

Updated class location table.
[gosa.git] / include / class_password-methods-kerberos.inc
index e66ebbba969bcaac9b6357ce52622b901ead0a53..24240bad576c6a6c266e78362fa9a96f2163df27 100644 (file)
@@ -23,7 +23,7 @@ class passwordMethodkerberos extends passwordMethod
 
        function passwordMethodkerberos($config)  
        {
-    $this->config=$config;
+    $this->config= &$config;
        }
 
   function is_available()
@@ -53,7 +53,7 @@ class passwordMethodkerberos extends passwordMethod
                                print_red (_("Kerberos database communication failed!"));
                        }
 
-                       $ret= kadm5_chpass_principal($handle, $this->attrs['uid'][0]."@".$cfg['REALM'],$password);
+                       $ret= kadm5_chpass_principal($handle, $this->attrs['uid'][0]."@".$cfg['REALM'],$pwd);
 
                        if ($ret === FALSE)
                        {
@@ -62,11 +62,63 @@ class passwordMethodkerberos extends passwordMethod
 
                        kadm5_destroy($handle);
 
-                       $newpass= "{kerberos}".$this->attrs['uid'][0]."@".$cfg['REALM'];
+      $mode= "kerberos";
+      if (isset($this->config->current['KRBSASL']) && preg_match('/^true$/i', $this->config->current['KRBSASL'])){
+        $mode= "sasl";
+      }
+                       $newpass= "{".$mode."}".$this->attrs['uid'][0]."@".$cfg['REALM'];
 
                        return $newpass;       
                }
        }
+
+
+  function remove_from_parent()
+  {
+    /* 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);
+    }
+  }
+
+  function get_hash_name()
+  {
+    $mode= "kerberos";
+    if (isset($this->config->current['KRBSASL']) && preg_match('/^true$/i', $this->config->current['KRBSASL'])){
+      $mode= "sasl";
+    }
+    return "$mode";
+  }
+
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: