2016년 11월 24일 목요일

php 로 Active Directory 의 lastLogon 구하기

php로 Active Directory 인증/조회/수정을 할 수 있도록  adLDAP class 를 사용하고 있다.



lastLogon 특성을 매 분마다 수집하여 사용하고자 한다.

그런데 문제는 AD 서버가 2대인데 사용자 인증에 사용된 서버에서만 lastLogon 특성 값이 업데이트가 된다.

그래서 양쪽 서버에서 조회한 값을 비교해서 합쳐주도록 했다.
$options1 = array("domain_controllers" => array("ad1st"));
$options2 = array("domain_controllers" => array("ad2nd"));

$adldap1 = new adLDAP($options1);
$adldap2 = new adLDAP($options2);

$users = $adldap1->user()->all(true,"*", true);
$lastLogons = array();
foreach($users as $id => $name ) {
    $info1 = $adldap1->user()->infoCollection($id, array("*"));
    $mktime1 = round(convertWindowsTimestamp($info1->lastLogon));

    $info2 = $adldap2->user()->infoCollection($id, array("*"));
    $mktime2 = round(convertWindowsTimestamp($info2->lastLogon));

    if( $mktime1 >  $mktime2 ) {
        $mktime = $mktime1;
        $auth = "ad1st";
    } else if( $mktime1 < $mktime2 ) {
        $mktime = $mktime2;
        $auth = "ad2nd";
    } else {
        $mktime = $mktime1;
        $auth = "ad1st";
    }

    $lastLogon = date("YmdHis", $mktime);
    $lastLogons["$id"] = array("auth" => $auth, "lastlogon" => $lastLogon);
}

전체 사용자 정보를 담은 인스턴스를 생성 후 각 사용자 마다 lastLogon 정보를 찾아서 비교 후에 다시 배열로 저장했다.

그런데 lastLogon 의 값은 linux 의 mktime() 값과 다르기에 convertWindowsTimestamp()를 사용하였다.

function convertWindowsTimestamp($wintime) {
   return $wintime / 10000000 - 11644473600;
}


2016년 10월 18일 화요일

Xenceter 6.1 에서 ubuntu 16.04 설치 후 vm 시작 시 오류


ubuntu 16.04 를 설치가 완료된 후 vm 시작 시 아래와 같이 오류가....

The bootloader for this VM returned an error -- did the VM installation suceed? Unable to find partition containing kernel.


여러 이유가 있겠지만 내가 해결했던 방법은


위 링크에서 처럼

xenserver console 에서 /usr/lib/python2.4/site-packages/grub/GrubConf.py 파일을 수정

if arg.strip() == "${saved_entry}":
    arg = "0"
>> 부분을 아래 처럼 수정 후 vm 시작이 정상적으로 되었다.
if arg.strip() == "${saved_entry}":
    arg = "0"
elif arg.strip() == "${next_entry}":
    arg = "0

* xencenter 에 ubuntu 16.04 template 추가는 아래 링크를 참고 함