статья ldap+samba+ddns+dhcp [бета-версия]

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Гость » 2008-12-11 23:44:52

Я с cups тоже работал. Согласен что удобно. Но хочется попробовать варианты :)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

urusha
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-01 15:06:14

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение urusha » 2008-12-12 10:22:46

Здравствуйте, вот вопросы:
1) можно ли организовать доступ к шарам винды по группам домена samba? По юзерям работает, но это ж не серьезно. Пробовал влкючать дом. группу/дом. юзеров в локальную группу и давать ей права, не фурычит. Может есть какая-то хитрость?
2) в домене около 50 компов, все работает ок, не тупит, но ввожу на контроллере dmesg -a

Код: Выделить всё

Dec 12 09:51:41 mx smbd[11967]: nss_ldap: could not search LDAP server - Server is unavailable
Dec 12 09:52:14 mx smbd[11967]: nss_ldap: could not search LDAP server - Server is unavailable
Dec 12 09:53:52 mx smbd[14831]: nss_ldap: could not search LDAP server - Server is unavailable
и так почти постоянно, ночью почти нет. особо не напрягает, но наверняка ж чтото не так. конфиги со статьи. лдап 2.4

Еще, кому интересно написал скрипт создания удаления юзеря

Код: Выделить всё

#! /bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

PROFILESDIR=/home/samba/profiles
HOMESDIR=/home/samba/homes

LDAPHOST=127.0.0.1
LDAPPORT=389
LDAPGROUPSBIND='ou=groups,dc=bsz,dc=local'

case $1 in
    add)
        if [ $# -ne 3 ]
        then
            echo "usage: `basename $0` add user primary_group"
            exit 1
        fi

        USER=$2
        GROUP=$3

        # проеряем нет ли уже такого пользователя
        pw user show $USER > /dev/null 2>&1
        if [ $? -eq 0 ]
        then
            echo "Can not properly check if user exists."
            exit 2
        fi

        # проверяем наличие указанной группы
        pw group show $GROUP > /dev/null
        if [ $? -ne 0 ]
        then
            exit 2
        fi

        # добавляем юзеря в лдап (скриптом также создается хом-каталог)
        ldapadduser $USER $GROUP
        if [ $? -ne 0 ]
        then exit 3
        fi

        # добавляем юзеря в его примари группу (чтоб нормально работали
        # утилиты типа net rpc group members)
        ldapaddusertogroup $USER $GROUP
        if [ $? -ne 0 ]
        then exit 3
        fi

        # создаем юзера в самбе
        smbpasswd -a $USER
        if [ $? -ne 0 ]
        then exit 4
        fi

        # создаем каталог профиля если еще нет (хомяк создается ldapadduser)
        if [ ! -e $PROFILESDIR/$USER ]
        then
            mkdir $PROFILESDIR/$USER && \
                chown -R $USER:$GROUP $PROFILESDIR/$USER && \
                chmod 700 $PROFILESDIR/$USER
        elif [ -d $PROFILESDIR/$USER ]
        then
            echo "Directory $PROFILESDIR/$USER already exists. Setting rights."
            chown -R $USER:$GROUP $PROFILESDIR/$USER && \
                chmod 700 $PROFILESDIR/$USER
        else
            echo "Can not create $PROFILESDIR/$USER. It already exists (not a directory)."
            exit 5
        fi
        echo OK
        ;;
    del)
        if [ $# -ne 2 ]
        then
            echo "usage: `basename $0` del user"
            exit 1
        fi

        USER=$2

        # проверяем наличие юзеря
        pw user show $USER > /dev/null
        if [ $? -ne 0 ]
        then
            exit 2
        fi

        # Удаляем юзеря из групп в лдапе, где он был
        MEMBEROFGROUPS=`ldapsearch -LLL -h $LDAPHOST -p $LDAPPORT -b \
            "$LDAPGROUPSBIND" "(memberuid=$USER)" cn \
            | grep "cn:" | awk '{print($2)}'`
        for g in $MEMBEROFGROUPS
        do
            ldapdeleteuserfromgroup $USER $g
        done

        # Удаляем юзеря из лдапа
        ldapdeleteuser $USER > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
            exit 3
        fi

        # Удаляем каталоги юзеря
        if [ -d $PROFILESDIR/$USER ]
        then
            rm -R -d $PROFILESDIR/$USER
        fi

        if [ -d $HOMESDIR/$USER ]
        then
            rm -R -d $HOMESDIR/$USER
        fi

        ;;
    *)
        echo "usage: `basename $0` add|del user [primary_group]"
        exit 1
        ;;
esac

exit 0
и нет не поэтому, и да и поэтому тоже

Andrew21
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Andrew21 » 2008-12-12 23:29:18

Вот цитата из конфига smb.conf, приведенного в обсуждаемой статье
[data]
comment = Dump of files
path = /data
create mode = 660
directory mode = 770
public = yes
writeable = yes
write list = @people
read list = @people
Обрати внимание на последние две строчки. Ответил на твой вопрос?

urusha
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-01 15:06:14

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение urusha » 2008-12-14 15:03:30

Andrew21 писал(а):Ответил на твой вопрос?
нет(. Я имел ввиду, как делать шары по группам в винде.
и нет не поэтому, и да и поэтому тоже

stilgar
рядовой
Сообщения: 12
Зарегистрирован: 2008-12-15 18:47:34

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение stilgar » 2008-12-15 19:07:33

Народ, помогите! Пытался разобраться сам, да что-то не получается.
Ldap настроил, все нормально работает, вот только named ругается в логах:
  • named[1113]: starting BIND 9.3.2 -c /etc/namedb/named.conf -t /var/named -u bind
    Dec 15 18:43:56 fserv named[1113]: command channel listening on 127.0.0.1#953
    Dec 15 18:43:56 fserv named[1113]: LDAP sdb zone '0.0.127.in-addr.arpa': bind failed
    Dec 15 18:43:56 fserv named[1113]: zone 0.0.127.in-addr.arpa/IN: could not find NS and/or SOA records
    Dec 15 18:43:56 fserv named[1113]: zone 0.0.127.in-addr.arpa/IN: has 0 SOA records
    Dec 15 18:43:56 fserv named[1113]: zone 0.0.127.in-addr.arpa/IN: has no NS records
    Dec 15 18:43:56 fserv named[1113]: LDAP sdb zone '100.168.192.in-addr.arpa': bind failed
    Dec 15 18:43:56 fserv named[1113]: zone 100.168.192.in-addr.arpa/IN: could not find NS and/or SOA records
    Dec 15 18:43:56 fserv named[1113]: zone 100.168.192.in-addr.arpa/IN: has 0 SOA records
    Dec 15 18:43:56 fserv named[1113]: zone 100.168.192.in-addr.arpa/IN: has no NS records
    Dec 15 18:43:56 fserv named[1113]: LDAP sdb zone 'rk-antey.ru': bind failed
    Dec 15 18:43:56 fserv named[1113]: zone rk-antey.ru/IN: could not find NS and/or SOA records
    Dec 15 18:43:56 fserv named[1113]: zone rk-antey.ru/IN: has 0 SOA records
    Dec 15 18:43:56 fserv named[1113]: zone rk-antey.ru/IN: has no NS records
    Dec 15 18:43:56 fserv named[1113]: running
named.conf
  • acl lan { 192.168.100.0/24; };
    acl transfers { 127.0.0.1; };
    acl trusted { 192.168.100.0/24; };

    key "rndc-key" {
    algorithm hmac-md5;
    secret "Lvv9zgyj87oWGtH73KQBSg==";
    };


    controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
    };


    options {
    directory "/etc/namedb";
    pid-file "/var/run/named/pid";
    dump-file "/var/dump/named_dump.db";
    statistics-file "/var/stats/named.stats";

    listen-on { 127.0.0.1; };
    listen-on { 192.168.100.1; };

    forward only;

    forwarders { 192.168.100.5; 195.34.224.1; 195.34.224.2; };

    allow-query { lan; trusted; };
    allow-recursion { trusted; lan; };
    query-source address * port 53;
    };



    zone "." {
    type hint;
    file "named.root";
    };

    zone "rk-antey.ru" {
    type master;
    database "ldap ldap://127.0.0.1/zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru 178600";
    allow-query { lan; trusted; };
    allow-transfer { transfers; };
    };


    zone "100.168.192.in-addr.arpa" {
    type master;
    database "ldap ldap://127.0.0.1/zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru 178600";
    allow-query { lan; trusted; };
    allow-transfer { transfers; };
    };


    zone "0.0.127.in-addr.arpa" {
    type master;
    database "ldap ldap://127.0.0.1/zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru 178600";
    allow-query { lan; trusted; };
    allow-transfer { transfers; };
    };
dnszone.ldif
  • dn: ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: organizationalUnit
    ou: DNS
    description: Domain Zones

    # zone rk-antey
    dn: zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: rk-antey.ru

    # SOA
    dn: relativeDomainName=@,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: @
    nSRecord: fserv.rk-antey.ru.
    sOARecord: fserv.rk-antey.ru. root.fserv.rk-antey.ru. 1 8H 2H 1W 1D

    # fserv IN A 192.168.100.1
    dn: relativeDomainName=fserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: fserv
    dNSClass: IN
    aRecord: 192.168.100.1

    # termserv IN A 192.168.100.3
    dn: relativeDomainName=termserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: termserv
    dNSClass: IN
    aRecord: 192.168.100.3

    # iserv IN A 192.168.100.5
    dn: relativeDomainName=iserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: iserv
    dNSClass: IN
    aRecord: 192.168.100.5

    # addr-arpa
    dn: zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 100.168.192.in-addr.arpa

    # SOA for addr-arpa
    dn: relativeDomainName=@,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: @
    nSRecord: fserv.rk-antey.ru.
    sOARecord: fserv.rk-antey.ru. root.fserv.rk-antey.ru. 1 8H 1H 1W 1D

    # PTR for .1
    dn: relativeDomainName=1,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 1
    pTRRecord: fserv.rk-antey.ru

    # PTR for .3
    dn: relativeDomainName=3,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 3
    pTRRecord: termserv.rk-antey.ru

    # PTR for .5
    dn: relativeDomainName=5,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 5
    pTRRecord: fserv.rk-antey.ru
fserv# ldapsearch -x -LLL -b 'dc=rk-antey,dc=ru' '*'
  • dn: ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: organizationalUnit
    ou: DNS
    description: Domain Zones

    dn: zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: rk-antey.ru

    dn: relativeDomainName=@,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: @
    nSRecord: fserv.rk-antey.ru.
    sOARecord: fserv.rk-antey.ru. root.fserv.rk-antey.ru. 1 8H 2H 1W 1D

    dn: relativeDomainName=fserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: fserv
    dNSClass: IN
    aRecord: 192.168.100.1

    dn: relativeDomainName=termserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: termserv
    dNSClass: IN
    aRecord: 192.168.100.3

    dn: relativeDomainName=iserv,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: iserv
    dNSClass: IN
    aRecord: 192.168.100.5

    dn: zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 100.168.192.in-addr.arpa

    dn: relativeDomainName=@,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,
    dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: @
    nSRecord: fserv.rk-antey.ru.
    sOARecord: fserv.rk-antey.ru. root.fserv.rk-antey.ru. 1 8H 1H 1W 1D

    dn: relativeDomainName=1,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,
    dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 1
    pTRRecord: fserv.rk-antey.ru

    dn: relativeDomainName=3,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,
    dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 3
    pTRRecord: termserv.rk-antey.ru

    dn: relativeDomainName=5,zoneName=100.168.192.in-addr.arpa,ou=DNS,dc=rk-antey,
    dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: 100.168.192.in-addr.arpa
    relativeDomainName: 5
    pTRRecord: fserv.rk-antey.ru

    dn: relativeDomainName=localhost,zoneName=rk-antey.ru,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    zoneName: rk-antey.ru
    relativeDomainName: localhost
    dNSClass: IN
    aRecord: 127.0.0.1

    dn: zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=rk-antey,dc=ru
    objectClass: top
    objectClass: dNSZone
    relativeDomainName: 0.0.127.in-addr.arpa
    zoneName: 0.0.127.in-addr.arpa

    dn: relativeDomainName=@,zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=rk-antey,dc=r
    u
    objectClass: top
    objectClass: dNSZone
    relativeDomainName: @
    zoneName: 0.0.127.in-addr.arpa
    nSRecord: fserv.rk-antey.ru.
    sOARecord: fserv.rk-antey.ru. root.fserv.rk-antey.ru. 1 3H 1H 12W 1H

    dn: relativeDomainName=1,zoneName=0.0.127.in-addr.arpa,ou=DNS,dc=rk-antey,dc=r
    u
    objectClass: top
    objectClass: dNSZone
    relativeDomainName: 1
    pTRRecord: localhost.rk-antey.ru
    zoneName: 0.0.127.in-addr.arpa
Не могу понять в чем дело. Может кто-нибудь сталкивался с подобным?
FreeBSD 6.3
fserv# pkg_info
bind9-sdb-ldap-9.3.2 The well known Bind9, patched for use of an LDAP based back
ldapscripts-1.8.0_1 Scripts to manage posix accounts in an OpenLDAP directory
nss_ldap-1.257 RFC 2307 NSS module
openldap-client-2.3.43 Open source LDAP client implementation
openldap-server-2.3.43 Open source LDAP server implementation

stilgar
рядовой
Сообщения: 12
Зарегистрирован: 2008-12-15 18:47:34

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение stilgar » 2008-12-18 16:50:22

Проблема разрешилась: нужно было создавать файл rndc.key, а не rndc.conf как указано в статье.
Возникла другая проблема ldap долго запускается и named и dhcpd на этапе загрузки из rc.conf не могут подключиться к ldap, соответственно или не запускаются или запускаются некорректно. Есть ли выход из этой ситуации?

Хомяк
проходил мимо
Сообщения: 2
Зарегистрирован: 2008-12-25 7:12:30

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Хомяк » 2008-12-28 2:16:50

По поводу поднятия DHCP:

Код: Выделить всё

...
dhcpSecondaryDN: cn=mail.artpaint,ou=dhcp,dc=artpaint,dc=spb,dc=ru
...
dn: cn=mail.artpaint, ou=dhcp, dc=artpaint,dc=spb,dc=ru
dhcpServiceDN: cn=conf, ou=dhcp, dc=artpaint,dc=spb,dc=ru
objectClass: top
objectClass: dhcpServer
cn: mail.artpaint
...
Если поднимать как cn=mail.artpaint - dhcpd ругается:

Код: Выделить всё

Error: Cannot find LDAP entry matching (&(objectClass=dhcpServer)(|(cn=mail)(cn=mail)))
Если вместо этого указать cn=mail без всяких точек - то всё нормально поднимается...
Бага аль фича, но я что-то упустил?

И еще - если все настроить как тут - то ни named, ни dhcpd нормально не стартуют, пока не запустится slapd.
Почему не осветили rcorder?
Я решил проблему так:
в файле /etc/rc.d/named добавил значение slapd в строку REQUIRE

Код: Выделить всё

# REQUIRE: SERVERS cleanvar slapd
в файле /usr/local/etc/rc.d/isc-dhcpd добавил значение slapd в строку REQUIRE

Код: Выделить всё

# REQUIRE: DAEMON slapd
ну и самбу тоже хорошо бы запускать после slapd - в файле /usr/local/etc/rc.d/samba добавил значение slapd в строку REQUIRE

Код: Выделить всё

# REQUIRE: NETWORKING SERVERS DAEMON ldconfig resolv slapd
# REQUIRE: cupsd
надеюсь кому-то поможет... :) А то после ребута запускать ручками dhcp как-то некрасиво было :)

Хомяк
проходил мимо
Сообщения: 2
Зарегистрирован: 2008-12-25 7:12:30

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Хомяк » 2009-01-12 2:25:49

