2001-01-11 10:52:33 +01:00
|
|
|
<?php
|
|
|
|
/**************************************************************************\
|
2001-01-13 11:18:50 +01:00
|
|
|
* phpGroupWare API - Accounts manager for LDAP *
|
|
|
|
* This file written by Joseph Engo <jengo@phpgroupware.org> *
|
|
|
|
* and Lars Kneschke <kneschke@phpgroupware.org> *
|
|
|
|
* View and manipulate account records using LDAP *
|
|
|
|
* Copyright (C) 2000, 2001 Joseph Engo *
|
|
|
|
* -------------------------------------------------------------------------*
|
2001-01-16 14:52:32 +01:00
|
|
|
* This library is part of the phpGroupWare API *
|
|
|
|
* http://www.phpgroupware.org/api *
|
|
|
|
* ------------------------------------------------------------------------ *
|
2001-01-13 11:18:50 +01:00
|
|
|
* This library is free software; you can redistribute it and/or modify it *
|
|
|
|
* under the terms of the GNU Lesser General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2.1 of the License, *
|
|
|
|
* or any later version. *
|
|
|
|
* This library is distributed in the hope that it will be useful, but *
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
|
|
* See the GNU Lesser General Public License for more details. *
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License *
|
|
|
|
* along with this library; if not, write to the Free Software Foundation, *
|
|
|
|
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
|
2001-01-11 10:52:33 +01:00
|
|
|
\**************************************************************************/
|
|
|
|
|
|
|
|
/* $Id$ */
|
|
|
|
|
2001-02-06 21:13:06 +01:00
|
|
|
class accounts_
|
2001-01-11 10:52:33 +01:00
|
|
|
{
|
2001-02-03 23:51:20 +01:00
|
|
|
var $db;
|
2001-02-05 19:38:43 +01:00
|
|
|
var $account_id;
|
|
|
|
var $data;
|
2001-02-08 04:25:22 +01:00
|
|
|
var $memberships = Array();
|
2001-02-05 22:05:24 +01:00
|
|
|
var $members;
|
2001-03-01 17:20:48 +01:00
|
|
|
// Dont know where to put this (seek3r)
|
|
|
|
// This is where it belongs (jengo)
|
|
|
|
// This is where it ended up (milosch)
|
|
|
|
/* Since LDAP will return system accounts, there are a few we don't want to login. */
|
|
|
|
$phpgw_info["server"]["global_denied_users"] = array(
|
|
|
|
'root' => True,
|
|
|
|
'bin' => True,
|
|
|
|
'daemon' => True,
|
|
|
|
'adm' => True,
|
|
|
|
'lp' => True,
|
|
|
|
'sync' => True,
|
|
|
|
'shutdown' => True,
|
|
|
|
'halt' => True,
|
|
|
|
'mail' => True,
|
|
|
|
'news' => True,
|
|
|
|
'uucp' => True,
|
|
|
|
'operator' => True,
|
|
|
|
'games' => True,
|
|
|
|
'gopher' => True,
|
|
|
|
'nobody' => True,
|
|
|
|
'xfs' => True,
|
|
|
|
'pgsql' => True,
|
|
|
|
'mysql' => True,
|
|
|
|
'postgres' => True,
|
|
|
|
'ftp' => True,
|
|
|
|
'gdm' => True,
|
|
|
|
'named' => True
|
|
|
|
);
|
2001-02-06 14:24:33 +01:00
|
|
|
|
2001-02-10 04:58:12 +01:00
|
|
|
function accounts_()
|
2001-02-06 14:24:33 +01:00
|
|
|
{
|
|
|
|
global $phpgw;
|
|
|
|
|
|
|
|
$this->db = $phpgw->db;
|
|
|
|
}
|
|
|
|
|
2001-02-05 22:05:24 +01:00
|
|
|
function read_repository()
|
2001-01-11 10:52:33 +01:00
|
|
|
{
|
2001-02-11 04:07:43 +01:00
|
|
|
global $phpgw, $phpgw_info;
|
|
|
|
|
|
|
|
// get a ldap connection handle
|
|
|
|
$ds = $phpgw->common->ldapConnect();
|
|
|
|
|
|
|
|
// search the dn for the given uid
|
|
|
|
$sri = ldap_search($ds, $phpgw_info["server"]["ldap_context"], "uidnumber=".$this->account_id);
|
|
|
|
$allValues = ldap_get_entries($ds, $sri);
|
|
|
|
|
|
|
|
/* Now dump it into the array; take first entry found */
|
|
|
|
$this->data["account_id"] = $allValues[0]["uidnumber"][0];
|
|
|
|
$this->data["account_lid"] = $allValues[0]["uid"][0];
|
|
|
|
$this->data["account_dn"] = $allValues[0]["dn"];
|
|
|
|
$this->data["firstname"] = $allValues[0]["givenname"][0];
|
|
|
|
$this->data["lastname"] = $allValues[0]["sn"][0];
|
|
|
|
$this->data["fullname"] = $allValues[0]["cn"][0];
|
|
|
|
|
|
|
|
$this->db->query("select * from phpgw_accounts where account_id='" . $this->data["account_id"] . "'",__LINE__,__FILE__);
|
|
|
|
$this->db->next_record();
|
|
|
|
|
|
|
|
$this->data["lastlogin"] = $this->db->f("account_lastlogin");
|
|
|
|
$this->data["lastloginfrom"] = $this->db->f("account_lastloginfrom");
|
|
|
|
$this->data["lastpasswd_change"] = $this->db->f("account_lastpwd_change");
|
|
|
|
$this->data["status"] = $this->db->f("account_status");
|
|
|
|
|
|
|
|
return $this->data;
|
2001-02-05 19:38:43 +01:00
|
|
|
}
|
2001-01-11 10:52:33 +01:00
|
|
|
|
2001-02-05 19:38:43 +01:00
|
|
|
function save_repository()
|
|
|
|
{
|
|
|
|
global $phpgw_info, $phpgw;
|
2001-01-11 10:52:33 +01:00
|
|
|
|
2001-02-11 04:07:43 +01:00
|
|
|
$ds = $phpgw->common->ldapConnect();
|
2001-01-11 10:52:33 +01:00
|
|
|
|
2001-02-11 04:07:43 +01:00
|
|
|
// search the dn for the given uid
|
|
|
|
$sri = ldap_search($ds, $phpgw_info["server"]["ldap_context"], "uidnumber=".$this->account_id);
|
|
|
|
$allValues = ldap_get_entries($ds, $sri);
|
|
|
|
|
|
|
|
$entry["cn"] = sprintf("%s %s", $this->data["firstname"], $this->data["lastname"]);
|
|
|
|
$entry["sn"] = $this->data["lastname"];
|
|
|
|
$entry["givenname"] = $this->data["firstname"];
|
|
|
|
|
|
|
|
ldap_modify($ds, $allValues[0]["dn"], $entry);
|
2001-02-12 22:13:09 +01:00
|
|
|
#print ldap_error($ds);
|
2001-01-11 10:52:33 +01:00
|
|
|
}
|
2001-02-05 22:05:24 +01:00
|
|
|
|
2001-02-05 23:31:18 +01:00
|
|
|
function add($account_name, $account_type, $first_name, $last_name, $passwd = False)
|
2001-01-30 11:11:34 +01:00
|
|
|
{
|
2001-01-11 10:52:33 +01:00
|
|
|
}
|
2001-02-05 22:05:24 +01:00
|
|
|
|
|
|
|
function delete($account_id)
|
2001-02-04 12:17:58 +01:00
|
|
|
{
|
|
|
|
}
|
2001-02-05 22:05:24 +01:00
|
|
|
|
2001-02-14 20:27:37 +01:00
|
|
|
function get_list($_type='both')
|
|
|
|
{
|
|
|
|
global $phpgw;
|
2001-02-05 22:26:40 +01:00
|
|
|
|
2001-02-14 20:27:37 +01:00
|
|
|
$ds = $phpgw->common->ldapConnect();
|
2001-02-05 22:26:40 +01:00
|
|
|
|
2001-02-14 20:27:37 +01:00
|
|
|
switch($_type)
|
|
|
|
{
|
|
|
|
case 'accounts':
|
|
|
|
$whereclause = "where account_type = 'u'";
|
|
|
|
break;
|
|
|
|
case 'groups':
|
|
|
|
$whereclause = "where account_type = 'g'";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$whereclause = "";
|
2001-02-13 16:19:19 +01:00
|
|
|
}
|
2001-02-14 20:27:37 +01:00
|
|
|
|
|
|
|
$sql = "select * from phpgw_accounts $whereclause";
|
|
|
|
$this->db->query($sql,__LINE__,__FILE__);
|
|
|
|
while ($this->db->next_record()) {
|
|
|
|
// get user information from ldap only, if it's a user, not a group
|
|
|
|
if ($this->db->f("account_type") == 'u')
|
|
|
|
{
|
|
|
|
$sri = ldap_search($ds, $phpgw_info["server"]["ldap_context"], "uidnumber=".$this->db->f("account_id"));
|
|
|
|
$allValues = ldap_get_entries($ds, $sri);
|
|
|
|
$accounts[] = Array(
|
2001-03-01 16:32:52 +01:00
|
|
|
"account_id" => $allValues[0]["uidnumber"][0],
|
|
|
|
"account_lid" => $allValues[0]["uid"][0],
|
2001-02-14 20:27:37 +01:00
|
|
|
"account_type" => $this->db->f("account_type"),
|
2001-03-01 16:32:52 +01:00
|
|
|
"account_firstname" => $allValues[0]["givenname"][0],
|
|
|
|
"account_lastname" => $allValues[0]["sn"][0],
|
2001-02-14 20:27:37 +01:00
|
|
|
"account_status" => $this->db->f("account_status")
|
|
|
|
);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$accounts[] = Array(
|
|
|
|
"account_id" => $this->db->f("account_id"),
|
|
|
|
"account_lid" => $this->db->f("account_lid"),
|
|
|
|
"account_type" => $this->db->f("account_type"),
|
|
|
|
"account_firstname" => $this->db->f("account_firstname"),
|
|
|
|
"account_lastname" => $this->db->f("account_lastname"),
|
|
|
|
"account_status" => $this->db->f("account_status")
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2001-03-01 16:32:52 +01:00
|
|
|
|
2001-02-14 20:27:37 +01:00
|
|
|
return $accounts;
|
|
|
|
}
|
2001-02-05 22:05:24 +01:00
|
|
|
|
2001-02-05 19:38:43 +01:00
|
|
|
function name2id($account_name)
|
2001-01-28 14:29:14 +01:00
|
|
|
{
|
|
|
|
global $phpgw, $phpgw_info;
|
|
|
|
|
2001-02-05 19:38:43 +01:00
|
|
|
$this->db->query("SELECT account_id FROM phpgw_accounts WHERE account_lid='".$account_name."'",__LINE__,__FILE__);
|
|
|
|
if($this->db->num_rows()) {
|
|
|
|
$this->db->next_record();
|
2001-02-19 00:26:53 +01:00
|
|
|
return intval($this->db->f("account_id"));
|
2001-01-28 14:29:14 +01:00
|
|
|
}else{
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-02-05 19:38:43 +01:00
|
|
|
function id2name($account_id)
|
2001-01-28 14:29:14 +01:00
|
|
|
{
|
|
|
|
global $phpgw, $phpgw_info;
|
2001-02-05 19:38:43 +01:00
|
|
|
|
|
|
|
$this->db->query("SELECT account_lid FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
|
|
|
|
if($this->db->num_rows()) {
|
|
|
|
$this->db->next_record();
|
|
|
|
return $this->db->f("account_lid");
|
2001-01-28 14:29:14 +01:00
|
|
|
}else{
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}
|
2001-02-04 12:17:58 +01:00
|
|
|
|
|
|
|
function get_type($account_id)
|
|
|
|
{
|
2001-02-05 22:26:40 +01:00
|
|
|
global $phpgw, $phpgw_info;
|
|
|
|
|
|
|
|
$this->db->query("SELECT account_type FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
|
|
|
|
if ($this->db->num_rows())
|
|
|
|
{
|
|
|
|
$this->db->next_record();
|
|
|
|
return $this->db->f("account_type");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return False;
|
|
|
|
}
|
2001-02-04 12:17:58 +01:00
|
|
|
}
|
|
|
|
|
2001-02-06 13:36:02 +01:00
|
|
|
function exists($account_id)
|
2001-02-03 23:51:20 +01:00
|
|
|
{
|
2001-02-06 13:36:02 +01:00
|
|
|
global $phpgw, $phpgw_info;
|
|
|
|
if (gettype($account_id) == "string") {
|
|
|
|
$account_id = $this->name2id($account_id);
|
|
|
|
}
|
|
|
|
$sql = "SELECT account_id FROM phpgw_accounts WHERE account_id='".$account_id."'";
|
|
|
|
$this->db->query($sql,__LINE__,__FILE__);
|
|
|
|
if ($this->db->num_rows()) {
|
|
|
|
return True;
|
|
|
|
} else {
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-02-05 22:05:24 +01:00
|
|
|
function auto_add($account_name, $passwd, $default_prefs=False, $default_acls= False)
|
2001-02-05 19:38:43 +01:00
|
|
|
{
|
|
|
|
print "not done until now auto_generate class.accounts_ldap.inc.php<br>";
|
|
|
|
exit();
|
|
|
|
global $phpgw, $phpgw_info;
|
|
|
|
$accountid = mt_rand (100, 600000);
|
|
|
|
if ($defaultprefs =="") {
|
2001-02-22 06:35:53 +01:00
|
|
|
$defaultprefs = 'a:5:{s:6:"common";a:10:{s:9:"maxmatchs";s:2:"15";s:12:"template_set";s:8:"verdilak";s:5:"theme";s:6:"purple";s:13:"navbar_format";s:5:"icons";s:9:"tz_offset";N;s:10:"dateformat";s:5:"m/d/Y";s:10:"timeformat";s:2:"12";s:4:"lang";s:2:"en";s:11:"default_app";N;s:8:"currency";s:1:"$";}s:11:"addressbook";a:1:{s:0:"";s:4:"True";}:s:8:"calendar";a:4:{s:13:"workdaystarts";s:1:"7";s:11:"workdayends";s:2:"15";s:13:"weekdaystarts";s:6:"Monday";s:15:"defaultcalendar";s:9:"month.php";}}';
|
|
|
|
// $defaultprefs = 'a:5:{s:6:"common";a:1:{s:0:"";s:2:"en";}s:11:"addressbook";a:1:{s:0:"";s:4:"True";}s:8:"calendar";a:1:{s:0:"";s:13:"workdaystarts";}i:15;a:1:{s:0:"";s:11:"workdayends";}s:6:"Monday";a:1:{s:0:"";s:13:"weekdaystarts";}}';
|
2001-02-05 19:38:43 +01:00
|
|
|
}
|
|
|
|
$sql = "insert into phpgw_accounts";
|
|
|
|
$sql .= "(account_id, account_lid, account_pwd, account_firstname, account_lastname, account_lastpwd_change, account_status, account_type)";
|
|
|
|
$sql .= "values (".$accountid.", '".$accountname."', '".md5($passwd)."', '".$accountname."', 'AutoCreated', ".time().", 'A','u')";
|
|
|
|
$this->db->query($sql);
|
2001-03-01 04:01:06 +01:00
|
|
|
$this->db->query("insert into phpgw_preferences (preference_owner, preference_value) values ('".$accountid."', '$defaultprefs')");
|
2001-02-05 19:38:43 +01:00
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights)values('preferences', 'changepassword', ".$accountid.", 'u', 0)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('phpgw_group', '1', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('addressbook', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('filemanager', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('calendar', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('email', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('notes', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
$this->db->query("insert into phpgw_acl (acl_appname, acl_location, acl_account, acl_account_type, acl_rights) values('todo', 'run', ".$accountid.", 'u', 1)",__LINE__,__FILE__);
|
|
|
|
return $accountid;
|
|
|
|
}
|
2001-02-12 22:13:09 +01:00
|
|
|
|
|
|
|
function getDNforID($_account_id)
|
|
|
|
{
|
|
|
|
global $phpgw;
|
|
|
|
|
|
|
|
$ds = $phpgw->common->ldapConnect();
|
|
|
|
|
|
|
|
$sri = ldap_search($ds, $phpgw_info["server"]["ldap_context"], "uidnumber=$_account_id");
|
|
|
|
$allValues = ldap_get_entries($ds, $sri);
|
|
|
|
|
|
|
|
return $allValues[0]["dn"];
|
|
|
|
}
|
2001-01-11 10:52:33 +01:00
|
|
|
}
|