Поиск людей на компьютерах в AD и подключение к ним по Radmin'у из Linux

Как-то недавно случилось так, что я на работе пересел с Windows машины на Linux машину. И все в линуксе вроде как хорошо, но непривычно, нет некоторых инструментов. В windows у меня была самописная программа которая в связке с проргаммой удаленного администрирования помогала мне управлять компьютерами пользователей когда они на что-то жаловались. Но пересев на Linux я с сожалением обнаружил, что моя программулинка не работает под wine'ом. Возможно поковыряв wine я бы чего-то и добился, но было жутко лень.

Тогда я начал искать что-то, что мне подходило бы. Критерии были такие:
1. Поиск по Active Directory пользователя залогиненного на компьютере.
2. Подключение из любой внешней утилиты к этому компьютеру (radmin, rdesktop).

Гуглил, гуглин да ничего не нагуглил. Тогда решил что нужно писать что-то свое. Снова начал гуглить по теме, на чем писать и вообще чего оно как. Получилось, что будет связка python + модуль ldap который позволял бы подключать к DC. Ниже приведу код всего скрипта, он достаточно простой и понятный. Я понимаю, что код далеко неидеален, все писалось можно сказать на коленке дабы проверить как оно работает, а когда оказалось, что работает как нужно, то и трогать я его не стал :). Будут вопросы спрашивайте. Ах да, еще нужно пояснить, что поиск идет по полю Description - Описание компьютера. Над заполнением этого поля у меня работает скрипт от товарища shs при логоне, а для того чтобы он работал я пользователям делегировал право изменять описание компьютера. Ну вот теперь вроде все.

#!/usr/bin/python2.5
# -*- coding: utf-8 -*-
import ldap
import subprocess
 
def main():
    server = "server.local.lan"
    who = "admin@local.lan"
    cred = "password"
    keyword = ""
    try:
        print "\x1b[02;34mПоиск по AD на сервере "+server
        print "1. Пользователи."
        print "2. Компьютеры."
        objsearch = raw_input("Что ищем?: ")
        keyword = raw_input("Введите имя или его часть: ")
        l = ldap.initialize("ldap://server.local.lan:389")
        l.bind_s(who,cred,ldap.AUTH_SIMPLE)
        print "Successfully bound to server.\n"
        print "Searching..\n"
        reslist=mysearch(l,keyword,objsearch)
        count=1
        for i in range(len(reslist)):
            print str(count)+". "+reslist[i]+"."
            count +=1
        if objsearch == "1":
            itmp = raw_input("Вывести компьютеры за которыми сидит пользователь под номером: ")
            keyword = reslist[int(itmp)-1]
            objsearch = 2
            reslist=mysearch(l,keyword,objsearch)
            count = 1
            for i in range (len(reslist)):
                print str(count)+". "+reslist[i]+"."
                count +=1
            itmp = int(raw_input("Подключиться к помпьютеру под номером: "))
            itmp -=1
            print "Connecting ..."+reslist[itmp]
            subprocess.os.system("/usr/bin/wine ~/.wine/drive_c/Program\ Files/Radmin/radmin.exe /connect:"+reslist[itmp])
    except ldap.LDAPError, error_message:
        print "Could'n Connect. %s " %error_message
 
def mysearch(l,keyword,objsearch):
    base = "OU=Компьютеры,DC=local,DC=lan"
    scope = ldap.SCOPE_SUBTREE
    search_result=[]
    if int(objsearch) == 1:
        filter = "(&(objectClass=user)(cn=*"+keyword+"*)(mail=*))"
    else:
        if int(objsearch) == 2:
            filter = "(&(objectClass=computer)(description=*on:*"+keyword+"*))" 
        else: 
            print "Неверно указан объект поиска."
            return
    retrieve_attributes = None
    count = 0
    result_set = []
    timeout = 0
    try:
        result_id = l.search(base, scope, filter, retrieve_attributes)
        while l:
            result_type, result_data = l.result(result_id, timeout)
            if (result_data == []):
                break
            else:
                if result_type == ldap.RES_SEARCH_ENTRY:
                    result_set.append(result_data)
        if len(result_set) == 0:
            print "No results."
            return
        for i in range(len(result_set)):
            for entry in result_set[i]:
                try:
                    name = entry[1]['cn'][0]
                    search_result.append(name)
                except:
                    pass
        return search_result
    except ldap.LDAPError, error_message:
        print error_message
 
if __name__=='__main__':
    main()