Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 255093 Details for
Bug 345217
app-i18n/uim-1.6.0 sandbox violation
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
proposed patch
uim-1.6.0-sandbox-violation.patch (text/plain), 7.12 KB, created by
Muneyuki Noguchi
on 2010-11-22 08:45:05 UTC
(
hide
)
Description:
proposed patch
Filename:
MIME Type:
Creator:
Muneyuki Noguchi
Created:
2010-11-22 08:45:05 UTC
Size:
7.12 KB
patch
obsolete
>diff --git a/scm/custom-rt.scm b/scm/custom-rt.scm >index ea94593..967f3c7 100644 >--- a/scm/custom-rt.scm >+++ b/scm/custom-rt.scm >@@ -63,7 +63,10 @@ > (define custom-file-path > (lambda (gsym) > (let* ((group-name (symbol->string gsym)) >- (path (string-append (get-config-path! #f) >+ (config-path (get-config-path #f)) >+ (path (string-append (if config-path >+ config-path >+ "") > "/customs/custom-" > group-name > ".scm"))) >diff --git a/scm/dynlib.scm b/scm/dynlib.scm >index 991ed55..6b67a77 100644 >--- a/scm/dynlib.scm >+++ b/scm/dynlib.scm >@@ -34,14 +34,15 @@ > (define uim-dynlib-load-path > (if (setugid?) > (list (string-append (sys-pkglibdir) "/plugin")) >- (let ((home-dir (or (home-directory (user-name)) "")) >- (ld-library-path (getenv "LD_LIBRARY_PATH"))) >+ (let* ((ld-library-path (getenv "LD_LIBRARY_PATH")) >+ (config-path (get-config-path #f)) >+ (user-plugin-path (if config-path >+ (string-append config-path "/plugin") >+ '()))) > (filter string? > (append (list (getenv "LIBUIM_PLUGIN_LIB_DIR") >- (if home-dir >- (string-append (get-config-path! #f) "/plugin") >- '()) >- (string-append (sys-pkglibdir) "/plugin")) >+ user-plugin-path >+ (string-append (sys-pkglibdir) "/plugin")) > ;; XXX > (if ld-library-path > (string-split ld-library-path ":") >diff --git a/scm/plugin.scm b/scm/plugin.scm >index 2d5d74a..d187429 100644 >--- a/scm/plugin.scm >+++ b/scm/plugin.scm >@@ -39,12 +39,12 @@ > (define uim-plugin-scm-load-path > (if (setugid?) > (list (sys-pkgdatadir)) >- (let ((home-dir (or (home-directory (user-name)) "")) >+ (let ((config-path (get-config-path #f)) > (scm-paths (string-split (load-path) ":"))) > (filter string? > (append scm-paths >- (if home-dir >- (list (string-append (get-config-path! #f) "/plugin")) >+ (if config-path >+ (list (string-append config-path "/plugin")) > '()) > (list (sys-pkgdatadir))))))) > >@@ -71,9 +71,9 @@ > ;; TODO: write test > (define load-module-conf > (lambda () >- (let* ((home-dir (or (home-directory (user-name)) "")) >- (user-module-dir (if home-dir >- (string-append (get-config-path! #f) "/plugin/") >+ (let* ((config-path (get-config-path #f)) >+ (user-module-dir (if config-path >+ (string-append config-path "/plugin/") > #f)) > (conf-file "installed-modules.scm") > (user-conf-file (if user-module-dir >@@ -100,9 +100,9 @@ > ;; TODO: write test > (define load-enabled-modules > (lambda () >- (let* ((home-dir (or (home-directory (user-name)) "")) >- (user-module-dir (if home-dir >- (string-append (get-config-path! #f) "/plugin/") >+ (let* ((config-path (get-config-path #f)) >+ (user-module-dir (if config-path >+ (string-append config-path "/plugin/") > #f)) > (file "loader.scm") > (user-file (if user-module-dir >diff --git a/uim/uim-helper.c b/uim/uim-helper.c >index e4a558f..882aea6 100644 >--- a/uim/uim-helper.c >+++ b/uim/uim-helper.c >@@ -207,7 +207,11 @@ uim_helper_get_pathname(char *helper_path, int len) > return UIM_TRUE; > > path_error: >- uim_fatal_error("uim_helper_get_pathname()"); >+#if USE_UIM_NOTIFY && !UIM_NON_LIBUIM_PROG >+ uim_notify_fatal("uim_helper_get_pathname() failed"); >+#else >+ fprintf(stderr, "uim_helper_get_pathname() failed\n"); >+#endif > helper_path[0] = '\0'; > > UIM_CATCH_ERROR_END(); >diff --git a/uim/uim-posix.c b/uim/uim-posix.c >index 83691d8..de8a327 100644 >--- a/uim/uim-posix.c >+++ b/uim/uim-posix.c >@@ -141,21 +141,33 @@ home_directory(uim_lisp user_) > return MAKE_STR(home); > } > >-uim_bool >-uim_check_dir(const char *dir) >+static uim_bool >+uim_check_dir_internal(const char *dir, int need_prepare) > { > struct stat st; > > if (stat(dir, &st) < 0) >- return (mkdir(dir, 0700) < 0) ? UIM_FALSE : UIM_TRUE; >+ if (need_prepare) >+ return (mkdir(dir, 0700) < 0) ? UIM_FALSE : UIM_TRUE; >+ else >+ return UIM_FALSE; > else { > mode_t mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR; > return ((st.st_mode & mode) == mode) ? UIM_TRUE : UIM_FALSE; > } > } > >+/* FIXME: use appropriate name for this API */ >+uim_bool >+uim_check_dir(const char *dir) >+{ >+ int need_prepare = UIM_TRUE; >+ >+ return uim_check_dir_internal(dir, need_prepare); >+} >+ > static uim_lisp >-c_check_dir(uim_lisp dir_) >+c_prepare_dir(uim_lisp dir_) > { > if (!uim_check_dir(REFER_C_STR(dir_))) { > return uim_scm_f(); >@@ -163,8 +175,8 @@ c_check_dir(uim_lisp dir_) > return uim_scm_t(); > } > >-uim_bool >-uim_get_config_path(char *path, int len, int is_getenv) >+static uim_bool >+uim_get_config_path_internal(char *path, int len, int is_getenv, int need_prepare) > { > char home[MAXPATHLEN]; > >@@ -174,34 +186,63 @@ uim_get_config_path(char *path, int len, int is_getenv) > if (!uim_get_home_directory(home, sizeof(home), getuid()) && is_getenv) { > char *home_env = getenv("HOME"); > >- if (!home_env) >+ if (!home_env) { >+ path[0] = '\0'; > return UIM_FALSE; >+ } > >- if (strlcpy(home, home_env, sizeof(home)) >= sizeof(home)) >+ if (strlcpy(home, home_env, sizeof(home)) >= sizeof(home)) { >+ path[0] = '\0'; > return UIM_FALSE; >+ } > } > >- if (snprintf(path, len, "%s/.uim.d", home) == -1) >+ if (snprintf(path, len, "%s/.uim.d", home) < 0) { >+ path[0] = '\0'; > return UIM_FALSE; >+ } > >- if (!uim_check_dir(path)) { >+ if (!uim_check_dir_internal(path, need_prepare)) { > return UIM_FALSE; > } > > return UIM_TRUE; > } > >+/* FIXME: use appropriate name for this API */ >+uim_bool >+uim_get_config_path(char *path, int len, int is_getenv) >+{ >+ int need_prepare = UIM_TRUE; >+ >+ return uim_get_config_path_internal(path, len, is_getenv, need_prepare); >+} >+ > static uim_lisp >-c_get_config_path(uim_lisp is_getenv_) >+c_prepare_config_path(uim_lisp is_getenv_) > { > char path[MAXPATHLEN]; >+ int need_prepare = UIM_TRUE; > >- if (!uim_get_config_path(path, sizeof(path), C_BOOL(is_getenv_))) >+ if (!uim_get_config_path_internal(path, sizeof(path), C_BOOL(is_getenv_), need_prepare)) > return uim_scm_f(); > return MAKE_STR(path); > } > > static uim_lisp >+c_get_config_path(uim_lisp is_getenv_) >+{ >+ char path[MAXPATHLEN]; >+ int need_prepare = UIM_FALSE; >+ int exist; >+ >+ /* No need to check the existence of path in this function */ >+ exist = uim_get_config_path_internal(path, sizeof(path), C_BOOL(is_getenv_), need_prepare); >+ >+ return MAKE_STR(path); >+} >+ >+static uim_lisp > file_stat_mode(uim_lisp filename, mode_t mode) > { > struct stat st; >@@ -391,8 +432,9 @@ uim_init_posix_subrs(void) > uim_scm_init_proc0("user-name", user_name); > uim_scm_init_proc1("home-directory", home_directory); > >- uim_scm_init_proc1("create/check-directory!", c_check_dir); >- uim_scm_init_proc1("get-config-path!", c_get_config_path); >+ uim_scm_init_proc1("create/check-directory!", c_prepare_dir); >+ uim_scm_init_proc1("get-config-path!", c_prepare_config_path); >+ uim_scm_init_proc1("get-config-path", c_get_config_path); > > uim_scm_init_proc1("file-readable?", file_readablep); > uim_scm_init_proc1("file-writable?", file_writablep);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 345217
:
254113
|
254115
|
254125
| 255093