URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 10945
[ Назад ]

Исходное сообщение
"Вопрос по tacacs+, помогите пожалуйста"

Отправлено bss , 07-Июл-06 10:37 
Добрый день. У меня возникла следующая проблема. Мне очень нужно установить tacacs+ (tac_plus -v говорит tac_plus version 3.0.9, дистрибутив называется at+.n) на linux slakware 2.4.31. Хочется именно этот tacacs потому как он работает на Free Bsd, работает он с самописным билингом и у него большая абонентская база. Вот и хочется все это разом и перенести. Как я понимаю у более поздних такаксов формат базы другой да и с билингом они могут по другому работать. Так вот пытаюсь я его откомпилировать а в ответ получаю ошибку:

root@tiss:/home/bs/at+.n# make
gcc -pipe -O2 -g    -DLINUX -DGLIBC -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o tac_plus.o tac_plus.c
tac_plus.c:24: error: invalid initializer
make: *** [tac_plus.o] Error 1
root@tiss:/home/bs/at+.n#

В 24 строке в файле tac_plus.c находится вот эта строчка:

sigset_t nset = sigmask(SIGALRM) | sigmask(SIGUSR1);

Может кто подскажет где что можно подправить ? или какую версию такакса можно использовать вместо этого с минимальными переделками.
Заранее благодарю всех ответивших.


Содержание

Сообщения в этом обсуждении
"Вопрос по tacacs+, помогите пожалуйста"
Отправлено citrin , 07-Июл-06 13:12 
1. я бы посоветовал попробовать более позднюю версию и проверить заработает ли она с вашим биллингом.

2. Какая версия gcc используется?

3. Можно поменять

>sigset_t nset = sigmask(SIGALRM) | sigmask(SIGUSR1);

на
sigset_t nset;

а потом ниже после объявления всех переменных:

nset = sigmask(SIGALRM) | sigmask(SIGUSR1);


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено bss , 08-Июл-06 20:53 
Спасибо что ответили! К сожалению не помогло.

1. Я тоже думаю попробовать более позднюю версию, но их так много, что глаза разбегаются. У меня собрался почти с пол пинка вот этот такакс:
ftp://ftp-eng.cisco.com/pub/tacacs/tac_plus.F4.0.4.alpha.tar.Z , но вот настораживает что в нем я не увидел dynipd и утилиты tdb.

2. gcc version 3.3.6
3. поменял, стало вот так:

sigset_t nset;

struct session session;     /* session data */

static char pidfilebuf[75]; /* holds current name of the pidfile */

h_list_usernames *g_list_usernames = 0;

nset = sigmask(SIGALRM) | sigmask(SIGUSR1);

При попытке компиляции вылазит куча ошибок:

root@tiss:/home/bs/at+.n# make
gcc -pipe -O2 -g    -DLINUX -DGLIBC -D_GNU_SOURCE -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o tac_plus.o tac_plus.c
tac_plus.c:32: error: conflicting types for `nset'
tac_plus.c:24: error: previous declaration of `nset'
tac_plus.c:32: warning: data definition has no type or storage class
tac_plus.c: In function `alarm_hdl':
tac_plus.c:104: warning: passing arg 2 of `sigprocmask' from incompatible pointer type
tac_plus.c:107: warning: passing arg 2 of `sigprocmask' from incompatible pointer type
tac_plus.c: In function `usr1_hdl':
tac_plus.c:114: warning: passing arg 2 of `sigprocmask' from incompatible pointer type
tac_plus.c:117: warning: passing arg 2 of `sigprocmask' from incompatible pointer type
make: *** [tac_plus.o] Error 1
root@tiss:/home/bs/at+.n#


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено daff , 09-Июл-06 06:31 
а если заменить на
int nset = sigmask(SIGALRM) | sigmask(SIGUSR1);

"Вопрос по tacacs+, помогите пожалуйста"
Отправлено bss , 09-Июл-06 16:25 
>а если заменить на
>int nset = sigmask(SIGALRM) | sigmask(SIGUSR1);

Спасибо! Так компиляция прошла дальше и tac_plus.c откомпилировался, но вылезла другая ошибка:

make@tiss:/home/bs/at+.n#
gcc -pipe -O2 -g    -DLINUX -DGLIBC -D_GNU_SOURCE -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o default_fn.o default_fn.c
default_fn.c:31: warning: static declaration for `login' follows non-static
default_fn.c: In function `default_fn':
default_fn.c:129: warning: passing arg 1 of `login' from incompatible pointer type
default_fn.c:129: error: too many arguments to function `login'
default_fn.c: In function `login':
default_fn.c:183: error: argument `data' doesn't match prototype
default_fn.c:31: error: prototype declaration
default_fn.c:183: error: number of arguments doesn't match prototype
default_fn.c:31: error: prototype declaration
make: *** [default_fn.o] Error 1
root@tiss:/home/bs/at+.n#

Привожу указанные строки:

31:  static void login();
129: login(data, p);


     static void
     login(data, p)
         struct authen_data *data;
         struct private_data *p;
