Добрый день. У меня возникла следующая проблема. Мне очень нужно установить 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);
Может кто подскажет где что можно подправить ? или какую версию такакса можно использовать вместо этого с минимальными переделками.
Заранее благодарю всех ответивших.
1. я бы посоветовал попробовать более позднюю версию и проверить заработает ли она с вашим биллингом.2. Какая версия gcc используется?
3. Можно поменять
>sigset_t nset = sigmask(SIGALRM) | sigmask(SIGUSR1);
на
sigset_t nset;а потом ниже после объявления всех переменных:
nset = sigmask(SIGALRM) | sigmask(SIGUSR1);
Спасибо что ответили! К сожалению не помогло.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#
а если заменить на
int nset = sigmask(SIGALRM) | sigmask(SIGUSR1);
>а если заменить на
>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;
}
странный софт, там #ifdef вокруг стр. 31 не наблюдается ?>31: static void login();
заменить на
static void login(struct authen_data *data, struct private_data *p);
если не поможет закоментировать эту строку совсем
>странный софт, там #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);и на этом я остановился
можно попробовать добавить -D_GNU_SOURCE в парамтеры gcc в make файле
Спасибо что ответили! К сожалению ошибка таже самая.
>Спасибо что ответили! К сожалению ошибка таже самая.а почему не попробовать перенести прямо бинарями на фришку? у нее ведь есть поддержка линуксячьих бинарей. на крайняк скомпилить под линуксом статически и так перенести
>а почему не попробовать перенести прямо бинарями на фришку? у нее ведь
>есть поддержка линуксячьих бинарей. на крайняк скомпилить под линуксом статически и
>так перенестиСпасибо что ответили!
Он счас и работает на фришке а хочется его перенести на линукс.