Tacacs+ with LDAP support.

Здравствуйте.
Стоит задача поднять TACACS+ с поддержкой аутентификации через ldap.
Установил из портов пакет tac_plus-4.0.4.15. Но там во флагах нет включения ldap.
Взял отсюда http://www.gazi.edu.tr/tacacs/index.php?page=download сырцы (взял пакет tac_plus_v9), пытался скомпилить, но безуспешно.
Выполняю в соответствии с инструкциями.
#./configure --with-ldap
#make tac_plus
Завершается ошибками http://pastebin.org/153568

Кто сталкивался, подскажите как скомпилить? может есть еще способ установить tacacs+ с поддержкой ldap?
Спасибо.

Можно сделать так:

В

/usr/portage/net-nds/tac_plus/tac_plus-4.0.4.15.ebuild

заменить cтроку:

IUSE="debug finger tcpd skey"

на

IUSE="debug finger tcpd skey ldap"

После

`use_with tcpd libwrap` 

добавить

`use_with ldap ldap` 

Потом

ebuild /usr/portage/net-nds/tac_plus/tac_plus-4.0.4.15.ebuild digest

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

Можно так же сконфигурить пакет руками со следующими флагами:

./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --libdir=/usr/lib64 --without-skey --with-libwrap --with-ldap --disable-finger --disable-debug

После этих действий теперь действительно показывает,что пакет tac_plus скомпилен с ldap.

 # equery uses tac_plus
[ Searching for packages matching tac_plus... ]
[ Colour Code : set unset ]
[ Legend : Left column  (U) - USE flags from make.conf              ]
[        : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for net-nds/tac_plus-4.0.4.15 ]
 U I
 - - debug  : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see http://www.gentoo.org/proj/en/qa/backtraces.xml
 - - finger : Adds support for checking user counts via fingering the NAS
 + + ldap   : Adds LDAP support (Lightweight Directory Access Protocol)
 - - skey   : Enable S/Key (Single use password) authentication support
 + + tcpd   : Adds support for TCP wrappers

В /etc/tac_plus/tac_plus.conf добавлена строчка для аутентификации через ldap

accounting file =  /var/log/tac_plus.log
key = 12345 # ваш секретный ключ
default authentication  = ldap://127.0.0.1
...

При рестарте /etc/init.d/tac_plus restart не запускается, а в логах пишет

 # tail /var/log/tac_plus.log 
Fri Apr 16 19:17:00 2010 [25896]: Reading config
Fri Apr 16 19:17:00 2010 [25896]: Error expecting 'file' but found 'ldap' on line 4

Т.е. такакс не понимает значение ldap, а хочет,чтобы я ему указал на фал (/etc/passwd).

Причем я скачивал оригинальные сырцы ftp://ftp.shrubbery.net/pub/tac_plus ( версию tacacs±F4.0.4.19) и там в configure --help нет опции --with-ldap.

Видимо ldap тока в пропатченых версиях, которые не собираются:(

Написать ебилд 15 минут. Давай исходники.

http://www.gazi.edu.tr/tacacs/get.php?src=tac_plus_v9a.tar.gz
Это пакет с исходником.

Я конечно попробую ебилд сделать. Сейчас читаю как это делать. Но как я понимаю ебилд это же просто сценарий для сборки пакета, т.е при сборки выплозут те же ошибки, что и при выполнении команды make tac_plus вручную?

Я создал ebuild изменив оригинальный. Он выглядит так.
cat /root/portage/net-nds/tac_plus/tac_plus-9a.ebuild

 # Copyright 1999-2008 Gentoo Foundation                                    
 # Distributed under the terms of the GNU General Public License v2         
 # $Header: /var/cvsroot/gentoo-x86/net-nds/tac_plus/tac_plus-4.0.4.15.ebuild,v 1.2 2008/05/11 13:11:58 ulm Exp $


DESCRIPTION="An updated version of Cisco's TACACS+ server"
HOMEPAGE="http://www.shrubbery.net/tac_plus/"             
SRC_URI="ftp://localhost/pub/tac_plus_9a.tar.gz"          

LICENSE="as-is"
SLOT="0"       
KEYWORDS="~x86"
IUSE="debug finger tcpd skey ldap"

DEPEND="skey? ( >=sys-auth/skey-1.1.5-r1 )
        tcpd? ( sys-apps/tcp-wrappers )"

src_compile() {
        econf 
                `use_with skey` 
                `use_with tcpd libwrap` 
                `use_with ldap ldap` 
                `use_enable finger` 
                `use_enable debug` 
                || die "econf failed"
        emake || die
}

src_install() {
        make DESTDIR="${D}" install || die
        dodoc CHANGES FAQ
        newinitd "${FILESDIR}/tac_plus.init" tac_plus
        newconfd "${FILESDIR}/tac_plus.confd" tac_plus
        insinto /etc/tac_plus
        newins "${FILESDIR}/tac_plus.conf" tac_plus.conf || die

Выполняю digest

#ebuild  /root/portage/net-nds/tac_plus/tac_plus-9a.ebuild digest
Appending /root/portage to PORTDIR_OVERLAY...
>>> Creating Manifest for /root/portage/net-nds/tac_plus

Устанавливаю

#ebuild /root/portage/net-nds/tac_plus/tac_plus-9a.ebuild install
Appending /root/portage to PORTDIR_OVERLAY...                                        
>>> Existing ${T}/environment for 'tac_plus-9a' will be sourced. Run                 
>>> 'clean' to start with a fresh environment.                                       
 * tac_plus_9a.tar.gz RMD160 SHA1 SHA256 size ;-) ...                                                                   [ ok ]
 * checking ebuild checksums ;-) ...                                                                                    [ ok ]
 * checking auxfile checksums ;-) ...                                                                                   [ ok ]
 * checking miscfile checksums ;-) ...                                                                                  [ ok ]
 * checking tac_plus_9a.tar.gz ;-) ...                                                                                  [ ok ]
 * CPV:  net-nds/tac_plus-9a
 * REPO:
 * USE:  elibc_glibc kernel_linux ldap tcpd userland_GNU x86
>>> Checking tac_plus_9a.tar.gz's mtime...
>>> WORKDIR is up-to-date, keeping...
>>> Compiling source in /var/calculate/tmp/portage/net-nds/tac_plus-9a/work ...
 * ERROR: net-nds/tac_plus-9a failed:
 *   no configure script found
 *
 * Call stack:
 *     ebuild.sh, line  54:  Called src_compile
 *   environment, line 259:  Called econf '--without-skey' '--with-libwrap' '--with-ldap' '--disable-finger' '--disable-debug'
 *     ebuild.sh, line 549:  Called die
 * The specific snippet of code:
 *              die "no configure script found"
 *
 * If you need support, post the output of 'emerge --info =net-nds/tac_plus-9a',
 * the complete build log and the output of 'emerge -pqv =net-nds/tac_plus-9a'.
 * This ebuild is from an overlay: '/root/portage/'
 * The complete build log is located at '/var/calculate/tmp/portage/net-nds/tac_plus-9a/temp/build.log'.
 * The ebuild environment file is located at '/var/calculate/tmp/portage/net-nds/tac_plus-9a/temp/environment'.
 * S: '/var/calculate/tmp/portage/net-nds/tac_plus-9a/work/tac_plus-9a'

Подскажите плиз, почему он ругается no configure script found?
Хотя все файлы там есть

 # ls /var/calculate/tmp/portage/net-nds/tac_plus-9a/work/tac_plus_v9a/
acct.c           config.sub    default_fn.c     generate_passwd.c  md4.h       pwlib.c      sendpass.c     tac_plus.sql
authen.c         configure     default_v0_fn.c  hash.c             md5.c       README.LDAP  skey_fn.c      tcpwrap.c
author.c         configure.in  do_acct.c        INSTALL            md5.h       README.PAM   stamp-h        time_limit.c
change.log       convert.pl    do_author.c      install-sh         mschap.h    regexp.3     tac_pam.c      time_limit.h
CHANGES          db.c          dump.c           ldap.c             packet.c    regexp.c     tac_plus.1     users_guide
choose_authen.c  db.h          enable.c         ldap.h             parse.c     regexp.h     tac_plus.c     utils.c
config.c         db_mysql.c    encrypt.c        Makefile.in        parse.h     regmagic.h   tac_plus.cfg
config.guess     db_null.c     expire.c         maxsess.c          programs.c  report.c     tac_plus.h
config.h.in      db_pgsql.c    expire.h         md4.c              pw.c        sendauth.c   tac_plus.init

Спасибо!

Проблема в том, что он даже так не собирается.

У меня выдает:

gcc      -g -O2  -DTACPLUS_PIDFILE=\"/var/run/tac_plus.pid\"      -c -o acct.o acct.c
In file included from acct.c:20:
tac_plus.h:711: ошибка: несовместимые типы для ‘sys_errlist’
/usr/include/bits/sys_errlist.h:28: ошибка: здесь была предыдущая декларация ‘sys_errlist’
acct.c: В функции ‘accounting’:
acct.c:69: предупреждение: несовместимая неявная декларация внутренней функции ‘free’
acct.c: В функции ‘account’:
acct.c:168: предупреждение: несовместимая неявная декларация внутренней функции ‘free’
make: *** [acct.o] Ошибка 1

Исходники принадлежат следующим пакетам:

$ equery b /usr/include/bits/sys_errlist.h
sys-libs/glibc-2.10.1-r1 (/usr/include/bits/sys_errlist.h)

$ equery b acct.c
sys-kernel/gentoo-sources-2.6.31-r10 (/usr/src/linux-2.6.31-gentoo-r10/kernel/acct.c)

Не говорит ли о том, что прога 2001-го года и исходнички для нее шибко новые?

Author : Harpes Patrick (patrick.harpes@tudor.lu)
         Jahnen Andreas (andreas.jahnen@tudor.lu)
Date   : 16.03.2001

В общем я нашел какая ошибка мешала удачно скомпилиться.
#./configure --with-ldap
#make tac_plus
Вывод make tac_plus содержал такие строчки

config.c:112: error: static declaration of ‘nopasswd_str’ follows non-static declaration
parse.h:21: error: previous declaration of ‘nopasswd_str’ was here

Надо отредактировать config.c. Ищем там 112 строчку и редактируем

До

static char *nopasswd_str = "nopassword";

После

char *nopasswd_str = "nopassword";

Потом вновь запускаю make tac_plus. Все проходит удачно.
#make install
Все ок.

Появиться время, соберу ebuld, чтобы не мучиться потом.
Спасибо большое за участие:)