如何通过C ++ API授权Lotus Notes数据库?

时间:2011-10-17 03:47:21

标签: lotus-notes

我运行以下代码并获取输入密码的对话框。

    LNNotesSession session;
    LNDatabase db;
    LNSetThrowAllErrors(TRUE);
    LNFormArray forms;
    LNIDFile idfile;
    LNCertifier cert;
    LNDatetime expired;

    try {
        session.Init();

        session.GetDatabase("names.nsf", &db, "ipanema");
        db.Open();
        db.GetForms(&forms);
        for (int i = 0; i < forms.GetCount(); i++) {
            LNForm form = forms[i];
            form.Open();
            LNString name = form.GetName();
            form.Close();
        }
        db.Close();
        session.Term();

    } catch(LNSTATUS error) {
        char errorBuf[LN_ERROR_MESSAGE_LENGTH];
        LNGetErrorMessage(error, errorBuf);
        MessageBox(NULL, errorBuf, "Lotus Notes Errors", MB_OK);
    }

enter image description here

如何通过代码而非手动输入密码?

3 个答案:

答案 0 :(得分:1)

nextpwd选项可以提供帮助。描述here

答案 1 :(得分:0)

我过去使用过其他几个选项:一个是为了运行该代码而创建一个ID,并在没有密码的情况下创建它。然后我使用其他安全手段来保护该ID文件。

另一个选项是启用客户端单点登录并在登录的Windows用户和Notes用户之间同步密码。 在这种情况下工作,但我只是用它来绕过Notes客户端本身的提示。

答案 2 :(得分:0)

答案取决于具体情况。

  1. 如果代码在用户工作站上运行,并且您不希望在用户登录Notes时出现密码提示,但您确实希望在用户未登录时显示密码提示在,然后在Notes客户端中有一个内置选项。在Notes 8.x中,它位于“用户安全性”对话框中,选项标签为“不提示输入其他基于Notes的程序的密码”。此选项后面有一个小标签,表示“降低了安全性”,但所有绕过密码提示的可能方法都可以做到这一点。

  2. 如果代码在用户工作站上运行,并且代码仅在用户实际登录到窗口时运行,那么肯的第二个建议可能是合适的。问题是,Notes客户端的单点登录功能通常不会根据具体情况激活,并且您的组织的安全性,Domino和Windows管理员必须参与其中。

  3. 如果代码在没有用户例行访问的锁定机器上运行,那么Ken的第一个建议是合适的,只要您的组织的安全人员可以使用未通过身份验证的ID文件即可。

  4. 在几乎所有其他情况下,Jasper建议使用Notes C API中的Extension Manager钩子是合适的,并且C ++ API工具包中包含的示例extpwd.c代码是一个良好的开端。但是,不要只将密码存储在名为password.txt的文件中!无论您在何处存储密码,都需要加密密码,否则这与使用未密码的ID文件一样不安全。 (说实话,即使加密存储也不是很好的安全措施,因为分析代码的人可能会恢复密钥,但这是我们为方便起见而做出的妥协之一。)