Hello Thomas,
2005/9/28, Thomas Petazzoni <[EMAIL PROTECTED]>:
> Ok, I *think* I've found the bug. (Line numbers refers to 0.6.2).
>
> In srv/participants.ml.nw, the function which is in charge of creating
> the default root login (with the demexp password) is
> initialize_default_participant_base. After a quick grep inside
> srv/*.ml.nw, I found two places where this function is called:
> - inside the participants autotest
> - in src/demexp-server.ml.nw
>
> In srv/demexp-server.ml.nw, line 290, we can read:
>
> if !flag_autotests then (
> log "server: use default participant base";
> Participants.initialize_default_participant_base ()
>) else
> log "server: use bases '%s'" !flag_bases_name;
> start_server ()
>
> If I correctly read OCaml, it means that
> initialize_default_participant_base() is called *only* in the case of
> autotests. Otherwise, start_server() is called, will try to load a
> bases.dmxp file, won't find it... and will run the server with not
> default root login.
>
> Is that right ?
I think you have spoted the bug quite well.
> Anyway, the enclosed patch fixes it. It simply calls the
> initialize_default_participant_base() when the base loading fails.
At first sight, your patch is wrong. The
initialize_default_participant_base() is always called, because the
else includes only the log function call.
> (The !flag_autotests notation is quite strange for the C programmer,
> which may think that it's the same as if flag_autotests == FALSE. In
> fact, after a quick read inside Weis and Leroy book, I've
> (re)-discovered that it's like the '*' in C, a dereference operator. Funny).
Yes. Even after years of using OCaml, I easily read this construct as
negation. :(
> --- demexp-0.6.2/srv/io.ml.nw 2005-09-28 00:36:50.0 +0200
> +++ demexp-0.6.2-new/srv/io.ml.nw 2005-09-28 00:37:02.0 +0200
> @@ -103,5 +103,6 @@
> log " done."
> ) else
> log " File \"%s\" does not exists. Don't load bases." filename;
> +Participants.initialize_default_participant_base () ;
>flush_all ()
> @
I would write it:
) else (
log " File \"%s\" does not exists. Don't load bases." filename;
Participants.initialize_default_participant_base ()
) ;
flush_all ()
I just looked at your patch an not the original source code, so do not
take my words for an absolute answer. ;)
It's been a long time since I looked at that code, so I need to dive
into it to fix it properly.
Sorry for the stupid bug,
Yours,
d.
___
Demexp-dev mailing list
Demexp-dev@nongnu.org
http://lists.nongnu.org/mailman/listinfo/demexp-dev