Redmen
NoDeny
Ветеран
Карма: 62
Offline
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #30 : 04 Ноября 2019, 17:31:29 » |
|
Без разделения работает. Но при других процедурах.
Надоело! Выложи процедуры, которые работают! проще самому сделать, чем это терпеть
|
|
|
Записан
|
|
|
|
Jovani
NoDeny
Постоялец
Карма: -9
Offline
Сообщений: 234
|
|
« Ответ #31 : 04 Ноября 2019, 18:38:31 » |
|
С такими без разделителя работает. PPPOE Mikrotik DROP PROCEDURE IF EXISTS `radcheck`; DELIMITER $$ CREATE PROCEDURE `radcheck` (IN login VARCHAR(64)) BEGIN SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'xxxxxxx') AS Value,':=' FROM users WHERE name=login; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; SELECT get_ip(usr_id) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; SELECT get_ip(usr_id) INTO usr_ip; CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radstop`; DELIMITER $$ CREATE PROCEDURE `radstop`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1; END$$ DELIMITER ; И такими без разделителя работает MPD5 BEGIN SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd, 'xxxxxxx') AS Value,':=' FROM users u WHERE name=login AND IF(only_one_session < 1, true, NOT EXISTS (SELECT 1 FROM v_ips WHERE uid=u.id AND auth=1 AND last>(UNIX_TIMESTAMP() - 300) LIMIT 1) ); END BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; SELECT id INTO usr_id FROM users WHERE name=login AND password=AES_DECRYPT(passwd, 'xxxxxxxx') LIMIT 1; IF( usr_id IS NOT NULL ) THEN SELECT get_ip(usr_id) INTO usr_ip; SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END IF; END BEGIN DECLARE usr_id INT; DECLARE auth_prop VARCHAR(255); DECLARE start_auth INT UNSIGNED; SELECT u.id, i.properties, i.start INTO usr_id, auth_prop, start_auth FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip AND i.auth=1; IF( usr_id IS NOT NULL ) THEN INSERT INTO auth_log (uid, ip, start, end, properties) VALUES (usr_id, INET_ATON(usr_ip), start_auth, UNIX_TIMESTAMP(), auth_prop); DELETE FROM auth_now WHERE ip=usr_ip LIMIT 1; END IF; END BEGIN IF( SELECT 1 FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip ) THEN CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END IF; UPDATE users SET name=login WHERE name=login LIMIT 1; END
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #32 : 04 Ноября 2019, 23:30:28 » |
|
Как я вижу, ты используешь 3й радиус, но замечания по его настойке не учтены. Ознакомься: в частности: Я нашел причину, почему не получилось проверить пароль - новый радиус в ответе процедуры radcheck требует :=, а не == Радиус 2 и 3 сильно отличаются, я не могу написать стопицот настроек и под тот и тот вариант, надо самому смотреть отличия и вносить коррективы P.S. Вот я и понял откуда в radcheck у тебя в конце 0 - это фича биллинга чисто для 3го радиуса. Ты ее тоже можешь заюзать. Если не получится, я попробую перевести под 3й радиус завтра и этот модуль.
|
|
|
Записан
|
|
|
|
Jovani
NoDeny
Постоялец
Карма: -9
Offline
Сообщений: 234
|
|
« Ответ #33 : 05 Ноября 2019, 07:20:09 » |
|
Да у меня Radius3. Стас я это читал. В самом начале когда с этим модулем тр***ся, пробовал ставить :=, кажется тогда логинюсь даже с неправильным паролем. И оставил так ==. Уже столько вариантов попробовал, что путаюсь если честно... Если не получится, я попробую перевести под 3й радиус завтра и этот модуль. Буду тебе очень благодарен за помощь.
|
|
|
Записан
|
|
|
|
Redmen
NoDeny
Ветеран
Карма: 62
Offline
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #34 : 05 Ноября 2019, 11:07:44 » |
|
Пробуй: # Для некоторых насов нужно поменять разделитель с '+' на '=2B'
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radcheck`(IN `login` VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd,'xxxxxxxxxx') AS Value,':=' FROM users WHERE name=real_login; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radreply`(IN `login` VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP FUNCTION IF EXISTS `get_ip_by_num`; DELIMITER $$ CREATE FUNCTION `get_ip_by_num` ( user_id INTEGER UNSIGNED, num INTEGER ) RETURNS VARCHAR(15) NO SQL BEGIN DECLARE user_ip VARCHAR(15); DECLARE real_ip VARCHAR(15);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type = 'static' AND tags LIKE CONCAT('%,', num, ',%') LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type='static' LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;
SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%'; UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300 WHERE id = (SELECT id FROM ( ( SELECT id, uid FROM ip_pool WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) UNION ( SELECT id, uid FROM ip_pool WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) ) AS tbl ORDER BY uid DESC LIMIT 1);
SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id LIMIT 1; RETURN user_ip; END$$ DELIMITER ;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `radupdate`(IN `login` VARCHAR(64), IN `ip` VARCHAR(16), IN `properties` VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; DECLARE ip_index INT ; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ;
|
|
|
Записан
|
|
|
|
Jovani
NoDeny
Постоялец
Карма: -9
Offline
Сообщений: 234
|
|
« Ответ #35 : 05 Ноября 2019, 15:52:27 » |
|
Пробовал разные варианты, вот логи С + такая ошибка (0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano=2B1') (0) sql: Executing select query: call radcheck('vano=2B1') (0) sql: WARNING: Cannot do check groups when group_membership_query is not set rlm_sql (sql): Released connection (0) (0) [sql] = notfound (0) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type (0) pap: WARNING: Authentication will fail unless a "known good" password is available (0) [pap] = noop (0) chap: &control:Auth-Type := CHAP (0) [chap] = ok (0) [mschap] = noop (0) } # authorize = ok (0) Found Auth-Type = CHAP (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Auth-Type CHAP { (0) chap: ERROR: &control:Cleartext-Password is required for authentication (0) [chap] = fail (0) } # Auth-Type CHAP = fail (0) Failed to authenticate the user (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds Заменил + на =2B 0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano=2B1') (0) sql: Executing select query: call radcheck('vano=2B1') (0) sql: User found in radcheck table (0) sql: Conditional check items matched, merging assignment check items (0) sql: Cleartext-Password := "1111111" (0) sql: EXPAND call radreply('%{User-Name}','%{User-Password}') (0) sql: --> call radreply('vano=2B1','') (0) sql: Executing select query: call radreply('vano=2B1','') (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000 (0) sql: ERROR: SQL query error getting reply attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000): [vano+1] (from client irsh port 15728865 cli B0:5A:DA:3D:E7:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
С такой процедурой
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '=2B', 1) INTO real_login; IF login REGEXP '[=2B][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ; Заменил + на - 0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/nodeny (0) authorize { rlm_sql (sql): Reserved connection (0) (0) sql: EXPAND call radcheck('%{User-Name}') (0) sql: --> call radcheck('vano-1') (0) sql: Executing select query: call radcheck('vano-1') (0) sql: User found in radcheck table (0) sql: Conditional check items matched, merging assignment check items (0) sql: Cleartext-Password := "111111" (0) sql: EXPAND call radreply('%{User-Name}','%{User-Password}') (0) sql: --> call radreply('vano-1','') (0) sql: Executing select query: call radreply('vano-1','') (0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000 (0) sql: ERROR: SQL query error getting reply attributes rlm_sql (sql): Released connection (0) (0) [sql] = fail (0) } # authorize = fail (0) Invalid user (sql: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2): 42000): [vano-1] (from client irsh port 15728866 cli B0:5A:DA:3D:E7:5D) (0) Using Post-Auth-Type Reject (0) Post-Auth-Type sub-section not found. Ignoring. (0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny (0) Delaying response for 1.000000 seconds
С такой процедурой
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL;
SELECT SUBSTRING_INDEX(login, '-', 1) INTO real_login; IF login REGEXP '[-][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'-','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF;
SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip;
SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #36 : 15 Ноября 2019, 18:56:17 » |
|
Я что-то не пойму, ты снова пытаешься на угад настраивать? Incorrect number of arguments for PROCEDURE 3newnodeny.radreply; expected 1, got 2 мы же обсуждали эту ошибку. call radreply('%{User-Name}','%{User-Password}') в доке для 3-го радиуса это используется в процедуре, ты не использовал
|
|
|
Записан
|
|
|
|
Jovani
NoDeny
Постоялец
Карма: -9
Offline
Сообщений: 234
|
|
« Ответ #37 : 19 Ноября 2019, 10:43:11 » |
|
Все, разобрались. Большое спасибо Redmen за помощь в решении.
|
|
|
Записан
|
|
|
|
k291
|
|
« Ответ #38 : 22 Ноября 2019, 13:34:57 » |
|
Что надо сделать, чтобы модуль работать с DHCP+Mikrotik ? Может есть процедуры "Mikrotik+Radius+DHCP+Привязка ip к login"
На сейчас, В билинге клиенту прописываю несколько МАСов и IP. В настройках МАСа, назначаю разные статические IP. Но при авторизации клиента в админке у всех МАСов становится одинаковый IP.
|
|
|
Записан
|
|
|
|
|