diff options
-rw-r--r-- | dftest.c | 8 | ||||
-rw-r--r-- | epan/filesystem.c | 82 | ||||
-rw-r--r-- | gtk/main.c | 14 | ||||
-rw-r--r-- | tshark.c | 10 |
4 files changed, 67 insertions, 47 deletions
@@ -67,14 +67,14 @@ main(int argc, char **argv) dfilter_t *df; /* - * Attempt to get the pathname of the executable file. + * Get credential information for later use. */ - init_progfile_dir(argv[0]); + get_credential_info(); /* - * Get credential information for later use. + * Attempt to get the pathname of the executable file. */ - get_credential_info(); + init_progfile_dir(argv[0]); /* * Now attempt to get the pathname of the plugins. diff --git a/epan/filesystem.c b/epan/filesystem.c index e63b4dc333..f0ce082653 100644 --- a/epan/filesystem.c +++ b/epan/filesystem.c @@ -212,9 +212,17 @@ test_for_fifo(const char *path) return 0; } +/* + * Directory from which the executable came. + */ static char *progfile_dir; /* + * TRUE if we're running from the build directory. + */ +static gboolean running_in_build_directory_flag = FALSE; + +/* * Get the pathname of the directory from which the executable came, * and save it for future use. Returns NULL on success, and a * g_mallocated string containing an error on failure. @@ -321,6 +329,19 @@ init_progfile_dir(const char *arg0 char *retstr; /* + * Check whether WIRESHARK_RUN_FROM_BUILD_DIRECTORY is set in the + * environment; if so, set running_in_build_directory_flag if we + * weren't started with special privileges. (If we were started + * with special privileges, it's not safe to allow the user to point + * us to some other directory; running_in_build_directory_flag, when + * set, causes us to look for plugins and the like in the build + * directory.) + */ + if (getenv("WIRESHARK_RUN_FROM_BUILD_DIRECTORY") != NULL + && !started_with_special_privs()) + running_in_build_directory_flag = TRUE; + + /* * Try to figure out the directory in which the currently running * program resides, given the argv[0] it was started with. That * might be the absolute path of the program, or a path relative @@ -452,6 +473,20 @@ init_progfile_dir(const char *arg0 * artifact of libtool. */ *dir_end = '\0'; + + /* + * This presumably means we're run from + * the libtool wrapper, which probably + * means we're being run from the build + * directory. If we weren't started + * with special privileges, set + * running_in_build_directory_flag. + * + * XXX - should we check whether what + * follows ".libs/" begins with "lt-"? + */ + if (!started_with_special_privs()) + running_in_build_directory_flag = TRUE; } } @@ -490,9 +525,9 @@ get_progfile_dir(void) * process resides. * * On UN*X, we use the DATAFILE_DIR value supplied by the configure - * script, unless the WIRESHARK_RUN_FROM_BUILD_DIRECTORY environment - * variable is set, in which case we use the directory in which the - * executable for this process resides. + * script, unless we think we're being run from the build directory, + * in which case we use the directory in which the executable for this + * process resides. * * XXX - if we ever make libwireshark a real library, used by multiple * applications (more than just TShark and versions of Wireshark with @@ -563,13 +598,12 @@ get_datafile_dir(void) } } #else - if (getenv("WIRESHARK_RUN_FROM_BUILD_DIRECTORY") != NULL - && !started_with_special_privs() && progfile_dir != NULL) { + if (running_in_build_directory_flag && progfile_dir != NULL) { /* - * WIRESHARK_RUN_FROM_BUILD_DIRECTORY is set, and - * we weren't started with special privileges, and - * we were able to determine the directory in which - * the program was found, so use that. + * We're (probably) being run from the build directory and + * weren't started with special privileges, and we were + * able to determine the directory in which the program + * was found, so use that. */ datafile_dir = progfile_dir; } else { @@ -590,14 +624,13 @@ get_datafile_dir(void) * On Windows, we use the "plugin" subdirectory of the datafile directory. * * On UN*X, we use the PLUGIN_DIR value supplied by the configure - * script, unless the WIRESHARK_RUN_FROM_BUILD_DIRECTORY environment - * variable is set, in which case we use the "plugin" subdirectory of - * the datafile directory. + * script, unless we think we're being run from the build directory, + * in which case we use the "plugin" subdirectory of the datafile directory. * * In both cases, we then use the subdirectory of that directory whose * name is the version number. * - * XXX - if WIRESHARK_RUN_FROM_BUILD_DIRECTORY is set, perhaps we + * XXX - if we think we're being run from the build directory, perhaps we * should have the plugin code not look in the version subdirectory * of the plugin directory, but look in all of the subdirectories * of the plugin directory, so it can just fetch the plugins built @@ -605,11 +638,6 @@ get_datafile_dir(void) */ static const char *plugin_dir; -/* - * TRUE if we're running from the build directory. - */ -static gboolean running_in_build_directory_flag = FALSE; - void init_plugin_dir(void) { @@ -647,22 +675,14 @@ init_plugin_dir(void) running_in_build_directory_flag = TRUE; } #else - if (getenv("WIRESHARK_RUN_FROM_BUILD_DIRECTORY") != NULL - && !started_with_special_privs()) { + if (running_in_build_directory_flag) { /* - * WIRESHARK_RUN_FROM_BUILD_DIRECTORY is set, and - * we weren't started with special privileges, so - * we'll use the "plugins" subdirectory of the - * datafile directory (the datafile directory is - * the build directory), and set the "we're running - * in a build directory" flag, so the plugin scanner - * will check all subdirectories of that directory - * for plugins. (If we were started with special - * privileges, it's not safe to allow the user to - * point us to some other directory.) + * We're (probably) being run from the build directory and + * weren't started with special privileges, so we'll use + * the "plugins" subdirectory of the datafile directory + * (the datafile directory is the build directory). */ plugin_dir = g_strdup_printf("%s/plugins", get_datafile_dir()); - running_in_build_directory_flag = TRUE; } else plugin_dir = PLUGIN_DIR; #endif diff --git a/gtk/main.c b/gtk/main.c index ff1bfdec17..3c93ec3e5c 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2144,20 +2144,20 @@ main(int argc, char *argv[]) OPTSTRING_INIT OPTSTRING_WIN32; #ifdef HAVE_AIRPDCAP - /* Davide Schiera (2006-11-18): init AirPDcap context */ - AirPDcapInitContext(&airpdcap_ctx); - /* Davide Schiera (2006-11-18) ------------------------------------------- */ + /* Davide Schiera (2006-11-18): init AirPDcap context */ + AirPDcapInitContext(&airpdcap_ctx); + /* Davide Schiera (2006-11-18) ------------------------------------------- */ #endif /* - * Attempt to get the pathname of the executable file. + * Get credential information for later use. */ - init_progfile_dir_error = init_progfile_dir(argv[0]); + get_credential_info(); /* - * Get credential information for later use. + * Attempt to get the pathname of the executable file. */ - get_credential_info(); + init_progfile_dir_error = init_progfile_dir(argv[0]); /* * Now attempt to get the pathname of the plugins. @@ -721,6 +721,11 @@ main(int argc, char *argv[]) static const char optstring[] = OPTSTRING_INIT OPTSTRING_WIN32; /* + * Get credential information for later use. + */ + get_credential_info(); + + /* * Attempt to get the pathname of the executable file. */ init_progfile_dir_error = init_progfile_dir(argv[0]); @@ -730,11 +735,6 @@ main(int argc, char *argv[]) } /* - * Get credential information for later use. - */ - get_credential_info(); - - /* * Now attempt to get the pathname of the plugins. */ init_plugin_dir(); |