通过示例任务程序了解 Lotus Notes/Domino C API 8.0 中新的 ID Recovery API
本文介绍 Notes/Domino C API 8.0 中将要发布的 ID Recovery API。这些 API 的出现将使得合作伙伴以及 Notes 程序开发人员获得通过应用程序来加密、备份以及恢复 Notes ID 的能力,通过一些创造性的应用开发,就可以将繁琐的 ID 管理工作变得简洁而高效。
在本文中,我们将简单回顾 Domino 对于 Notes ID 备份和恢复等管理工作的基本流程,然后对 ID Recovery API 作简单介绍,最后通过一个应用程序实例,将这些 API 融合到一个服务器任务程序,展示了通过创造性的应用,ID Recovery API 将可能为客户带来的效率上的提升和崭新的体验。
对 Notes ID 备份恢复工作的简单回顾
Notes ID 的重要性是不言自喻的,没有了 Notes ID,将直接导致用户不能访问服务器、邮件以及用 Notes ID 加密过的私有信息。但是一个用户的 Notes ID 存在丢失或者损坏的可能性,更常见的情况是用户忘记了 Notes ID 的密码。为了防止这种危险状态,Domino 制定了一个相应的流程来进行 Notes ID 的备份和恢复。举一个简单的例子,假设有一个 Notes ID,它不含有恢复信息,现在要求为其添加正确的恢复信息,则相关流程如下:
在上面步骤之后,目标用户将会收到邮件,邮件里面包含最新的 ID 文件的恢复信息,用户选择菜单命令“Accept Recovery Information”就可以将恢复信息添加到自己的 Notes ID 文件当中。
现在我们假设用户突然忘记了密码,于是他向管理员申请密码恢复。
由于一个 ID 文件可能有多个 RA,每个 RA 都依次执行上述步骤,用户在获得足够多的 Recovery Password 之后,就可以在客户端登陆要求输入密码的时候选择“cancel”,然后选择“Try to recovery your password”选项,在弹出的对话框中,依次输入恢复密码,确认之后输入新密码,就可以完成密码的恢复工作。
至此,我们完成了整个的 Notes ID 的加密、备份以及恢复的流程。可以看出这个流程虽然完整,但是还是存在如下的缺憾:
请不必紧张, ID Recovery API 的出现可以使得 Domino 管理员们长吁一口气,通过这些 API,Notes 开发者能够以一种更便捷的方法来进行 Notes ID 的备份和恢复管理工作,下面我们就对这些 API 进行简单的介绍,并将开发一个简单的例子对其使用方法做进一步探讨,作者希望可以抛砖引玉,激发大家更加有创造性的应用。
在 Notes/Domino C API 8.0 中,将发布六个与 ID Recovery 相关的 API,关于这些 API 的详细介绍,请读者查阅 API 用户手册,本节只对它们作一个概括性的介绍:
输入某 ID 文件的位置以及其密码,该 API 对指定的 ID 文件进行加密,并保存到指定位置。在用户要求的情况下,也可以返回 Domino Server 配置中指定的接收 ID 文件的邮件数据库的地址。
输入某 ID 文件的位置以及其密码,该 API 会从指定的 ID 文件中抽取其中的 ID 恢复信息,然后创建一个 ID 备份文件,接着在指定的邮件数据库或者 mail.box 数据库中创建一个 mail note,将 ID 备份文件附着到 mail note 中,并发送邮件到 Domino Server 配置中指定的接收 ID 文件的邮件数据库。
如果输入 certifier ID 的句柄,该 API 会从 certifier ID 中抽取 ID 恢复信息并保存到 RECOVERY_INFO 数据结构中;如果输入保存有 certifier 记录的 note 句柄,该 API 会从此 note 的 ITEM_RECOVERY_INFO 域中抽取恢复信息并保存到 RECOVERY_INFO 数据结构中。
RECOVERY_INFO 的定义如下:
typedef struct { WORD Quorum; WORD NumberOfRAs; // RA 的个数(最多八个) WORD RALength[8]; // RA 的长度 char RAs[8][MAXUSERNAME+1]; //RA 的名字 WORD RecoveryPasswordLength; //恢复密码的长度 Char MailAddress[MAXPATH+1]; //接收ID文件的邮件数据库 char CustomMsg[MAX_IDRecovery_CustomMessage]; //定制的邮件体内容} RECOVERY_INFO; |
将从 SECGetRecoveryInfo 函数中得到的恢复信息导入到指定的 Notes ID 文件中去。
根据输入的 RA(Recovery Authority)和加密过的 ID 备份文件,该 API 会从 ID 备份文件中获取相应的恢复密码。
根据输入的多个 ID 恢复密码,恢复指定 ID 并为其设置新的指定密码。
现在我们已经了解了 ID Recovery API 的基本功能,接下来,我们就用一个简单的例子来看看这样的 API 可以为我们带来什么样的工作效率上的提升以及应用上的创新。
首先假设由于某些原因,某公司需要对大量的 Notes ID 进行加密备份,如果采用本文第一部分介绍的手工管理的方式,必然耗费大量的时间。现在我们使用 ID Recovery API 来设计一个简单的应用,来实现这个流程的程序化和自动化。为了使本例尽量简单,我们对一些问题进行了简化和省略,在真正的系统实现的时候,还有许多其它的工作要做,譬如说对 notes ID 的密码进行加密保护以及解密等。
整个系统的架构如图3所示:
系统设计思想如下:
表单设计说明:
SECBuildEncryptedBackupIDFile
函数对 ID 文件进行加密备份。加密之后的备份文件,可以保存到安全的地方,以备不测之需。 有关 Domino 任务程序的编程规范以及其它相关信息,请参考 Notes/Domino C API 的参考文档以及随 API Toolkit 一起发布的程序示例。本实例中的任务程序的设计结构可以参考如下代码:
//包含 C 头文件……………………//包含 Notes C API 头文件……………………char *DB_NAME="IDStore.nsf";char *view_name = "IDWaitProcess";STATUS doJob(char *);void printAPIError(STATUS error);STATUS LNPUBLIC note_action(VOID *db_handle, SEARCH_MATCH far *pSearchMatch, ITEM_TABLE *summary_info);STATUS LNPUBLIC AddInMain (HMODULE hModule, int argc, char *argv[]) // Server Task 入口点{ /* 局部变量声明. */ STATUS error = 0; /* return code from API calls */ HANDLE hOldStatusLine; /* handle to initial default status line*/ HANDLE hStatusLineDesc; /* handle to new default status line */ HMODULE hMod; /* add-in task's module handle */char statusline[] = "Build encrypted back up ID file from IDStire.nsf"; //服务器任务初始化AddInQueryDefaults (&hMod, &hOldStatusLine); AddInDeleteStatusLine (hOldStatusLine); hStatusLineDesc = AddInCreateStatusLine(statusline); AddInSetDefaults (hMod, hStatusLineDesc); /* 开始循环,当 AddInIdle 函数返回 TRUE 时,退出循环 */ while (!AddInIdle()) { /* For non-preemptive operating systems, give up control to other tasks. OSPreemptOccasionally will do nothing in preemptive operating systems. */ OSPreemptOccasionally(); /*每隔三分钟检查 IDStore.nsf 数据库,查看是否有新的未处理文档出现*/ if (AddInMinutesHaveElapsed(3)) { doJob(DB_NAME); } } /* 结束循环 */ return (NOERROR);}//执行任务STATUS doJob(char *db_name){ DBHANDLE db_handle; NOTEHANDLE note_handle; NOTEID view_id; STATUS error = 0; //打开 "IDStore.nsf" 数据库 if (error = NSFDbOpen(db_name, &db_handle)) { printAPIError(error); } //搜索 IDStore.nsf 数据库,如果有新的未处理文档出现,采取行动处理它 if (error = NSFSearch ( db_handle, /* database handle */ NULL, /* selection formula */ view_name, /* title of view in selection formula */ 0, /* search flags */ NOTE_CLASS_DOCUMENT, /* note class to find */ NULL, /* starting date (unused) */ note_action, /* action routine for notes found */ &db_handle, /* parameter to action routine */ NULL)) /* returned ending date (unused) */ { printAPIError(error); }NSFDbClose(db_handle); return error;}//打印 API 函数返回的错误值对应的文本信息void printAPIError(STATUS error){ WORD len = 0; char msgtxt[MAXUSERNAME] = {0}; len = OSLoadString(NULL, error, msgtxt, MAXUSERNAME-1); AddInLogMessageText(msgtxt, NOERROR);}//NSFSearch 的回调函数,处理找到的文档STATUS LNPUBLIC note_action(VOID *db_handle, SEARCH_MATCH far *pSearchMatch, ITEM_TABLE *summary_info){ STATUS err = NOERROR; /*对于新的未处理文档采取如下动作 1) 提取 ID 文件 2) 得到 ID 文件的密码 3) 调用 ID recovery API 来创建加密备份文件,并加以保存 4) 修改当前处理文档的状态 */ //具体的代码请参考附件 processid.cpp return err;} |
本文介绍了在 Notes/Domino C API 8.0 中将要发布的 ID Recovery API,并且用一个简单的应用实例展示了这些 API 可能带来的效率和效益上的提升,我们希望读者能从本文中有所收获,并根据现实中的具体问题实现更有创造性的应用。
名字 | 大小 | 下载方法 |
---|---|---|
processid.zip | 3 KB | HTTP |
关于下载方法的信息 |
王磊建,IBM WPLC Toolkit Team 软件工程师,负责 C API 的相关工作, 电子邮箱:wangleij@cn.ibm.com。 |
Albert Hsieh,IBM WPLC Toolkit Team Leader,电子邮箱:hsiehcy@tw.ibm.com。 |
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |