1

I need to use hashed passwords for authentication in Yaws.

I've rebuilt it from source (https://github.com/klacke/yaws), with this sequence of commands:

./configure --enable-crypto --prefix=/some/local/path
make install

When I run yaws (/some/local/path/bin/yaws -i -erlarg "-boot start_sasl"), I get this error:

{"init terminating in do_boot",{{badmatch,{'EXIT',{badarg,[{erlang,list_to_existing_atom,["crypto"],[]},{yaws,'-start_app_deps/0-fun-0-',2,[{file,"yaws.erl"},{line,264}]},{lists,foldl,3,[{file,"lists.erl"},{line,1263}]},{yaws,start_app_deps,0,[{file,"yaws.erl"},{line,263}]},{yaws,start,0,[{file,"yaws.erl"},{line,209}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}},[{yaws,start,0,[{file,"yaws.erl"},{line,209}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}

The crypto library is present:

checking for Erlang/OTP 'crypto' library subdirectory... /usr/local/Cellar/erlang/19.2/lib/erlang/lib/crypto-3.7.2
checking for Erlang/OTP 'crypto' library version... 3.7.2

What is this problem caused by? Do I need to pass some specific options to run the newly built Yaws server?

When I run make test, all tests pass.

EDIT

Starting yaws with bin/yaws -i -erlarg "-init_debug" yields this output:

{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,error_logger}
{start,application_controller}
{progress,init_kernel_started}
{apply,{application,load,[{application,stdlib,[{description,"ERTS  CXC 138 10"},{vsn,"3.2"},{id,[]},{modules,[array,base64,beam_lib,binary,c,calendar,dets,dets_server,dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph,digraph_utils,edlin,edlin_expand,epp,eval_bits,erl_anno,erl_bits,erl_compile,erl_eval,erl_expand_records,erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,erl_scan,erl_tar,error_logger_file_h,error_logger_tty_h,escript,ets,file_sorter,filelib,filename,gb_trees,gb_sets,gen,gen_event,gen_fsm,gen_server,gen_statem,io,io_lib,io_lib_format,io_lib_fread,io_lib_pretty,lib,lists,log_mf_h,maps,math,ms_transform,orddict,ordsets,otp_internal,pool,proc_lib,proplists,qlc,qlc_pt,queue,rand,random,re,sets,shell,shell_default,slave,sofs,string,supervisor,supervisor_bridge,sys,timer,unicode,win32reg,zip]},{registered,[timer_server,rsh_starter,take_over_monitor,pool_master,dets]},{applications,[kernel]},{included_applications,[]},{env,[]},{maxT,infinity},{maxP,infinity}]}]}}
{progress,applications_loaded}
{apply,{application,start_boot,[kernel,permanent]}}
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:true] [dtrace]

{apply,{application,start_boot,[stdlib,permanent]}}
{apply,{application,start_boot,[sasl,permanent]}}

=PROGRESS REPORT==== 20-Nov-2018::14:09:57 ===
          supervisor: {local,sasl_safe_sup}
             started: [{pid,<0.60.0>},
                       {id,alarm_handler},
                       {mfargs,{alarm_handler,start_link,[]}},
                       {restart_type,permanent},
                       {shutdown,2000},
                       {child_type,worker}]

=PROGRESS REPORT==== 20-Nov-2018::14:09:57 ===
          supervisor: {local,sasl_sup}
             started: [{pid,<0.59.0>},
                       {id,sasl_safe_sup},
                       {mfargs,
                           {supervisor,start_link,
                               [{local,sasl_safe_sup},sasl,safe]}},
                       {restart_type,permanent},
                       {shutdown,infinity},
                       {child_type,supervisor}]

=PROGRESS REPORT==== 20-Nov-2018::14:09:57 ===
          supervisor: {local,sasl_sup}
             started: [{pid,<0.61.0>},
                       {id,release_handler},
                       {mfargs,{release_handler,start_link,[]}},
                       {restart_type,permanent},
                       {shutdown,2000},
                       {child_type,worker}]
{apply,{c,erlangrc,[]}}

=PROGRESS REPORT==== 20-Nov-2018::14:09:57 ===
         application: sasl
          started_at: nonode@nohost
{progress,started}
{"init terminating in do_boot",{{badmatch,{'EXIT',{badarg,[{erlang,list_to_existing_atom,["crypto"],[]},{yaws,'-start_app_deps/0-fun-0-',2,[{file,"yaws.erl"},{line,264}]},{lists,foldl,3,[{file,"lists.erl"},{line,1263}]},{yaws,start_app_deps,0,[{file,"yaws.erl"},{line,263}]},{yaws,start,0,[{file,"yaws.erl"},{line,209}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}},[{yaws,start,0,[{file,"yaws.erl"},{line,209}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ()

It appears that the crypto service is not started.

btk
  • 3,158
  • 2
  • 29
  • 30
  • 1
    Are you building `yaws` from master? What version of Erlang/OTP are you using (looks like 19.2 but I just want to be sure)? Is `crypto` listed in the `yaws.app` file? – Steve Vinoski Nov 16 '18 at 16:19
  • I'm using version 19.2, and building from master (`a4eec94b`) At the end of `yaws.app` file, I have `{applications,[kernel,stdlib,crypto]}]}.` – btk Nov 16 '18 at 20:24
  • 1
    So far I've been unable to reproduce this issue. Please check the output to the terminal during startup to see if `crypto` is getting started prior to any `yaws` processes starting. You might also consider adding `-erlarg -init_debug` to your command line to try to get more information – Steve Vinoski Nov 17 '18 at 02:42
  • It seems that `crypto` application is not getting started -- how can I make sure it starts as part of yaws boot? – btk Nov 20 '18 at 18:53
  • In the second comment here, you said that `yaws.app` contains `crypto`, but as you can see from the `init_debug` output, the `kernel` and `stdlib` applications both start but `crypto` is never mentioned anywhere. You need to make sure the right `yaws.app` file specifies the `crypto` application; that file should be located in the `ebin` directory of wherever the `yaws` application you're running is installed. – Steve Vinoski Nov 21 '18 at 03:25
  • Here is my `yaws.app` in its entirety: https://pastebin.com/raw/AUxqZjbz When I make modifications to this file that would cause a syntax error, there is no change in the output of `yaws` -- it seems it fails before reading `yaws.app`. – btk Nov 21 '18 at 15:51
  • Yaws doesn't read the `yaws.app` file, Erlang does. The fact that you can introduce errors into that file without causing any new problems means it's not the same `yaws.app` file that Erlang is reading to start Yaws. My advice is to run a `find` command over your Erlang and Yaws install areas to look for `yaws.app` files in hopes of locating the one that's actually being read at startup. – Steve Vinoski Nov 22 '18 at 04:52

0 Answers0