urusha писал(а):можно ли организовать доступ к шарам винды по группам домена samba? По юзерям работает, но это ж не серьезно. Пробовал влкючать дом. группу/дом. юзеров в локальную группу и давать ей права, не фурычит. Может есть какая-то хитрость?
Не понял вопроса... Тебе на винде шару создать надо или на самбе?
Если на винде - тогда в чем проблема - группы там есть.
Если на самбе - то тоже не проблема.
Если тебе "много групп надо на отдельные папки ставить" - тогда ACL включи на разделе. mount -o acls /dev/... и т.д. или в /etc/fstab пропиши у этого раздела acls и далее командами getfacl и setfacl настраивай... либо в винде по сети, если окошки удобнее :)))
Если тебе на конкретную шару надо, то в smb.conf

Код: Выделить всё

[public]
   ...
   valid users = "@Domain Admins", "@Domain Users"
[reseption]
   ...
   valid users = "@Domain Admins", "@Reception"
либо нормально вопрос задай :)))

Alex_kozlov
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Alex_kozlov » 2009-02-12 8:11:38

доброго времени суток!
При запуске скрипта dhcpd2ldap.pl он вываливает вот такое:
srvdm# /root/dhcp/dhcpd2ldap.pl
Initializing LDAP Connection...Done
Timestamp change or AUTO_VERIFY triggered...
Removing inaccurate records for alex_book...
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 150.
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 152.
Adding entry for alex_book at 10.1.10.117...
failed to add entry: parent does not exist at /root/dhcp/dhcpd2ldap.pl line 167.
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 170.
failed to add entry: parent does not exist at /root/dhcp/dhcpd2ldap.pl line 181.
И соответственно ниче никуда не добавляет. Никто не сталкивался с такой граблей?

Alex_kozlov
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Alex_kozlov » 2009-02-12 9:09:01

Alex_kozlov писал(а):доброго времени суток!
При запуске скрипта dhcpd2ldap.pl он вываливает вот такое:
srvdm# /root/dhcp/dhcpd2ldap.pl
Initializing LDAP Connection...Done
Timestamp change or AUTO_VERIFY triggered...
Removing inaccurate records for alex_book...
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 150.
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 152.
Adding entry for alex_book at 10.1.10.117...
failed to add entry: parent does not exist at /root/dhcp/dhcpd2ldap.pl line 167.
failed to remove entry: No such object at /root/dhcp/dhcpd2ldap.pl line 170.
failed to add entry: parent does not exist at /root/dhcp/dhcpd2ldap.pl line 181.
И соответственно ниче никуда не добавляет. Никто не сталкивался с такой граблей?

Пардон.... грабли называются кривыми руками :)
Проблема снята.

Dominik
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-02-18 17:47:08

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Dominik » 2009-02-18 18:39:05

Господа, у меня получилось ввести ПК (и сервер с самбой и лдапом тоже) в домен только после того, как я добавил их в базу LDAP командой # ldapadduser имя_ПК$ computers
иди через LdapAdmin в ou-computers через New->Computers
Это нормально? Запись в базе LDAP должна создаваться автоматом или ее руками надо создавать, как в моем случае?

Если не трудно, на пальцах объясните, кто и что вносит записи в базу лдап при введении ПК в домен...

Alex_kozlov
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Alex_kozlov » 2009-02-20 10:12:05

поправь пути в smb.conf..

add machine script = /usr/local/sbin/ldapaddmachine '%u' computers
add user script = /usr/local/sbin/ldapadduser '%u' users
add group script = /usr/local/sbin/ldapaddgroup '%g'
add user to group script = /usr/local/sbin/ldapaddusertogroup '%u' '%g'
delete user script = /usr/local/sbin/ldapdeleteuser '%u'
delete group script = /usr/local/sbin/ldapdeletegroup '%g'
delete user from group script = /usr/local/sbin/ldapdeleteuserfromgroup '%u' '%g
set primary group script = /usr/local/sbin/ldapsetprimarygroup '%u' '%g'
rename user script = /usr/local/sbin/ldaprenameuser '%uold' '%unew'

Dominik
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-02-18 17:47:08

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Dominik » 2009-02-20 12:32:40

Пути были аналогичные, но для пущей уверенности скопировал Ваши :)
Результат аналогичный:
На машине с XP при попытке ввести в домен, после запроса на логин/пароль администратора домена выскаивает ошибка:
"При присоединении к домену "home" произошла следйющая ошибка
Не найдено имя пользователя"

Вводится без проблем, если руками в базе создать учетку под ПК :)

Demonster
рядовой
Сообщения: 25
Зарегистрирован: 2008-01-17 18:17:41

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Demonster » 2009-03-02 14:56:38

сделал все по статье. затыкон на вводе в домен

Код: Выделить всё

# net rpc join -S mail -U administrator%password
[2009/03/02 13:50:34, 0] libsmb/clientgen.c:cli_receive_smb(111)
  Receiving SMB: Server stopped responding
Could not connect to server inet
[2009/03/02 13:50:44, 0] libsmb/clientgen.c:cli_receive_smb(111)
  Receiving SMB: Server stopped responding
Connection failed: NT_STATUS_IO_TIMEOUT
[2009/03/02 13:50:54, 0] libsmb/clientgen.c:cli_receive_smb(111)
  Receiving SMB: Server stopped responding
Could not connect to server inet
Connection failed: NT_STATUS_IO_TIMEOUT
#
аналогично при вводе в домен любой виндовой тачки.

И еще, по статье не понял как программкой LDAPAdmin коннектиться к базе: какие должны быть имя пользователя (root или admin) и пароль (rootpw или smbpasswd), тип авторизации?
У меня и на root и на admin ругается:
LDAP error! Недопустимый синтаксис DN: invalid DN
Анонимно пускает

Код: Выделить всё

