[prev in list] [next in list] [prev in thread] [next in thread]
List: nmap-dev
Subject: Re: [nmap-svn] r32366 - nmap-exp/d33tah/luaexec-lookup/ncat
From: Jacek Wielemborek <wielemborekj1 () gmail ! com>
Date: 2013-09-20 21:10:23
Message-ID: CAOfLAvgUV7N7Sn-LWSCB5fXBtSygJQ4jCzzKZm7+KPxtZtT7Qg () mail ! gmail ! com
[Download RAW message or body]
2013/9/20 David Fifield <david@bamsoftware.com>:
> On Fri, Sep 20, 2013 at 05:10:29PM +0200, Jacek Wielemborek wrote:
>> 2013/9/20 <commit-mailer@nmap.org>:
>> > +static int try_open(char *filename)
>> > +{
>> > + FILE *opened = fopen(filename, "r");
>> > + if (opened == NULL) {
>> > + return 0;
>> > + } else {
>> > + fclose(opened);
>> > + return 1;
>> > + }
>> > +}
>> > +
>> > +/* Try to find path for the script, looking in both the current directory and
>> > + - if the lookup filed - in a directory relative to the Ncat's executable.
>> > + Returns a dynamically allocated variable. */
>> > +static char* find_script_path(char *filename, char *argv0)
>> > +{
>> > + char *exe_path, *script_path;
>> > + int script_path_len;
>> > +
>> > + if (try_open(filename))
>> > + return filename;
>> > ...
>> > + if (!try_open(script_path))
>> > + bye("Could not find the script file in any of the search directories.");
>> > +
>> > + return script_path;
>> > +}
>> > ...
>> > - o.cmdexec = argv[2];
>> > + o.cmdexec = find_script_path(argv[2], argv[0]);
>> > lua_setup();
>> > lua_run();
>>
>> You said:
>>
>> Now, I want you to split up lua_setup, into one function that just
>> initializes the lua_State, and another function where you give it a
>> script name. It's not good to have so much application logic (trying
>> multiple platform-specfic paths) in a function like lua_setup. Also, I
>> think you would be able to do this within main, which would mean you
>> don't have to push argv0 into the global scope. What you want is a
>> helper function in ncat_main.c, that first calls lua_setup, then calls
>> some other function with a name that you give it. Then you call this
>> helper function from main(). The idea is to keep these application
>> details close to the application and farther from the Lua library
>> implementation.
>>
>> What do you think about the approach I just took?
>
> I have an idea on how to improve it. As written, there is a race
> condition between when try_open checks if a file exists and lua_setup
> calls luaL_loadfile on it. You really don't want to be opening the file
> twice: either luaL_loadfile can read it, or it can't.
>
> Instead, let lua_setup do only this:
> void lua_setup(void)
> {
> ncat_assert(o.cmdexec != NULL);
>
> L = luaL_newstate();
> luaL_openlibs(L);
>
> /* install the traceback function */
> last_function_number = lua_gettop(L);
> lua_pushcfunction(L, traceback);
> lua_insert(L, last_function_number);
> }
> Add a new function, ncat_lua_loadfile(lua_State *, const char *), that
> does luaL_loadfile and returns success or failure. Then, in ncat_main.c,
> add a new function ncat_lua_searchfile, that calls ncat_lua_loadfile on
> different paths until it succeeds, or finally returns failure.
>
> David Fifield
> _______________________________________________
> Sent through the dev mailing list
> http://nmap.org/mailman/listinfo/dev
> Archived at http://seclists.org/nmap-dev/
Please see r32368. It somehow felt awkward.
_______________________________________________
Sent through the dev mailing list
http://nmap.org/mailman/listinfo/dev
Archived at http://seclists.org/nmap-dev/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic