summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatsuu Takuto <matsuu@gentoo.org>2010-11-25 16:29:57 +0000
committerMatsuu Takuto <matsuu@gentoo.org>2010-11-25 16:29:57 +0000
commitd74834af8c996a4aa1d76e4594ab2b2d5ed8b10b (patch)
tree4c30c6dc678f995a6c708292eca65c691d62547a /app-i18n/uim
parentMarked ~hppa (bug #340269). (diff)
downloadgentoo-2-d74834af8c996a4aa1d76e4594ab2b2d5ed8b10b.tar.gz
gentoo-2-d74834af8c996a4aa1d76e4594ab2b2d5ed8b10b.tar.bz2
gentoo-2-d74834af8c996a4aa1d76e4594ab2b2d5ed8b10b.zip
Fixed sandbox violation. The patch is submitted by Muneyuki Noguchi, bug #345217.
(Portage version: 2.1.9.24/cvs/Linux x86_64)
Diffstat (limited to 'app-i18n/uim')
-rw-r--r--app-i18n/uim/ChangeLog9
-rw-r--r--app-i18n/uim/files/uim-1.6.0-sandbox-violation.patch240
-rw-r--r--app-i18n/uim/uim-1.6.0-r1.ebuild220
3 files changed, 468 insertions, 1 deletions
diff --git a/app-i18n/uim/ChangeLog b/app-i18n/uim/ChangeLog
index c947c86f06c5..3d970cbe199d 100644
--- a/app-i18n/uim/ChangeLog
+++ b/app-i18n/uim/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for app-i18n/uim
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-i18n/uim/ChangeLog,v 1.223 2010/11/08 07:10:58 matsuu Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-i18n/uim/ChangeLog,v 1.224 2010/11/25 16:29:57 matsuu Exp $
+
+*uim-1.6.0-r1 (25 Nov 2010)
+
+ 25 Nov 2010; MATSUU Takuto <matsuu@gentoo.org> +uim-1.6.0-r1.ebuild,
+ +files/uim-1.6.0-sandbox-violation.patch:
+ Fixed sandbox violation. The patch is submitted by Muneyuki Noguchi, bug
+ #345217.
*uim-1.6.0 (08 Nov 2010)
diff --git a/app-i18n/uim/files/uim-1.6.0-sandbox-violation.patch b/app-i18n/uim/files/uim-1.6.0-sandbox-violation.patch
new file mode 100644
index 000000000000..d0bb19ce5b07
--- /dev/null
+++ b/app-i18n/uim/files/uim-1.6.0-sandbox-violation.patch
@@ -0,0 +1,240 @@
+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);
diff --git a/app-i18n/uim/uim-1.6.0-r1.ebuild b/app-i18n/uim/uim-1.6.0-r1.ebuild
new file mode 100644
index 000000000000..dcd12b9da1d2
--- /dev/null
+++ b/app-i18n/uim/uim-1.6.0-r1.ebuild
@@ -0,0 +1,220 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-i18n/uim/uim-1.6.0-r1.ebuild,v 1.1 2010/11/25 16:29:57 matsuu Exp $
+
+EAPI="3"
+inherit autotools eutils multilib elisp-common flag-o-matic
+
+DESCRIPTION="Simple, secure and flexible input method library"
+HOMEPAGE="http://code.google.com/p/uim/"
+SRC_URI="http://uim.googlecode.com/files/${P}.tar.bz2"
+
+LICENSE="BSD GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86"
+KEYWORDS="~alpha ~amd64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="+anthy canna curl eb emacs ffi gnome gtk kde libedit libnotify m17n-lib ncurses nls prime qt4 skk sqlite ssl test unicode X xft linguas_zh_CN linguas_zh_TW linguas_ja linguas_ko"
+
+RESTRICT="test"
+
+RDEPEND="X? (
+ x11-libs/libX11
+ x11-libs/libXft
+ x11-libs/libXt
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXext
+ x11-libs/libXrender
+ )
+ anthy? (
+ unicode? ( >=app-i18n/anthy-8622 )
+ !unicode? ( app-i18n/anthy )
+ )
+ canna? ( app-i18n/canna )
+ curl? ( >=net-misc/curl-7.16.4 )
+ eb? ( dev-libs/eb )
+ emacs? ( virtual/emacs )
+ ffi? ( virtual/libffi )
+ gnome? ( >=gnome-base/gnome-panel-2.14 )
+ gtk? ( >=x11-libs/gtk+-2.4:2 )
+ kde? ( >=kde-base/kdelibs-4 )
+ libedit? ( dev-libs/libedit )
+ libnotify? ( >=x11-libs/libnotify-0.4 )
+ m17n-lib? ( >=dev-libs/m17n-lib-1.3.1 )
+ ncurses? ( sys-libs/ncurses )
+ nls? ( virtual/libintl )
+ prime? ( app-i18n/prime )
+ qt4? ( x11-libs/qt-gui:4[qt3support] )
+ skk? ( app-i18n/skk-jisyo )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? ( dev-libs/openssl )
+ !dev-scheme/sigscheme
+ !app-i18n/uim-svn
+ !<app-i18n/prime-0.9.4"
+# >=dev-scheme/sigscheme-0.8.5
+# mana? ( app-i18n/mana )
+# scim? ( >=app-i18n/scim-1.3.0 ) # broken
+# sj3? ( >=app-i18n/sj3-2.0.1.21 )
+# wnn? ( app-i18n/wnn )
+
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig
+ >=sys-devel/gettext-0.15
+ kde? ( dev-util/cmake )
+ X? (
+ x11-proto/xextproto
+ x11-proto/xproto
+ )"
+
+RDEPEND="${RDEPEND}
+ X? (
+ media-fonts/font-sony-misc
+ linguas_zh_CN? (
+ || ( media-fonts/font-isas-misc media-fonts/intlfonts )
+ )
+ linguas_zh_TW? (
+ media-fonts/intlfonts
+ )
+ linguas_ja? (
+ || ( media-fonts/font-jis-misc media-fonts/intlfonts )
+ )
+ linguas_ko? (
+ || ( media-fonts/font-daewoo-misc media-fonts/intlfonts )
+ )
+ )"
+# test? ( dev-scheme/gauche )
+
+SITEFILE=50${PN}-gentoo.el
+
+pkg_setup() {
+ # An arch specific config directory is used on multilib systems
+ has_multilib_profile && GTK2_CONFDIR="/etc/gtk-2.0/${CHOST}"
+ GTK2_CONFDIR=${GTK2_CONFDIR:=/etc/gtk-2.0/}
+}
+
+src_prepare() {
+ epatch \
+ "${FILESDIR}/${P}-gentoo.patch" \
+ "${FILESDIR}/${PN}-1.5.4-zhTW.patch" \
+ "${FILESDIR}/${P}-sandbox-violation.patch"
+
+ # bug 275420
+ sed -i -e "s:\$libedit_path/lib:/$(get_libdir):g" configure.ac || die
+ eautoconf
+}
+
+src_configure() {
+ local myconf
+
+ if use gtk && (use anthy || use canna) ; then
+ myconf="${myconf} --enable-dict"
+ else
+ myconf="${myconf} --disable-dict"
+ fi
+
+ if use gtk || use qt4 ; then
+ myconf="${myconf} --enable-pref"
+ else
+ myconf="${myconf} --disable-pref"
+ fi
+
+ if use anthy ; then
+ if use unicode ; then
+ myconf="${myconf} --with-anthy-utf8"
+ else
+ myconf="${myconf} --with-anthy"
+ fi
+ else
+ myconf="${myconf} --without-anthy"
+ fi
+
+ if use libnotify ; then
+ myconf="${myconf} --enable-notify=libnotify"
+ fi
+
+ econf $(use_with X x) \
+ $(use_with canna) \
+ $(use_with curl) \
+ $(use_with eb) \
+ $(use_enable emacs) \
+ $(use_with emacs lispdir "${SITELISP}") \
+ $(use_with ffi) \
+ $(use_enable gnome gnome-applet) \
+ $(use_with gtk gtk2) \
+ $(use_with libedit) \
+ --disable-kde-applet \
+ $(use_enable kde kde4-applet) \
+ $(use_with m17n-lib m17nlib) \
+ $(use_enable ncurses fep) \
+ $(use_enable nls) \
+ $(use_with prime) \
+ --without-qt \
+ --without-qt-immodule \
+ $(use_with qt4 qt4) \
+ $(use_with qt4 qt4-immodule) \
+ $(use_with skk) \
+ $(use_with sqlite sqlite3) \
+ $(use_enable ssl openssl) \
+ $(use_with xft) \
+ ${myconf}
+ # $(use_enable qt4 qt4-qt3support) \
+}
+
+src_compile() {
+ emake || die "emake failed"
+
+ if use emacs; then
+ cd emacs
+ elisp-compile *.el || die "elisp-compile failed"
+ fi
+}
+
+src_install() {
+ # parallel make install b0rked, bug #222677
+ emake -j1 INSTALL_ROOT="${D}" DESTDIR="${D}" install || die "make install failed"
+
+ dodoc AUTHORS ChangeLog* NEWS README RELNOTE || die
+ if use emacs; then
+ elisp-install uim-el emacs/*.elc || die "elisp-install failed"
+ elisp-site-file-install "${FILESDIR}/${SITEFILE}" uim-el \
+ || die "elisp-site-file-install failed"
+ fi
+
+ # collision with dev-scheme/sigscheme, bug #330975
+ # find "${ED}" -name '*gcroots*' -delete || die
+}
+
+pkg_postinst() {
+ elog
+ elog "New input method switcher has been introduced. You need to set"
+ elog
+ elog "% GTK_IM_MODULE=uim ; export GTK_IM_MODULE"
+ elog "% QT_IM_MODULE=uim ; export QT_IM_MODULE"
+ elog "% XMODIFIERS=@im=uim ; export XMODIFIERS"
+ elog
+ elog "If you would like to use uim-anthy as default input method, put"
+ elog "(define default-im-name 'anthy)"
+ elog "to your ~/.uim."
+ elog
+ elog "All input methods can be found by running uim-im-switcher-gtk, "
+ elog "or uim-im-switcher-qt4."
+ elog
+ elog "If you upgrade from a version of uim older than 1.4.0,"
+ elog "you should run revdep-rebuild."
+
+ use gtk && gtk-query-immodules-2.0 > "${ROOT}/${GTK2_CONFDIR}/gtk.immodules"
+ if use emacs; then
+ elisp-site-regen
+ echo
+ elog "uim is autoloaded with Emacs with a minimal set of features:"
+ elog "There is no keybinding defined to call it directly, so please"
+ elog "create one yourself and choose an input method."
+ elog "Integration with LEIM is not done with this ebuild, please have"
+ elog "a look at the documentation how to achieve this."
+ fi
+}
+
+pkg_postrm() {
+ use gtk && gtk-query-immodules-2.0 > "${ROOT}/${GTK2_CONFDIR}/gtk.immodules"
+ use emacs && elisp-site-regen
+}