我的测试程序运行正常。我可以创建一个客户端和一个服务器,并相互运行它们。我可以设置我的KRB5_CONFIG环境变量并使用本地配置进行测试。
出于某种原因,当我将代码放入我们的生产软件时,它会失败。即使我将main()函数剥离为仅使用硬编码名称调用gss_import_name(),我最终会收到消息“无法打开配置文件”。
如果我运行truss,那么我会看到很多Oracle正在进行中。它试图打开许多不同的Oracle跟踪文件。它也试图打开
/krb5/krb.conf
而不是我指定的文件。
就好像Oracle在我们庞大而复杂的构建系统中给了我们错误的gss,或者其他选项。我注意到-L / usr / lib / sparcv9虽然这是在我的-lgss之后,如果这很重要(因为我经常在C中工作太久了!)。该目录中的libgss.so.1大于/ usr / lib中的libgss.so.1 - 尽管将该选项放入我的测试程序的link命令中并不会破坏它。
任何帮助?
由于 - 理查德
答案 0 :(得分:1)
这解决了我们看来类似的问题:
export KRB5_CONFIG=/etc/krb5.conf
如果尚未设置此env var,则可能会错误地设置此env var。
$ grep -r KRB5_CONFIG $ORACLE_HOME
Binary file /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so matches
Binary file /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so.11.1 matches
$ grep -r '/krb5/krb.conf' $ORACLE_HOME
Binary file /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so matches
Binary file /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so.11.1 matches
答案 1 :(得分:0)
我发现Oracle库包含GSS的实现。为了使我的代码工作,我确保在链接任何Oracle库之前链接“-lgss”。
我没有测试过这是否会在单点登录中扰乱Oracle,因为我们使用带有用户名和密码的Oracle。这很好。
答案 2 :(得分:0)
我在HP-UX 11.31上遇到了与Oracle 11.2.0.4.0相同的问题,并且几乎整整一天都浪费了。实际上,糟糕的Oracle lib使用putenv
来/opt/krb5/krb.conf
,并且来自Richard Corfield的提示使应用程序崩溃。唯一的解决方法是创建符号链接。我已经针对该问题与Oracle创建了服务请求。
更新(2014-06-02):我收到了Oracle的更新。他们证实了这个错误。似乎有一个私有的GSS-API正在重新定义符号。
Bug 10184681 - ORACLE NEEDS TO USE VERSIONED SYMBOLS TO AVOID EXTERNAL SYMBOL CONFLICTS
此问题自2010-10以来一直开放。可怕。