2011-10-17 129 views
0

我运行以下代码并获取输入密码的对话框。如何通过C++ API授权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

我怎样才能通过代码而不是手动输入密码?

回答

1

的nextpwd选项可以帮助。描述为here

0

有一对夫妇的我已经在过去使用其他选项:一个是创建运行代码的目的,一个ID,并且没有密码创建它。然后我使用其他的安全手段来保护这个ID文件。

另一种选择是让客户单点登录和同步之间的密码,您的登录窗口用户和Notes用户。 应该在这种情况下工作,但我只用它来绕过Notes客户端本身的提示。

0

答案取决于具体情况。

  1. 如果代码在用户的工作站上运行,而你不想当用户登录到Notes出现密码提示,但你希望使用密码提示出现,如果用户不登录,那么Notes客户端中就有一个内置选项。在Notes 8.x中,它位于用户安全对话框中,并且选项标签为“不提示其他基于Notes的程序输入密码”。有这个选项,上面写着“降低安全性,”过了一小标签,但的绕过密码的可能途径的所有提示做。

  2. 如果代码在用户的工作站上运行,并且代码将只运行在用户实际登录到Windows,然后肯的第二个建议是合适的。问题在于,Notes客户端的单一登录功能通常不会逐个激活,并且您的组织的安全性,Domino和Windows管理员必须参与其中。

  3. 如果代码在没有用户常规访问的锁定机器上运行,那么Ken的第一个建议是适当的,只要您的组织的安全人员对于具有未被盗用的ID文件可以。

  4. 在几乎所有其他情况下,Jasper建议使用Notes C API中的扩展管理器钩子是合适的,并且C++ API工具箱中包含的示例extpwd.c代码是一个很好的开始。但是不要将密码存储在一个名为password.txt的文件中!无论您存储在哪里,都需要加密密码,否则这与使用未经密码的ID文件一样不安全。 (事实上​​,即使将它加密存储也不是很好的安全实践,因为密钥可能可以通过分析您的代码来恢复,但这是我们为了方便而做出的妥协之一。)