# ldapwhoami
anonymous
Result: Success (0)
# ldapwhoami -D "cn=root,dc=artpaint,dc=spb,dc=ru" -x -W
Enter LDAP Password:<пароль rootpw>
dn:cn=root,dc=artpaint,dc=spb,dc=ru
Result: Success (0)

Corvin74
рядовой
Сообщения: 30
Зарегистрирован: 2009-03-04 19:13:15
Откуда: Москва
Контактная информация:

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Corvin74 » 2009-03-19 8:59:17

И еще, по статье не понял как программкой LDAPAdmin коннектиться к базе: какие должны быть имя пользователя (root или admin) и пароль (rootpw или smbpasswd), тип авторизации?
Попробуйте cn=root,dn=blabla,dn=ru поскольку я пароли ставил одинаковые то х.з. но выбор-то небогатый... ;-)
«Только песок не меняется, всё остальное изменчиво.» — Один из джав Анкорхеда

ft845
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение ft845 » 2009-03-23 12:56:45

Заметил следующую фичу:
Если контроллер подвешивается, после перезагрузки ПК отказываются в него входить.
После ввода доменного логина и пароля ПК долго думает на моменте применения личных параметров, потом выскаивает окошко, что перемещаемый профиль на сервере не найден, ПК грузится.... сетевай домашняя папка поключается...
Если вывести ПК из домена и ввести заново, работа восстанавливается...
странно....
Если не трудно, подскажите, какой именно лог в данном случае осматривать?

Аватара пользователя
AndyS
рядовой
Сообщения: 30
Зарегистрирован: 2008-10-23 15:55:11
Откуда: Киев
Контактная информация:

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение AndyS » 2009-04-08 19:49:27

Поправка по DHCP:

Строка 151 dhcpd2ldap.pl
Должно быть так:

Код: Выделить всё

$result = $ldap->delete("relativeDomainName=$fourth," . $REVERSE_BASE);
Было так:

Код: Выделить всё

$result = $ldap->delete("relativeDomainName=$fourth.$third," . $REVERSE_BASE);
Если не удалить $third, то множатся обратные зоны для одного хоста.
С виндовыми компами все на ура проходит, вот с Ubuntu получал каждый раз новый айпишник, и обратная зона не удалялась.

Если два компа с одинаковым именем, то ругатся должно?
Что-то не ругается у меня.
Куда курить надо?
PS Пока что контроллер домена не тестил.

gun-jack
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-04-14 17:31:56

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение gun-jack » 2009-04-14 17:46:58

во первых спасибо за статью как автору лично так и всем кто поспособствовал чтобы гугл мне ее выдал. теперь по делу - сделал я первую часть (ввел самбу в домен и тестовую машину на винХП тоже в этот же домен) и кроме кривых рук (моих) столкнулся с одним странным явлением, вроде все работало но компы упорно не хотели присоединяться в домент, вылетало сообщение "Creation of workstation account filed" попытавшись последить где же грабли я их нашел, оказалось что лдап-скрипты прописанные в конфиге самбы

Код: Выделить всё

# скрипты для добавления юзеров и групп (юзается в usermgr от nt4)
add machine script = /usr/local/bin/ldapaddmachine '%u' computers
add user script = /usr/local/bin/ldapadduser '%u' users
add group script = /usr/local/bin/ldapaddgroup '%g'
add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
delete user script = /usr/local/bin/ldapdeleteuser '%u'
delete group script = /usr/local/bin/ldapdeletegroup '%g'
delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew'
у меня лягли в папку /usr/X11R6/sbin а не в /usr/local/bin, возможно потому что на машине стояли Х, тем не менее мне как чайнику было страшно что опять придется все переставлять и пробовать с нуля, думаю в статью можно добавить маленький комент что мол если на машине стоят Х то искать скрипты "тут" (если конечно это вызвано Х-сами) в любом случае может кому-то поможет.

п.с. Х-сы ставил чтобы можно было нормально читать эту статью и пробовать походу дела
п.п.с для ясности все таки напишу - после того как я поменял пути в конфиге самбы оба компа успешно присоединились к домену
п.п.п.с - да , они лежали и в local/sbin но поиском я нашел их именно там :) думал удалить пост, но мож кто-то такой же резкий как я увидит и сообразит, так что оставляю на усмотрение модеров, если эта тема уже раскрыта - удалите :)

Аватара пользователя
s-kAn
проходил мимо
Сообщения: 2
Зарегистрирован: 2009-04-18 12:49:01
Откуда: Московская область
Контактная информация:

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение s-kAn » 2009-04-18 14:42:43

Уважаемые...помогите пожалуйста ничинающему...все делаю по статье но при запуске slapd пишет вот такую штуку:
># /usr/local/etc/rc.d/slapd start
device: not found
device: not found
Starting slapd.
соответсвенно процесс не запускается и ничего не пашет...
Подскажите куда копать и что делать...
Заранее очень благодарен...
Стремись к немозможному и получишь максимум...

stark
мл. сержант
Сообщения: 79
Зарегистрирован: 2008-10-26 10:07:03
Контактная информация:

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение stark » 2009-05-28 11:27:23

Dobroe vremya vsem.
Stalknulsya s takoy ne obyasnimoy vewuyu , kak v faile

Код: Выделить всё

/usr/local/etc/ldapscripts/ldapscripts.conf 

Код: Выделить всё

# Character set conversion : $ICONVCHAR <-> UTF-8
# Comment ICONVBIN to disable UTF-8 conversion
ICONVBIN="/usr/local/bin/iconv"
#ICONVCHAR="ISO-8859-15"
ICONVCHAR="KOI8-R"
dale vipolnyayu komandu

