找回密码
 注册
快捷导航
查看: 1375|回复: 2

【求助】有没有牛人给我改段tomato路由上用的程序

[复制链接] |自动提醒
阅读字号:

4

回帖

0

积分

22

资产值

入门会员 Rank: 1

注册时间
2008-11-28
发表于 2008-12-2 22:08:07| 字数 1,859| - 中国–山东–烟台 联通 | 显示全部楼层 |阅读模式
我用的是tomato的路由,现在我想在路由上建OPenvpn服务,但是我上网查了资料,好像网上的资料和介绍都是用静态key和ca验证的

大家可能听说过windows下有一种用user/password的验证的方式,不用为客户端颁发证书,只需要ca.KEY和ta.key就行了,然后在连接服务器的时候客户端输入用户和密码就可以。

至于OPenvpn服务器端的用户和密码的验证也有几种方式,一种是数据库,一种是调用外部程序,当然外部程序是windows平台运行的。在路由上用数据库显然行不通,我就想是不是用调用外部脚本的方式可以在路由实现user/password验证,从而摆脱多用户的时候要颁发多个证书,和吊销证书的玛麻烦。


windows的调用外部程序有两种一种是批处理bat文件,代码如下:
@echo off
rem get username and password from temp file as %1
set v=1
for /f  %%i  in (%1) do (
if !v!==1 (
set user=%%i
set v=2
)else set pass=%%i  
)

rem check username and password with password.txt file

for /f "tokens=1,2,3 delims=, " %%i in (password.txt) do if %%i==%user% if %%j==%pass% if %%k==1 exit /B 0

exit /B 1

以上的脚本就会到password.txt这个文件里去验证用户和密码是否正确并却用户是否可用,文件格式为
zzx,zzx,1
zzx分别为用户和密码,1表示启动,0标示禁用


还有一种是C语言编的可执行程序exe文件

源代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024

int checkpsw(char *username, char *password)
{
        FILE *f;
        char user[MAX+2], pass[MAX+2], active[MAX+2];
/*        printf("%s,%s\n",username,password); */
        if (!(f=fopen("password.txt", "r")))
        {
                perror("Open PASSWORD file error");
                printf("Use password.txt as the password file\n");
                printf("checkpsw for OpenVPN@WIN by ELM <wzk#wenzk.net>.\n");
                return(1);
        }
        while(!feof(f))
        {
                fscanf(f,"%s %s %s\n",user,pass,active);
/*                printf("user:%s pass:%s active:%s\n",user, pass, active); */
                if (!strcmp(username,user) && !strcmp(password,pass) && !strcmp(active,"1"))
                {
/*                        printf("OK\n"); */
                        fclose(f);
                        return (0);
                }
        }
        fclose(f);
        return (1);
}

void main()
{
        int status;
/*        printf("%s,%s",getenv("USERNAME"),getenv("PASSWORD")); */
        status=checkpsw(getenv("USERNAME"),getenv("PASSWORD"));
        return (status);
}
这个也是到password.txt里验证用户和密码,格式为
zzx          zzx                1

所以我就像,既然windows下可以调用外部脚本,那么路由的tomato也就是linux也可以调用,但是不知道linux下的用户和密码验证程序代码怎么编写,有么有高人帮忙写一段,谢谢了

或者谁告诉我linux下面C语言编程怎么弄,头文件怎么写?编译怎么编译?还有怎么执行?

[ Edited by  窒息的邂逅 on 2008-12-2 22:27 ]

1192

回帖

0

积分

3802

资产值

入门会员 Rank: 1

注册时间
2007-5-30
发表于 2008-12-2 22:54:26| 字数 20| - 中国–上海–上海–浦东新区 电信 | 显示全部楼层
*.*lll  好像是前些天发感情贴的新马甲
回复 支持 反对

使用道具 举报

4

回帖

0

积分

22

资产值

入门会员 Rank: 1

注册时间
2008-11-28
 楼主| 发表于 2008-12-2 23:02:36| 字数 87| - 中国–山东–烟台 联通 | 显示全部楼层
不是我吧大哥。。。。。。。。。。。。。。。。。。。
我一共发了一个帖子,是关于openvpn的windows下用户密码验证问题,后来没人给解决我自己搞定了


你看看我发的帖子

崩溃了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2025-2-9 11:23 , Processed in 0.092078 second(s), 27 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|在线留言|专门网

返回顶部