出于某种原因,当我链接到Oracle GSS时,开始表现不同(Solaris)

时间:2011-07-29 11:06:52

标签: c oracle solaris gssapi

我的测试程序运行正常。我可以创建一个客户端和一个服务器,并相互运行它们。我可以设置我的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命令中并不会破坏它。

任何帮助?

由于   - 理查德

3 个答案:

答案 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以来一直开放。可怕。