<?php
function custom_nineteen_ad_info_menu()
{
$items['query_ad_computer_info'] = array(
'title' => 'MMM查询MMMAD计算机信息(支持开始精确,结尾模糊查询,仅查计算机名称,查询范围为所有计算机)',
'pagecallback' => 'custom_nineteen_ad_info_query_ad_computer_info',
'accessarguments' => array('createwp_blog_clone_2content'),
);
return $items;
}
function custom_nineteen_ad_info_query_ad_computer_info($diqu = 'js')
{
$form = drupal_get_form('ad_computer_form');
$ad_computer = _removeCnEnSpace($_GET['ad_computer']);
$diqu = _my_node_jses_terminal_manager_diqu();
if (empty(_removeCnEnSpace($_GET['ad_computer'])))//没有$_GET表单提交时
{
$output = array(
'first_para' => $form,
'fourth_para' => array(
'#type' => 'markup',
'#markup' => '',
),
);
return $output;
}
$ad_computer_output = _get_ad_computer($ad_computer, $diqu);//查询计算机名称的时候,不保存,,
if (!empty($ad_computer) && empty($ad_computer_output)) {
drupal_set_message('未查到此的计算机的AD信息!,此计算机为:' . $ad_computer);
}
//module_load_include('inc','user','user.pages');
$output = array(
'first_para' => $form,
'fourth_para' => array(
'#type' => 'markup',
'#markup' => $ad_computer_output,
),
);
return $output;
}
function ad_computer_form()
{
if (!empty($_GET['ad_computer'])) {
$ad_computer = $_GET['ad_computer'];
} else {
$ad_computer = '';
}
$form['ad_computer'] = array(
'#type' => 'textfield',
'#title' => t('计算机名称'),
'#size' => 30,
'#default_value' => $ad_computer,
);
$form['diqu'] = array('#type' => 'hidden', '#value' => _my_node_jses_terminal_manager_diqu());
$form['#method'] = 'GET';
//提交按钮//
$form['submit'] = array('#type' => 'submit', '#value' => t('查询'));
return $form;
}
//判断nodejses_terminal_manager是MMM的还是YY的
function _my_node_jses_terminal_manager_diqu($nid = '')
{
if (!empty($nid))//存在nid时,以nid来判断jses_terminal_manager所在地区
{
$tmp_node = node_load($nid);
return $tmp_node->field_diqu['und'][0]['value'];
} else {//不存在nid时,以$_GET来判断jses_terminal_manager所在地区
if ($_GET['diqu'] == 'ks') {
return 'ks';
} else {
return 'js';
}
}
}
//_get_ad_computer时我们不保存
function _get_ad_computer($gh, $diqu = 'js')
{
$output = '';
$ad_computer_infos = _get_ad_computer_from_ad($gh, array('*'), $diqu);//精确查询的时候
if (empty($ad_computer_infos)) {
//当精确查询,查不到数据的时候,我们用模糊查询
$ad_computer_infos = _get_ad_computer_from_ad($gh, array('*'), $diqu, true);//最后一个参数true表示模糊查询
unset($ad_computer_infos['count']);
$results = array();
foreach ($ad_computer_infos as $key => $value) {
$results[] = "<a href='/query_ad_computer_info?gh={$value['cn'][0]}'target='_blank'>" . $value['cn'][0] . "</a>";
}
$output .= implode("<br/>", $results);
return $output;
} else {//查询结果为一个计算机的时候
$output .= '计算机名称:';
$output .= $ad_computer_infos['cn'][0] . "<br/>";
$output .= '全称:';
$output .= $ad_computer_infos['distinguishedname'][0] . "<br/>";
$output .= '操作系统版本:';
$output .= $ad_computer_infos['operatingsystem'][0] . " " . $ad_computer_infos['operatingsystemversion'][0] . "<br/>";
//获取当前时间加60天的Unix时间戳
$expireTimestamp = strtotime('+60days');
//将Unix时间戳转换为Windows文件时间
//$windowsEpoch=11644473600;//Unix时间戳(1601-01-0100:00:00UTC)
//$accountExpires=($expireTimestamp+$windowsEpoch)*10000000;
$output .= '过期日期:';
if ($ad_computer_infos['accountexpires'][0] == "9223372036854775807") {
$output .= "永不过期" . "<br/>";
} else {
$output .= date('Y-m-dH:i:s', intval($ad_computer_infos['accountexpires'][0] / (1000 * 10000)) - 11644473600) . "<br/>";
}
$output .= '最后登录时间:';
$output .= date('Y-m-dH:i:s', intval($ad_computer_infos['lastlogontimestamp'][0] / (1000 * 10000)) - 11644473600) . "<br/>";
$output .= '登录次数:';
$output .= $ad_computer_infos['logoncount'][0] . "<br/>";
$output .= '完整名称:';
$output .= $ad_computer_infos['dnshostname'][0] . "<br/>";
$output .= '创建时间:';
$dateStr = substr($ad_computer_infos['whencreated'][0], 0, -3);//去掉最后3个字符(.0Z)
$date = DateTime::createFromFormat('YmdHis', $dateStr, newDateTimeZone('UTC'));
$date->setTimezone(newDateTimeZone('Asia/Shanghai'));
$output .= $date->format('Y-m-dH:i:s') . "<br/>";
$output .= '修改时间:';
$dateStr = substr($ad_computer_infos['whenchanged'][0], 0, -3);//去掉最后3个字符(.0Z)
$date = DateTime::createFromFormat('YmdHis', $dateStr, newDateTimeZone('UTC'));
$date->setTimezone(newDateTimeZone('Asia/Shanghai'));
$output .= $date->format('Y-m-dH:i:s') . "<br/>";
}
return $output;
}
//$muhu为true表示模粗查询,,,,,默认情况下为false,即不是模糊查询,是粗确查询!
function _get_ad_computer_from_ad($ad_computer = '', $ad_user_property = array('*'), $diqu = 'js', $muhu = false)
{
$ad_connect_infos = _my_get_ad_connect_infos();
$ad_user = $ad_connect_infos[$diqu]['ad_user'];//域用户名包含域名
$ad_pwd = $ad_connect_infos[$diqu]['ad_pwd'];
$host = $ad_connect_infos[$diqu]['host'];
$port = $ad_connect_infos[$diqu]['port'];//一般都是389
$conn = ldap_connect($host, $port);//不要写成ldap_connect($host.':'.$port)的形式
if ($conn) {
//设置参数
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);//声明使用版本3
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);//Bindingtoldapserver
$bd = ldap_bind($conn, $ad_user, $ad_pwd);
$basedn = $ad_connect_infos[$diqu]['basedn'];
$basedn = 'OU=Computer,DC=mmmmmm,DC=com,DC=cn';
//$filter="(objectClass=*)";//选择器
//$filter="(&(sAMAccountName=张三))";//选择器
if ($muhu) {//模糊查询
//$filter="(sAMAccountName=11111111)";//选择器表示模糊查询工号中包含有1111
$filter = "(&(cn={$ad_computer}*)(objectClass=computer))";
} else {//精确查询
$filter = "(&(cn={$ad_computer})(objectClass=computer))";//根据计算机名称比如11111
}
//$filter="(|(sn=张三*)(givenname=张三*))";
//$justthese=array('*');//选择要获取的用户属性
$justthese = $ad_user_property;//选择要获取的用户属性
//$sr=ldap_search($conn,$basedn,$filter);
$sr = ldap_search($conn, $basedn, $filter, $justthese);
$infos = ldap_get_entries($conn, $sr);
if ($infos['count'] == 1)//只取到一个数据,,基本应该用的是精确查询,而不是模糊查询
{
$ad_computer_info = $infos[0];
} elseif ($infos['count'] == 0)//未取到数据
{
$ad_computer_info = '';
} else {//取到多个数据
$ad_computer_info = $infos;
}
if ($bd) {
//drupal_set_message('LDAP连接成功');//相当于登录成功
} else {
$ad_computer_info = false;
drupal_set_message('LDAP连接失败', 'warning');
}
} else {
$ad_computer_info = false;
drupal_set_message('无法连接到AD域服务器', 'error');
}
ldap_close($conn);
//YY的就不处理了吧
//if(empty($ad_info)){//这就是为了YY的与MM的工号相同时进行的处理
//if($diqu=='ks'&&strlen($ad_computer_info)==9&&_startWith($ad_computer_info,"C")){
//return_get_ad_info_from_ad(_make_ks_gh_reduce_C($ad_computer_info),$ad_user_property,$diqu);
//}
//}
return $ad_computer_info;
}
//得到MMAD的连接信息
//得到YYAD的连接信息
function _my_get_ad_connect_infos()
{
$js_ad_connect_arr = _my_get_js_ad_connect_arr();
$ad_user = $js_ad_connect_arr['user'] . '@' . $js_ad_connect_arr['domain'];
$ad_pwd = $js_ad_connect_arr['password'];
$host = $js_ad_connect_arr['host'];
$host_ldaps = $js_ad_connect_arr['host_ldaps'];
$port = $js_ad_connect_arr['port'];//一般都是389
$basedn = $js_ad_connect_arr['basedn'];
$basedn_group = $js_ad_connect_arr['basedn_group'];
$basedn_group1 = $js_ad_connect_arr['basedn_group1'];
$js_ad_connect_info = compact('ad_user', 'ad_pwd', 'host', 'host_ldaps', 'port', 'basedn', 'basedn_group', 'basedn_group1');
$ks_ad_connect_arr = _my_get_ks_ad_connect_arr();
$ad_user = $ks_ad_connect_arr['user'] . '@' . $ks_ad_connect_arr['domain'];
$ad_pwd = $ks_ad_connect_arr['password'];
$host = $ks_ad_connect_arr['host'];
$host_ldaps = $ks_ad_connect_arr['host_ldaps'];
$port = $ks_ad_connect_arr['port'];//一般都是389
$basedn = $ks_ad_connect_arr['basedn'];
$basedn_group = $ks_ad_connect_arr['basedn_group'];
$ks_ad_connect_info = compact('ad_user', 'ad_pwd', 'host', 'host_ldaps', 'port', 'basedn', 'basedn_group');
return array('js' => $js_ad_connect_info, 'ks' => $ks_ad_connect_info);
}
?>