logo资料库

GoAhead 2.5源代码分析.pdf

第1页 / 共88页
第2页 / 共88页
第3页 / 共88页
第4页 / 共88页
第5页 / 共88页
第6页 / 共88页
第7页 / 共88页
第8页 / 共88页
资料共88页,剩余部分请下载后查看
GoAhead2.5 源代码分析 作者:soqsoq asp.c cgi.c ejlex.c Active server page support Standard CGI support Embedded JavaScript lexical analyser ejparse.c Embedded JavaScript parser and API emfdb.c WebServer database form.c In-memory forms processor with GCI support handler.c URL handler support main.c Main program and startup for operating system
rom.c ROM Web pages access module when not using a file system. security.c Security URL handler. Implements a basic security policy sock.c Generic socket support sockGen.c platform-independent socket support user management primary GoAhead WebServer code. Includes state machine. um.c webs.c 一一一一....Um.c((((用户管理 用户管理)))) 用户管理用户管理 umconfig.txt ---------------------------------------- TABLE=users ROW=0 name=admin password=Uz group=Administrator prot=1 disable=0 TABLE=groups ROW=0 name=Administrator priv=4 method=3 prot=1 disable=0 TABLE=access ROW=0 name=/main.html method=3 secure=0 group=Administrator -------------------------------------
GoAhead 提供了认证功能:主要是两种认证基本认证和摘要认证。摘要认证比基本认证更 安全些,所以选择摘要认证。 认证功能其实是用户管理功能的一部分。要配置认证功能,需要修改 umconfig.txt 文件, GoAhead 在启动时会读取该文件,实现认证功能。 文件大概情况如下: TABLE=users/*用户配置*/ ROW=0 name=raise/*用户名*/ password=Uz/*密码,加密的*/ group=RS/*用户所属的组*/ prot=1/*为 1 表示这个用户受保护不能被删除,0 表示可以删除*/ disable=0/*0 为使能*/ TABLE=groups/*组配置*/ ROW=0 name=RS/*组名*/ priv=4/* 用 户 组 的 访 问 权 限 , 可 以 是 0 , 1 , 2 , 4 分 别 代 表 AM_NONE,AM_READ,AM_WRITE,AM_ADMIN.这之间没有权限大小之分*/ method=3/*密码认证方法,可以是 0,1,2,3。0 什么你都没权访问,1 什么你都有权限。 2 密码与用户名简单加密传输(基本认证),3 密码和用户名经过更安全的加密(摘要认证)。 typedef enum { AM_NONE = 0, AM_FULL, AM_BASIC, AM_DIGEST, AM_INVALID } accessMeth_t; */ prot=1/*为 1 表示这个用户受保护不能被删除,0 表示可以删除*/ disable=0/*0 为使能*/ TABLE=access/*访问控制*/ ROW=0 name=/ /*要访问 index.htm,需要输入用户名、密码*/ method=3/*摘要认证*/ secure=0/*页面传输时,是否要加密,0 为不加密,如果不使用 SSL,这项是忽略的*/ group=RS/*可访问该文件的组*/ int umOpen() 功能:在数据库中注册 UM 表
说明: 1. 如果 didUM== -1,注册数据库,包括三个表:用户表、用户组表、访问控制表 2. 如果 saveFilename == NULL,分配一段内存,内存中存放文件名 umconfig.txt。 ----------------------------------------------------------------------------------------------------------------- void umClose() 功能:释放数据库中的 UM 表 说明: ----------------------------------------------------------------------------------------------------------------- int umCommit(char_t *filename) 功能:将数据库中的 table 保存到文件中 说明: ----------------------------------------------------------------------------------------------------------------- int umRestore(char_t *filename) 功能:将文件中 table 存放到数据库中 说明: ----------------------------------------------------------------------------------------------------------------- static int umEncryptString(char_t *textString) 功能:将字符串进行简单加密 说明: ----------------------------------------------------------------------------------------------------------------- static char_t *umGetFirstRowData(char_t *tableName, char_t *columnName) 功能:获得 table 名字为 tableName,列名为 columnName 的数据 说明:例如,前面的 umconfig.txt, password=Uz 的获得就是 tableName= users,columnName= password。 ----------------------------------------------------------------------------------------------------------------- static char_t *umGetNextRowData(char_t *tableName, char_t *columnName, char_t *keyLast) 功能:获得指定的 table 项的下一项。 说明: ----------------------------------------------------------------------------------------------------------------- int umAddUser(char_t *user, char_t *pass, char_t *group, bool_t prot, bool_t disabled) 功能:向用户 table 中添加一个用户。 说明:必须确保用户名不重复,用户组是存在的。 ----------------------------------------------------------------------------------------------------------------- int umDeleteUser(char_t *user) 功能:删除一个用户 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetFirstUser() 功能:获得第一个用户名 说明:
----------------------------------------------------------------------------------------------------------------- char_t *umGetNextUser(char_t *userLast) 功能:获得下一个用户名 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umUserExists(char_t *user) 功能:判断指定用户是否存在 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetUserPassword(char_t *user) 功能:获得指定用户的密码 说明: ----------------------------------------------------------------------------------------------------------------- int umSetUserPassword(char_t *user, char_t *pass) 功能:设置用户的密码 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetUserGroup(char_t *user) 功能:获得该用户所在的用户组 说明: ----------------------------------------------------------------------------------------------------------------- int umSetUserGroup(char_t *user, char_t *group) 功能:设置这个用户的用户组 说明: ----------------------------------------------------------------------------------------------------------------- umGetUserEnabled(char_t *user) bool_t 功能:该用是否使能 说明: ----------------------------------------------------------------------------------------------------------------- int umSetUserEnabled(char_t *user, bool_t enabled) 功能:设置该用户使能 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umGetUserProtected(char_t *user) 功能:该用户是否被保护,不能删除 说明: ----------------------------------------------------------------------------------------------------------------- int umSetUserProtected(char_t *user, bool_t protect) 功能:设置该用户被保护 说明: ----------------------------------------------------------------------------------------------------------------- int umAddGroup(char_t *group, short priv, accessMeth_t am, bool_t prot, bool_t disabled) 功能:添加一个组 table
说明: ----------------------------------------------------------------------------------------------------------------- int umDeleteGroup(char_t *group) 功能:删除一个组 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umGroupExists(char_t *group) 功能:该组是否存在 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umGetGroupInUse(char_t *group) 功能:该用户是否使能 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetFirstGroup() 功能:获得第一个用户组 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetNextGroup(char_t *groupLast) 功能:获得下一个用户组 说明: ----------------------------------------------------------------------------------------------------------------- accessMeth_t umGetGroupAccessMethod(char_t *group) 功能:获得用户组的方法 说明: ----------------------------------------------------------------------------------------------------------------- int umSetGroupAccessMethod(char_t *group, accessMeth_t am) 功能:设置用户组的方法 说明: ----------------------------------------------------------------------------------------------------------------- short umGetGroupPrivilege(char_t *group) 功能:获得用户组的访问权限 说明: ----------------------------------------------------------------------------------------------------------------- int umSetGroupPrivilege(char_t *group, short privilege) 功能:设置用户组的访问权限 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umGetGroupEnabled(char_t *group) 功能:获得用户组是否使能 说明: ----------------------------------------------------------------------------------------------------------------- int umSetGroupEnabled(char_t *group, bool_t enabled) 功能:设置用户组使能
说明: ----------------------------------------------------------------------------------------------------------------- bool_t umGetGroupProtected(char_t *group) 功能:获得用户组是否被保护 说明: ----------------------------------------------------------------------------------------------------------------- int umSetGroupProtected(char_t *group, bool_t protect) 功能:设置用户组被保护 说明: ----------------------------------------------------------------------------------------------------------------- int umAddAccessLimit(char_t *url, accessMeth_t am, short secure, char_t *group) 功能:添加访问限制,能访问哪个目录或文件 说明: ----------------------------------------------------------------------------------------------------------------- int umDeleteAccessLimit(char_t *url) 功能:删除访问限制 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetFirstAccessLimit() 功能:获得第一个用户的访问限制路径 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetNextAccessLimit(char_t *urlLast) 功能:获得指定访问限制路径的下一个访问限制路径 说明: ----------------------------------------------------------------------------------------------------------------- umAccessLimitExists(char_t *url) bool_t 功能:这个访问限制路径是否存在 说明: ----------------------------------------------------------------------------------------------------------------- accessMeth_t umGetAccessLimitMethod(char_t *url) 功能:获得这个路径的访问方法 说明:typedef enum { AM_NONE = 0, AM_FULL, AM_BASIC, AM_DIGEST, AM_INVALID } accessMeth_t; ----------------------------------------------------------------------------------------------------------------- int umSetAccessLimitMethod(char_t *url, accessMeth_t am) 功能:设置这个访问路径的方法 说明:
----------------------------------------------------------------------------------------------------------------- short umGetAccessLimitSecure(char_t *url) 功能:获得这个访问路径的安全设置 说明:加密还是不加密 ----------------------------------------------------------------------------------------------------------------- int umSetAccessLimitSecure(char_t *url, short secure) 功能:设置访问路径的安全标志 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetAccessLimitGroup(char_t *url) 功能:获得这个访问路径的组 说明: ----------------------------------------------------------------------------------------------------------------- int umSetAccessLimitGroup(char_t *url, char_t *group) 功能:设置访问路径的组 说明: ----------------------------------------------------------------------------------------------------------------- char_t *umGetAccessLimit(char_t *url) 功能:获得给定路径的所在的访问限制路径 说明: ----------------------------------------------------------------------------------------------------------------- accessMeth_t umGetAccessMethodForURL(char_t *url) 功能:获得给定路径的所在的访问限制方法 说明: ----------------------------------------------------------------------------------------------------------------- bool_t umUserCanAccessURL(char_t *user, char_t *url) 功能:判断这个路径用户是否能够访问 说明:1.用户要在 2.用户要能 3.用户组的权限要足够大,AM_READ,AM_WRITE,AM_ADMIN 都可 4.用户组要使能 5.用户组访问限制的方法必须是 AM_FULL、 AM_BASIC、AM_DIGEST 之一 6.在判断 url 是否属于访问限制路径,如果是,获得这个路径的访问方法和组,然后这个访 问方法不能是 AM_NONE,组必须和 user 的组一样。 ----------------------------------------------------------------------------------------------------------------- static bool_t umCheckName(char_t *name) 功能:检查字符串是否是有效的 说明: -----------------------------------------------------------------------------------------------------------------
分享到:
收藏