183: {
         char *name, *passwd, *cfg_passwd;
         int pwlen;

         name = data->NAS_id->username;

         if (!name[0]) {
             /* something awful has happened. Give up and die */
             report(LOG_ERR, "%s %s: no username for login",
                    session.peer, session.port);
             data->status = TAC_PLUS_AUTHEN_STATUS_ERROR;
             return;
    }


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено daff , 10-Июл-06 16:54 
странный софт, там #ifdef вокруг стр. 31 не наблюдается ?

>31:  static void login();
заменить на
static void login(struct authen_data *data, struct private_data *p);
если не поможет закоментировать эту строку совсем


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено bss , 11-Июл-06 09:05 
>странный софт, там #ifdef вокруг стр. 31 не наблюдается ?
>
>>31:  static void login();
>заменить на
>static void login(struct authen_data *data, struct private_data *p);
>если не поможет закоментировать эту строку совсем


нет #ifdef вокруг стр. 31 не наблюдается, там вот так:

static void chap_verify();
static void arap_verify();
static void pap_verify();
static void login();

если просто закомментировать строку то вываливалось много ошибок, после того как я заменил на static void login(struct authen_data *data, struct private_data *p); выскочила вот эта ошибка:

root@tiss:/home/bs/at+.n# make
gcc -pipe -O2 -g    -DLINUX -DGLIBC -D_GNU_SOURCE -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o default_fn.o default_fn.c
default_fn.c:32: error: conflicting types for `login'
/usr/include/utmp.h:46: error: previous declaration of `login'
make: *** [default_fn.o] Error 1
root@tiss:/home/bs/at+.n#

после того как я залез в utmp.h и закоментировал 46 строку, вот эту:
extern void login (__const struct utmp *__entry) __THROW;

компиляция прошла дальше и остановилась на:

root@tiss:/home/bs/at+.n# make
gcc -pipe -O2 -g    -DLINUX -DGLIBC -D_GNU_SOURCE -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o crypt.o crypt.c
crypt.c:922: error: conflicting types for `encrypt'
/usr/include/unistd.h:1024: error: previous declaration of `encrypt'
make: *** [crypt.o] Error 1
root@tiss:/home/bs/at+.n#

после того как я залез в файл unistd.h и аналогичным образом закоментировал 1024 строку (вопрос можно ли так делать) компиляция прошла дальше и остановилась на :

root@tiss:/home/bs/at+.n# make
gcc -pipe -O2 -g    -DLINUX -DGLIBC -D_GNU_SOURCE -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" -DWHOLOG=\"/var/run/utmp\" -DMAXSESS -DAEXT -DESERV -DONEVENT   -c -o dbstuff.o dbstuff.c
dbstuff.c: In function `db_register':
dbstuff.c:46: error: `O_SHLOCK' undeclared (first use in this function)
dbstuff.c:46: error: (Each undeclared identifier is reported only once
dbstuff.c:46: error: for each function it appears in.)
dbstuff.c:52: error: too few arguments to function
dbstuff.c: In function `db_replace':
dbstuff.c:87: warning: passing arg 2 of pointer to function from incompatible pointer type
dbstuff.c:87: error: too few arguments to function
dbstuff.c: In function `db_closeall':
dbstuff.c:154: error: too few arguments to function
dbstuff.c: In function `db_inuse':
dbstuff.c:169: error: too few arguments to function
dbstuff.c: In function `db_checkmt':
dbstuff.c:195: error: too few arguments to function
dbstuff.c:196: error: `O_SHLOCK' undeclared (first use in this function)
make: *** [dbstuff.o] Error 1
root@tiss:/home/bs/at+.n#

указанные строки содержат:

46: hdl = (DB *) dbopen(dbname, O_RDONLY|O_SHLOCK, 0555, DB_HASH, NULL);
52: fstat((*hdl->fd)(hdl), &dp->st);
87: if ((ret = (*db->get) (db, k, d, 0)) < 0) {
154: (*dp->hdl->close) (dp->hdl);
169: if (dp->hdl && (*dp->hdl->fd) (dp->hdl) == desc)
195: (*dp->hdl->close) (dp->hdl);
196:  dp->hdl = (DB *) dbopen(dp->dbname, O_RDONLY|O_SHLOCK,
                                0555, DB_HASH, NULL);

и на этом я остановился


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено daff , 07-Июл-06 17:27 
можно попробовать добавить -D_GNU_SOURCE в парамтеры gcc в make файле


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено bss , 08-Июл-06 20:55 
Спасибо что ответили! К сожалению ошибка таже самая.



"Вопрос по tacacs+, помогите пожалуйста"
Отправлено alchie , 08-Июл-06 21:19 
>Спасибо что ответили! К сожалению ошибка таже самая.

а почему не попробовать перенести прямо бинарями на фришку? у нее ведь есть поддержка линуксячьих бинарей. на крайняк скомпилить под линуксом статически и так перенести


"Вопрос по tacacs+, помогите пожалуйста"
Отправлено bss , 09-Июл-06 15:51 
>а почему не попробовать перенести прямо бинарями на фришку? у нее ведь
>есть поддержка линуксячьих бинарей. на крайняк скомпилить под линуксом статически и
>так перенести

Спасибо что ответили!
Он счас и работает на фришке а хочется его перенести на линукс.