Код: Выделить всё

ldapaddgroup admins
vidaet takoe :

Код: Выделить всё

 Error adding group admins to LDAP
a kogda po umolchaniyu
# Comment ICONVBIN to disable UTF-8 conversion
ICONVBIN="/usr/local/bin/iconv"
#ICONVCHAR="ISO-8859-15"

to pishet :

Код: Выделить всё

You must set ICONVCHAR before running these scripts
Kakie moi deystviya dolzhni bit , kak eto poborot ?
Ne prasilniy ICONVCHAR="KOI8-R" ?

Spasibo vsem

EnSlaver
рядовой
Сообщения: 24
Зарегистрирован: 2009-06-01 22:41:44

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение EnSlaver » 2009-06-02 1:03:53

Подскажите как решить проблему.

домен работает, но криво

1. При добавлении

ldapaddgroup admins
ldapaddgroup users
ldapaddgroup computers
ldapadduser admin admins

Warning : using command-line passwords, ldapscripts may not be safe
Successfully added group admins to LDAP
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added group users to LDAP
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added group computers to LDAP
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added user admin to LDAP
Successfully set password for user admin
Successfully created home directory for user admin

Но! при это если в /usr/local/etc/nss_ldap.conf
host 127.0.0.1
#host ldapi://%2fvar%2frun%2fldapi/
base dc=office,dc=lan
ldap_version 3
port 389
scope one
timelimit 30
bind_timelimit 10
bind_policy soft
nss_connect_policy persist
idle_timelimit 3600
nss_paged_results yes
pagesize 1000
nss_base_passwd ou=users,dc=office,dc=lan?one
nss_base_group ou=groups,dc=office,dc=lan?one
nss_base_passwd ou=computers,dc=office,dc=lan?one
nss_base_shadow ou=users,dc=office,dc=lan?one

То в /var/log/messages:

server slapd[1536]: nss_ldap: could not search LDAP server - Server is unavailable

Однако все начинает работать если в /usr/local/etc/nss_ldap.conf

host 127.0.0.1
#host ldapi://%2fvar%2frun%2fldapi/

заменить на

#host 127.0.0.1
host ldapi://%2fvar%2frun%2fldapi/

Но при этом получается следующее:

[root@server /home/enslaver]# ldapadduser test users
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added user test to LDAP
Successfully set password for user test
Successfully created home directory for user test
[root@server /home/enslaver]# id test
id: test: no such user
[root@server /home/enslaver]# smbpasswd -a test
Cannot locate Unix account for 'test'!

Если меняем обратно:
host 127.0.0.1
#host ldapi://%2fvar%2frun%2fldapi/

То добавляется:

[root@server /home/enslaver]# ldapadduser test users
Warning : using command-line passwords, ldapscripts may not be safe
Successfully added user test to LDAP
Successfully set password for user test
Skipped home directory creation for user test (already exists)
[root@server /home/enslaver]# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test.
[root@server /home/enslaver]# id test
uid=20002(test) gid=10002(users) groups=10002(users)

Но! Опять поялвляется: server slapd[2129]: nss_ldap: could not search LDAP server - Server is unavailable
Т.е. приходтся постоянно править nss_ldap.conf и перезапускать slapd. Ни как не пойду в чем дело.

Но что самое интересное, что несмотря на домен работает только если в nss_ldap.conf - host 127.0.0.1, хоть и server slapd[2129]: nss_ldap: could not search LDAP server - Server is unavailable. То есть пишется что сервер недоступен, но я из Win в домен комп ввожу и через LdapAdmin, и phpldapadmin конечусь ...

Ересь вот такая ... помогите плз ... я уже весь мозг сломал ...
могу предоставить необходимые сведения ....

Вот конфиги

[root@server /home/enslaver]# cat /etc/nsswitch.conf
group: files ldap
hosts: files dns
networks: files
passwd: files ldap
shadow: files ldap
shells: files

group_compat: nis
passwd_compat: nis

----------------------------------------------------------------------------------------------------

[root@server /home/enslaver]# cat /usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema

# схемы самбы берутся из самбы (потом скопируем), схемы dns и dhcp
# тоже позже скопируем. пока строчки закоментарим
include /usr/local/etc/openldap/schema/samba.schema
include /usr/local/etc/openldap/schema/dnszone.schema
include /usr/local/etc/openldap/schema/dhcp.schema

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

# Load dynamic backend modules:

modulepath /usr/local/libexec/openldap
#moduleload back_ldbm
moduleload back_bdb

access to attrs=userPassword
by self write
by anonymous auth
by * none

access to attrs=sambaLMPassword,sambaNTPassword
by dn="cn=root,dc=office,dc=lan" write
by * none

#Правило необходимое для работы phpLDAPadmin
access to *
by dn="uid=root,dc=office,dc=lan" write
by * read

access to *
by self write
by anonymous read
by * none


#######################################################################
# BDB database definitions
#######################################################################

#database ldbm
database bdb
suffix "dc=office,dc=lan"
rootdn "cn=root,dc=office,dc=lan"
#
# пароль на рута можно сгенерировать с помощью slappasswd
#
rootpw {SSHA}uFZPbh5q4LjGP073Cony+4LoEbsa582P

directory /var/db/openldap-data

# Indices to maintain
#index objectClass eq
#index cn eq

index objectClass,uid,uidNumber,gidNumber eq
index cn,mail,surname,givenname eq,subinitial

