【问题标题】:YAWS: porting from 1.87 to 2.0.4YAWS:从 1.87 移植到 2.0.4
【发布时间】:2017-07-19 03:05:02
【问题描述】:

我决定升级我的系统,其中运行 Erlang 并带有基于 YAWS 的 Web 界面。我已经重新编译了 Erlang 部分,并测试了 Web 部分,在 YAWS 处理的登录过程中出现错误。

特别是我在嵌入式模式下使用YAWS,配置是:

#sconf{listen       = Ip,
         servername   = HostName,
         port         = get_port(),
         docroot      = get_docroot(),
         errormod_404 = ?MODULE,
         partial_post_size = 1000000,
         authdirs = [#auth {dir = ["/"], realm = Realm, type="Basic", users = [{User, Pwd}]}]}

get_port() 和 get_docroot() 是正确的,值来自配置文件作为 User 和 Pwd 值。

当我连接到网络界面时,浏览器会显示登录表单,所以我插入了正确的帐户,但当我确认发生了什么时:

Yaws process died: {function_clause,
                   [{yaws_server,'-handle_auth/4-fun-1-',
                        [{"admin","admin"}],
                        [{file,"yaws_server.erl"},{line,2175}]},
                    {lists,any,2,[{file,"lists.erl"},{line,1225}]},
                    {yaws_server,handle_auth,4,
                        [{file,"yaws_server.erl"},{line,2178}]},
                    {yaws_server,is_auth,5,
                        [{file,"yaws_server.erl"},{line,2045}]},
                    {yaws_server,is_req_auth,3,
                        [{file,"yaws_server.erl"},{line,2032}]},
                    {yaws_server,handle_normal_request,5,
                        [{file,"yaws_server.erl"},{line,1932}]},
                    {yaws_server,aloop,4,
                        [{file,"yaws_server.erl"},{line,1242}]},
                    {yaws_server,acceptor0,2,
                        [{file,"yaws_server.erl"},{line,1065}]}]}

登录失败。

我在 YAWS 文档中寻找解决方案,但我发现了什么,看来我的配置是正确的(与以前的 YAWS 版本相同,没有问题)。

提前感谢您的帮助。

马特奥

【问题讨论】:

    标签: configuration erlang yaws


    【解决方案1】:

    新版本期望 users 字段是 4 元组的列表,而不是 2 元组。 (这就是为什么 fun 在文件“yaws_server.erl”第 2175 行崩溃的原因。)

    【讨论】:

      【解决方案2】:

      谢谢你的回答,理查德。

      我已经阅读了代码 (yaws_server.erl) 以及关于 crypto:hash 函数的 Erlang 文档,所以我终于找到了问题:

      在我的例子中,用户列表的正确配置是

      #sconf{listen       = Ip,
           servername   = HostName,
           port         = get_port(),
           docroot      = get_docroot(),
           errormod_404 = ?MODULE,
           partial_post_size = 1000000,
           authdirs = [#auth {dir = ["/"], realm = Realm, type="Basic", users = [{User, md4, Salt, crypto:hash(md4, [Salt,Pwd])}]}
      

      在第二步中,我将删除带有散列值的明文 Pwd。

      非常感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2015-11-04
        • 2012-06-03
        • 2014-08-23
        • 2015-04-23
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多