index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq


----------------------------------------------------------------------------------------------------

[root@server /home/enslaver]# cat /usr/local/etc/smb.conf
[global]

# имя домена
workgroup = office

# типа коментарий самба сервера
server string = server.office

#имя компа с самбой в сетевом окружении
netbios name = server
security = user
hosts allow = 192.168.0. 10.9.16. 127.

load printers = no
log file = /var/log/samba/log.%m
max log size = 50
acl compatibility = win2k

encrypt passwords = yes
admin users = admin
passdb backend = ldapsam:ldap://127.0.0.1/


# здесь описываем лдап
ldap suffix = dc=office,dc=lan
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap machine suffix = ou=computers
ldap admin dn = "cn=root,dc=office,dc=lan"
ldap delete dn = no
ldap ssl = off
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind separator = @
winbind use default domain = yes

# делаем PDC
socket options = TCP_NODELAY
local master = yes
os level = 64
domain master = yes
preferred master = yes
domain logons = yes

# если хоиите юзать логон скрипты, то раскоментариваете
; logon script = %m.bat
; logon script = %U.bat

# путь к перемещаемому профилю
logon path = \\%L\profiles

# путь к хомякам юзеров
logon home = \\%L\HOME
logon drive = H:


wins support = yes
dns proxy = yes


display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
timeserver = yes

# скрипты для добавления юзеров и групп (юзается в usermgr от nt4)
add machine script = /usr/local/sbin/ldapaddmachine '%u' computers
add user script = /usr/local/sbin/ldapadduser '%u' users
add group script = /usr/local/sbin/ldapaddgroup '%g'
add user to group script = /usr/local/sbin/ldapaddusertogroup '%u' '%g'
delete user script = /usr/local/sbin/ldapdeleteuser '%u'
delete group script = /usr/local/sbin/ldapdeletegroup '%g'
delete user from group script = /usr/local/sbin/ldapdeleteuserfromgroup '%u' '%g'
set primary group script = /usr/local/sbin/ldapsetprimarygroup '%u' '%g'
rename user script = /usr/local/sbin/ldaprenameuser '%uold' '%unew'


# делаем шару на хомяки
[HOME]
comment = Home Directories
path = /home/samba/homes/%U
read only = no
public = no
writable = yes
create mask = 0600
browseable = no
directory mask = 0700

# делаем шару на нетлогон (для запуска скриптов)
[netlogon]
comment = Network Logon Service
path = /usr/local/etc/samba/netlogon
guest ok = yes
writable = no
share modes = no
browseable = no

# делаем шару на перемещаемые профили
[profiles]
create mask = 0600
directory mask = 0700
path = /home/samba/profiles/%u
writeable = yes
browseable = no
locking = no
# csc policy = disable # эта строчка необходима чтобы отключить автономное кеширование



# просто так :) чтобы можно было на тачку заходить
[IPC$]
path = /tmp
hosts allow = 192.168.0.0/24 10.9.16.0/24 127.0.0.1
hosts deny = 0.0.0.0/0

Аватара пользователя
Барбос
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-06-03 6:50:16
Откуда: Екатеринбург

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Барбос » 2009-06-03 6:58:38

господа... такое дело.
в логон скрипте есть: net time \\srever /set /yes
команда не исполняется , так как у юзера нет прав на смену времени на машине
Подскажите какое место крутить в политиках?
если захожу кем-нить из группы админов то время синхронизирует.
в локальных политиках запрещено юзеру это делать.
Последний раз редактировалось Барбос 2009-06-04 5:35:02, всего редактировалось 1 раз.

Аватара пользователя
Барбос
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-06-03 6:50:16
Откуда: Екатеринбург

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение Барбос » 2009-06-03 12:10:07

Хлопцы,
еще есть вопрос...
я машинку включил, dhcp адрес раздал, в dns появилась прямая и PTR запись.
я ей имя поменял, PTR запись заменилась на запись с номым именем,
а вот прямая появилась с новым именем и со старым осталась.
нужно же чтоб удалялась старая?

morean
проходил мимо

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение morean » 2009-07-02 3:05:03

пожалуйста, подскажите, что за:

Код: Выделить всё

Warning : using command-line passwords, ldapscripts may not be safe
и как поправить? Делал все по статье, дошел до данного шага пока что, форум почитал(данный топик), не нашел про это, погуглил, тоже не нашел ничего...

Аватара пользователя
AndyS
рядовой
Сообщения: 30
Зарегистрирован: 2008-10-23 15:55:11
Откуда: Киев
Контактная информация:

Re: статья ldap+samba+ddns+dhcp [бета-версия]

Непрочитанное сообщение AndyS » 2009-07-02 13:39:07

morean писал(а):пожалуйста, подскажите, что за:

Код: Выделить всё

Warning : using command-line passwords, ldapscripts may not be safe
и как поправить? ...
нужно убрать пароль из ldapscripts.conf
и прописать его в

Код: Выделить всё

BINDPWDFILE="/usr/local/etc/ldapscripts/ldapscripts.passwd"
Барбос писал(а):Хлопцы,
еще есть вопрос...
я машинку включил, dhcp адрес раздал, в dns появилась прямая и PTR запись.
я ей имя поменял, PTR запись заменилась на запись с номым именем,
а вот прямая появилась с новым именем и со старым осталась.
нужно же чтоб удалялась старая?
Правильный скрипт dhcpd2ldap.pl

Код: Выделить всё

#!/usr/bin/perl

####################################################################
#                   Edit These for Your Domain                     #
####################################################################

$LEASES = "/var/db/dhcpd/dhcpd.leases";

$DOMAIN = "DOMAIN";
$REVERSE = "1.168.192.in-addr.arpa";

$FORWARD_BASE = "zoneName=galantpol,ou=dns,dc=domain,dc=com";
$REVERSE_BASE = "zoneName=1.168.192.in-addr.arpa,ou=dns,dc=domain,dc=com";

$USER = 'cn=root,dc=domain,dc=com';
$PASSWORD = "Password";

$LDAP_HOST = '192.168.1.1';

$UPDATE_TIME = 30;    # In Seconds

$AUTO_VERIFY = 0;     # Set this to positive if you would like dhcp2ldap
                      # to periodically re-read the entire leases file
                      # even if the time stamp hasn't changed
                      #
                      # It will perform the auto-verify after
                      # ($AUTO_VERIFY * $UPDATE_TIME) seconds
                      #
                      # This is probably a good idea unless your parse times
                      # are incredibly high

####################################################################
#                   Do Not Edit Below This Line                    #
####################################################################

use IO::Socket;
use Net::LDAP;

print "Initializing LDAP Connection...";
$ldap = Net::LDAP->new($LDAP_HOST) or die "$@";
$ldap->bind($USER, password => $PASSWORD) or die "$!\n";
print "Done\n";
$params = shift;
if($params eq "-d"){
        daemonize();
}
if($params eq "-h"){
        usage();
        exit;
}

while(1){


        if(changed($LEASES)){
                parse($LEASES);
                do_stuff();
        }

        sleep $UPDATE_TIME;
}

sub changed{
        my $file = shift;
        my $curstat = (stat($file))[9];

        if($AUTO_VERIFY){
                $check_count++;
        }
        if($oldstat != $curstat || (($check_count == $AUTO_VERIFY) && $AUTO_VERIFY)){
                $oldstat = $curstat;
                $check_count = 0;
                print "Timestamp change or AUTO_VERIFY triggered...\n";
                return 1;
        }
        else{
                return 0;
        }
}

sub daemonize{
        chdir '/';
        umask 0;
        open STDIN, '/dev/null';
        open STDOUT, '/dev/null';
        open STDERR, '/dev/null';
        if(fork()){
                exit;
        }
        else{
                setsid;
                return;
        }
}

sub parse{
        my $ip,$hostname;
        open IN, shift or die "Could not open leases file: $!\n";
        while($_ = <IN>){
                if(/^#/){
                        next;
                }
                chomp $_;
                if(/lease/){
                        /\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/;
                        $ip = $&;
                        while(!(/\}/)){
                                $_ = <IN>;
                                if(/client-hostname/){
                                        /\".*\"/;
                                        $_ = $&;
                                        /\w+\S*\w+/;
                                        $_ = $&;
                                        $hostname = lc;
                                        $hosts{$hostname} = $ip;
                                }
                        }
                }
                $line = "";

        };
        close IN;
}

sub do_stuff{
        my $readd, $host, $ip, $hostname;
        while(($host,$ip) = each(%hosts)){
                $hostname = $host . "." . $DOMAIN . ".";
                $lookup = "";
                eval{$lookup = inet_ntoa((gethostbyname("$host.$DOMAIN"))[4]); };
                ($first,$second,$third,$fourth) = split(/\./,$ip);

                if($lookup eq $ip){
                        next;
                }

                elsif($lookup ne $ip){
                        print "Removing inaccurate records for $host...\n";
                        $result = $ldap->delete("relativeDomainName=$host," . $FORWARD_BASE);
                        $result->code && warn "failed to remove entry: ", $result->error ;
                        $result = $ldap->delete("relativeDomainName=$fourth," . $REVERSE_BASE);
                        $result->code && warn "failed to remove entry: ", $result->error ;
                        $readd = 1;
                }

                if(!$lookup || $readd){
                        print "Adding entry for $host at $ip...\n";
                        $result = $ldap->add( "relativeDomainName=$host," . $FORWARD_BASE,
                                attr => [
                                        'relativeDomainName'=> $host,
                                        'objectClass'=> ['top','dNSZone'],
                                        'dNSTTL' => '7200',
                                        'zoneName' => $DOMAIN,
                                        'aRecord' => $ip
                                        ]
                                );
                        $result->code && warn "failed to add entry: ", $result->error ;

                        $result = $ldap->delete("relativeDomainName=$fourth," . $REVERSE_BASE);
                        $result->code && warn "failed to remove entry: ", $result->error ;

                        $result = $ldap->add( "relativeDomainName=$fourth," . $REVERSE_BASE,
                                attr => [
                                        'relativeDomainName'=> $fourth,
                                        'objectClass'=> ['top','dNSZone'],
                                        'dNSTTL' => '7200',
                                        'zoneName' => $REVERSE,
                                        'pTRRecord' => $hostname
                                        ]
                                );
                        $result->code && warn "failed to add entry: ", $result->error ;
                        $readd = 0;
                }


        }
}

sub usage{
        print <<EOF;

dhcp2ldapd v1.1: Dynamic DNS Updates for the Bind9 LDAP backend
Copyright 2005 Travis Groth <travis\@netfoo.org> under the GNU GPL

Usage:
        dhcp2ldapd [-d | -h]

-d runs dhcp2ldap in daemon mode
-h displays this help message

Please edit the config variables before running!

EOF
}

#############################################################################
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program 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 General Public License for more details.
#