kov changed libgksu/tags/1.9.5/, libgksu/tags/1.9.5/ChangeLog,
libgksu/tags/1.9.5/ChangeLog, libgksu/tags/1.9.5/Makefile.am,
libgksu/tags/1.9.5/Makefile.am, libgksu/tags/1.9.5/configure.ac,
libgksu/tags/1.9.5/configure.ac,
libgksu/tags/1.9.5/gksu-properties/Makefile.am,
libgksu/tags/1.9.5/gksu-properties/Makefile.am,
libgksu/tags/1.9.5/gksu-properties/gksu-properties.c,
libgksu/tags/1.9.5/gksu-properties/gksu-properties.c,
libgksu/tags/1.9.5/gksu-properties/gksu-properties.desktop.in,
libgksu/tags/1.9.5/gksu.png, libgksu/tags/1.9.5/libgksu/libgksu.c,
libgksu/tags/1.9.5/libgksu/libgksu.c,
libgksu/tags/1.9.5/libgksu/libgksu.h,
libgksu/tags/1.9.5/libgksu/libgksu.h,
libgksu/tags/1.9.5/libgksuui/gksuui-dialog.c,
libgksu/tags/1.9.5/libgksuui/gksuui-dialog.c,
libgksu/tags/1.9.5/libgksuui/gksuui-dialog.h,
libgksu/tags/1.9.5/libgksuui/gksuui-dialog.h
Gustavo Noronha
kov at costa.debian.org
Thu Jul 13 00:01:32 UTC 2006
Mensagem de log:
tagging 1.9.5
-----
Copied: libgksu/tags/1.9.5 (from rev 637, libgksu/trunk)
Deleted: libgksu/tags/1.9.5/ChangeLog
===================================================================
--- libgksu/trunk/ChangeLog 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/ChangeLog 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,1226 +0,0 @@
-2006-06-29 Gustavo Noronha Silva <kov at debian.org>
-
- * gksu-properties/*:
- - start a simple capplet to configure the gksu gconf
- preferences
-
- * libgksu/defines.h:
- - small adaption so it can better be used by gksu-properties
-
-2006-06-26 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.9.4
-
- * libgksu/libgksu.c:
- - correctly derreference the error pointer when checking
- if something was returned by ask_pass
-
-2006-06-25 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.9.3
-
- * libgksu/libgksu.c:
- - use TRUE for success and FALSE for failure, to match glib's
- spawn API - well, it's a development release =D
-
- * libgksu/libgksu.c:
- - handle canceling the dialog correctly; added a new
- error to the enum
-
- * configure.ac, libgksu/libgksu.c:
- - accepted patch by Benoît Dejean <benoit at placenet.org>
- to get the process name in a platform independent way
-
-2006-05-01 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added fr to ALL_LINGUAS
-
- * configure.ac, libgksu/Makefile.am:
- - only use the version script if the system we're
- building on supports it; thanks to Daniel Macks
- for the patch
-
- * libgksu/libgksu.c:
- - check fread's return value before using strlen
- and setting a \0 in the xauth string, to prevent
- problems when xauth returns nothing (#7698)
- - handle locales which mess with the 'su:' layout
-
- * Release 1.9.2
-
- * configure.ac:
- - fixed gettext domain define
-
-2006-04-30 Gustavo Noronha Silva <kov at debian.org>
-
- * docs/*:
- - updated documentation
-
- * libgksu/Makefile.am:
- - increased minor version of the library, since some
- symbols were added
-
- * libgksuui/Makefile.am:
- - do not build a static version of the lib only;
- I need a shared version with PIC symbols built so
- that libgksu will be able to be fully PIC
-
- * libgksu/libgksu.c:
- - provide an API for simply getting the password
- - standardize the get methods that return string to
- return NULL if they were not set, and updated
- "docstrings" to fit;
- - removed translatable marks for strings that are
- errors printed to stderr
- - made some strings look better or more HIG compliant
-
- * libgksuui/libgksu.{c,h}, libgksuui/gksuui-dialog.c:
- - accepted changes from the Ubuntu people to make the dialog
- and messages be more beatiful; also provide an API that
- enables specifying a descriptional name for the command, that
- is used automatically in the message
-
- * libgksuui/gksuui-dialog.c:
- - do not center the label that is used to display
- the message
-
-2006-04-24 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c:
- - use the internal context->sudo_mode to tell the
- ask_pass function if we're on su or sudo mode
-
- * libgksu/libgksu.{c.h}:
- - implemented the message setting and getting
- functions, and use the message that is given
- when creating the dialog
-
- * Release 1.9.1
-
-2006-04-23 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu2.pc.in:
- - add gnome-keyring-1 and gconf-2.0 as dependencies
-
- * Release 1.9.0
-
- * libgksu/test-gksu.c:
- - display message before testing gksu_sudo_full, so we
- get a better picture of where stuff is happening
- - add a test to the new gksu_run{,_full} API
-
- * libgksu.c:
- - use non-blocking read when looking for the sudo prompt,
- so that we won't get blocked if there is none; also,
- make sure the window is displayed
- - (su) track that gnome keyring was used to enhance the pass_not_needed
- display logic; display it parallel to running the command, to match
- gksu_sudo_full behavior
- - only print the password when on debug mode
- - init sn_context with NULL, so non-SN-supporting users will
- not segfault when we check for the value
-
- * libgksu/libgksu.{c,h}:
- - new API gksu_run{,_full}, that is a generic way of using
- gksu functionality, leaving the choice of su or sudo backend
- to the gconf setting
-
-2006-04-16 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c:
- - used suggestion by Benoît Dejean <benoit at placenet.org>
- to avoid buffer overflows on the debug code
-
- * libgksu/libgksu.c:
- - patch from Michael Vogt to fix corner condition which
- happens when fgets returns badly with a specific app
-
-2006-04-15 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c, libgksu/gksu-run-helper.c:
- - check for xauth at /usr/bin (Xorg 7.0) and /usr/X11R6/bin
- (Xorg 6.9 and XFree86) [merged from trunk]
-
-2006-03-12 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksuui/gksuui-dialog.c:
- - added UI for the gnome-keyring support in the main widget
-
- * libgksu/libgksu.c:
- - Preliminary support for gnome-keyring imported from the
- gksu app code; it now removes the password from the
- keyring in case it tries with it and fails
-
-2006-03-02 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added dependency on libstartup-notification-1.0 to
- PKG_CHECK_MODULES; startup notification support has
- been added!
-
- * libgksu/test-gksu.c:
- - use the new location for xterm (FHS-compliant)
-
- * libgksu/libgksu.c:
- - integrated patch by Michael Vogt to support startup notfication
- - added accessor methods for the GksuContext structure, I want it
- to be opaque
-
- * libgksu/Makefile.am, libgksu/libgksu2.pc.in:
- - misc fixes to build system
-
-2006-01-24 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksuui/gksuui-dialog.{c,h}:
- - applied patch by Michael Vogt to report that capslock is enabled
- with small modifications
-
-2006-01-07 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c, docs/*:
- - revamp documentation; gtk-doc-style comments added to
- functions and some fixes to return values were made to
- match the docs
-
- * configure.ac, Makefile.am, others:
- - revamping the i18n infra-structure; mainly removing
- local intl/ copy and updating files
- - do not use local copies of m4 files in a m4/ directory
-
- * configure.ac:
- - do not create pkg-config files for libgksuui; it won't
- be installed anymore
-
- * Make libgksuui a sub, static library for libgksu only.
- - removed gksu-convenience stuff, that is not going to
- be used anymore
-
-2005-12-11 Gustavo Noronha Silva <kov at debian.org>
-
- * Major design overhaul
- - incorporating libgksuui
- - no longer try to be UI independent; use GTK+ mercylessly
- - incorporating gconf schema and settings handling
- - massive API review, removal of most public functions;
- GksuContext is no longer a GObject-based object, no longer
- has many accessor functions for its data fields and is
- needed for the _full versions of the main API functions
- right now; this allows saner handling of password prompting
- and housekeeping
-
- * gksu.schemas.in:
- - remove always-ask-password for now, it will probably be
- replaced by something else when gnome-keyring is integrated
-
- * intltoolized, modified some stuff for the package
- renaming to work
-
- * libgksu/libgksu.c:
- - integrated 'prompt before grab' support; also make the
- foce-grab configuration effective
-
- * renaming files:
- - libgksu/gksu-context.{c,h} -> libgksu/libgksu.{c,h}
-
-2005-11-23 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.7
-
-2005-11-17 Gustavo Noronha Silva <kov at debian.org>
-
- Following 4 fixes were done with information and help
- provided by Benoît Dejean <benoit at placenet.org>; thanks!
-
- * libgksu/gksu-context.c:
- - change debug message for the case in which we can't find
- a password prompt
-
- * libgksu/gksu-context.c:
- - do not free the user component of the context struct
- twice
-
- * libgksu/gksu-context.c:
- - init buffer with {0} so that debuging information will
- not show crappy stuff for it
-
- * libgksu/gksu-context.c:
- - check if pass_not_needed is there before calling
- it on gksu_context_sudo_run_full
-
-2005-10-25 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.6
-
-2005-10-02 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - fix logic problem when checking if what was read does not
- start with "gksu" or "su" - thanks to Guilherme de S. Pastore
- for spotting the problematic range of code (Debian bug #331124)
-
-2005-09-29 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.5
-
- * libgksu/gksu-context.c:
- - fixed some memory leaks which were added by lack of
- caution on my part =/
-
-2005-09-28 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.4
-
- * relibtoolized with libtool --automake -c -f
- (Debian's libtool 1.5.20-1)
-
- * configure.ac: bump version to 1.3.4
-
- * libgksu/gksu-context.c:
- - apply the same solution to handling error return
- checking to the su backend
-
-2005-09-21 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - handle 'not in sudoers' message (Ubuntu's #14922)
-
-2005-09-18 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - applied a patch to use /proc information to find out the
- name of the current child process to check if it was sudo
- who returned a failure code or the app we called on Linux
- systems; patch and modifications done to it were made by
- Michael Vogt and his advice, respectively (Ubuntu's #7517)
-
-2005-09-12 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - treat the command line to remove the quotes that may have
- been added by gksu's multi-argument processing code
-
-2005-08-20 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.{c,h}:
- - improve error reporting for sudo; tries to detect if sudo
- reported that the user cannot run the command for that user
-
-2005-08-02 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.3
-
- * libgksu/Makefile.am:
- - undo soname change because I stepped back from breaking the ABI
-
- * libgksu/gksu-context.{c,h}:
- - leave ask_and_run as deprecated functions to let software which
- used it at some point in development keep building and running
-
- * libgksu/gksu-context.{c,h}:
- - replaced ask_and_run with run_full for both su and sudo; the
- new API function which accepts another callback function that
- allows the user application to do something if a password was
- not needed like, for example, warning the user
-
-2005-08-01 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c, libgksu/Makefile.am, configure.ac:
- - revert inclusion of gnome-keyring support, which should
- actually go into the app, not the lib
-
-2005-07-21 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/Makefile.am:
- - increased minor version number because of the adition
- to the API
-
- * libgksu/gksu-context.{c,h}, libgksu/test-gksu.c:
- - implemented the gksu_context_ask_and_run counterpart
- for sudo
-
-2005-07-14 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.2 - The "Helsinki" Release!
-
- * libgksu/Makefile.am:
- - increase library minor version because API was added without
- breaking ABI (yet! =D)
-
- * libgksu/gksu-context.c:
- - wrap the keyring callback in the ENABLE_GNOME_KEYRING
- ifdef
-
- * libgksu/gksu-context.c, docs/libgksu1.2-sections.txt:
- - make sure every public API function is documented
-
- * libgksu/gksu-context.c:
- - small fixes and improvements to some info and error messages
-
- * libgksu/gksu-context.c:
- - handle the droping of the \n echoed after password was given
- if a password needed to be given, so we have wheel trust and
- other situations in which you don't need a password handled
- correctly
-
-2005-07-13 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - kill su in try_su_run instead of simply sending a "\n" if it
- asks for password, so we improve speed and avoid dead locks
-
- * libgksu/gksu-context.c:
- - after-password conversation with helper improved quite a bit
- and made simpler; should fix some problems with gksu-run:
- strings coming out eventually and prevent some cases of dead
- locks
-
- * libgksu/gksu-context.c:
- - accepted patch by Aurelien Jacobs <aurel at gnuage.org> that
- moves the keyring_create_item_cb outside of the function
- which calls it, so gksu will not segfault on AMD64, which
- does not permit execution of the stack; this addresses
- Debian bugs #318031, #307975 and #314369.
-
-2005-07-12 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - also use the ECHO trick for try_su_run
-
- * libgksu/gksu-context.c:
- - OK, so the call to usleep must be inside the while loop so
- gksu won't be eating CPU time
-
-2005-07-11 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/test-gksu.c:
- - fixed su_ask_pass declaration to include the GError** argument
-
- * libgksu/gksu-context.c:
- - init buf on gksu_context_ask_and_run with \0's so we don't get
- random weird stuff at the first time we read something to it
-
- * libgksu/gksu-context.c:
- - better checking of whether a prompt is waiting for a password
- or not to figure out if a password is needed or not; this enhances
- the 'only ask for password if really needed' approach and is one
- more step on addressing Debian's #246652; this required some
- tweaking to the logic used in conversation with gksu-run-helper.
-
- * libgksu/gksu-context.c:
- - Fixed wording on xauth warning message so it will not use first
- person; this addresses Debian bug #309563.
-
-2005-07-09 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - kill sudo when trying validation and wait a bit before
- wait()'ing, so gksu gets blocked for less time
-
-2005-06-29 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.{c,h}:
- - modified the password-asking function to receive a GError**
- so we have the possibility of creating a 'problem reporting'
- interface for it
- - also, check the return value of the function and bail out
- if it is FALSE
-
-2005-06-28 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - make a gksu_context_ask_and_run that receives a function
- pointer to request password if needed (so you don't have
- to fill context->password beforehand)
- * libgksu/test-gksu.c:
- - also test the new API function
-
-2005-06-18 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.1
-
- * libgksu/test-gksu.c:
- - s/strings.h/string.h/
-
- * libgksu/gksu-context.c:
- - call try_su_run before the gnome-keyring test; this solves
- lots of issues I was work-arounding before
-
- * libgksu/gksu-context.c:
- - fixed password checking to correct number of chars to compare
- and close fdpty after the comparison so su will not be blocked
- trying to write to the terminal
-
- * libgksu/gksu-context.c:
- - avoid using the keyring if su will simply work without
- a password or if the password is not there at the time
- it needs to be saved
- - nullify the password when entering try_need_password
- and if su will run without it (it may have been reset
- by try_gnome_keyring)
-
- * libgksu/gksu-context.c:
- - implemented a new test to simply try to run su and
- see what happens to check if we need a password
- - the above involved some changes to the _run method
- so it won't simply bail out if a password is not
- supplied and will also be more careful while discarting
- su output, which will simply not exist in some cases
-
-2005-06-16 Gustavo Noronha Silva <kov at debian.org>
-
- * ligbksu/gksu-context.c:
- - only save the password in the GNOME keyring if try_need_password
- has been called
-
-2005-06-15 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/test-gksu.c:
- - use the new API function for testing if a sudo password
- is needed
- - accept --su and --sudo arguments to try only su or sudo
- respectively
-
- * libgksu/gksu-context.{c,h}:
- - added a gksu_context_sudo_try_need_password to
- pre-check if we need a password; this uses sudo -v
- for now but will incorporate other ways of doing the
- check soon
-
-2005-06-14 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added ro to ALL_LINGUAS
-
-2005-06-13 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.3.0
-
-2005-06-09 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac, libgksu/Makefile.am:
- - changes based on the patch by Szilard Novaki to provide a
- --enable-gnome-keyring option to configure, disabled by
- default
- - new development version (1.3.0), API/ABI will not really be
- guaranteed to be that stable from now on 'till 1.4
-
- * docs/libgksu1.2-sections.txt:
- - updated so that the new public API function will appear
- in the documentation
-
- * libgksu/gksu-context.{c,h}:
- - added new public API function gksu_context_try_need_pass
- to check if we need to request a password
- (API version went up to 0:1:0, keeping compatibility)
- - implemented a method of getting a password from and saving
- it to the gnome-keyring, based on a patch provided to
- gksu by Szilard Novaki <novaki at agmen-software.com>
-
-2005-06-01 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added eu to ALL_LINGUAS
-
-2005-05-14 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added sk and nl to ALL_LINGUAS
-
-2005-05-13 Miroslav Kure <kurem at debian.cz>
-
- * configure.ac:
- - added cs to ALL_LINGUAS
-
-2005-05-12 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added pl to ALL_LINGUAS
-
-2005-05-07 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - accepted patch by Michael Vogt <mvogt at acm.org> to make the
- process which uses libgksu the session leader
-
-2005-04-27 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added hu to ALL_LINGUAS
-
- * configure.ac:
- - renamed no_NB to nb on ALL_LINGUAS
-
-2005-04-05 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.6
-
- * libgksu/gksu-context.c:
- - use other tatic to grab xauth cookie to make XDM and
- remote users happy. Should address Debian bugs #280914
- and #245092.
-
- * libgksu/gksu-context.c:
- - applied patch from Michael Vogt to have correct perms
- on the .Xauthority file that is created for sudo
-
- * libgksu/gksu-context.c:
- - some code cleanup and minor glitches were fixed
-
- * libgksu/gksu-run-helper.c:
- - changes to set XAUTHORITY in a more sane way and
- call the real command separately
-
-2004-10-17 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.5a
-
- * libgksu/gksu-context.c:
- - (gksu_context_sudo_run): added some more debugging stuff
- and fixed aditional space when checking if GNOME_SUDO_PASS
- was received, now sudo functionality works again.
- - (gksu_context_sudo_run): find out if password failed
-
-2004-10-16 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.5
-
- * libgksu/gksu-context.c:
- - (gksu_context_run): ignore first line when reading the
- output of gksu-run-helper - this should fix Debian bug
- #272133
- - (gksu_context_sudo_run): fixed the command building
- so that -H will only be used if context->keep_env is
- set - fixes Debian bug #276720
-
-2004-10-14 Gustavo Noronha Silva <kov at debian.org>
-
- * ChangeLog:
- - converted to UTF-8
-
- * libgksu/gksu-context.c:
- - prepare_xauth was modified to always get what comes after
- the ':' character, even if context->ssh_fwd is not set,
- thus making this variable unused for now... this probably
- fixed Debian bug #273819
-
- * configure.ac:
- - added no_NB to ALL_LINGUAS
-
-2004-09-07 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.4
-
- * libgksu/gksu-context.c:
- - applied patch by Martin Pitt <martin.pitt at canonical.com>
- to fix buffer overflows
-
-2004-08-15 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.3
-
- * configure.ac:
- - added ca to ALL_LINGUAS
-
-2004-06-24 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.2
-
- * libgksu/gksu-context.h:
- - added missing G_END_DECLS to fix C++ pre-processing
- (Debian bug #255607)
-
-2004-05-29 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.1
-
-2004-05-27 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.ver, libgksu/Makefile.am:
- - build the library with versioned symbols (thanks
- to Steve Langasek's [vorlon's] talk on "Escaping
- the dependency hell" at Debian Conference 4
-
-2004-05-18 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.2.0!
-
- * libgksu/gksu-context.c:
- - fixed string about Xauthority file already existing
- when being created for the target user
-
- * docs/libgksu-sections.txt:
- - removed the macros and the get_type function,
- added gksu_context_free
-
- * libgksu/gksu-context.{c,h}:
- - document GksuContext and gksu_context_free
-
-2004-05-05 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.1.5
-
- * libgksu/gksu-context.{c,h}:
- - new error for xauth stuff problems
- - now gksu looks at the XAUTHORITY environment
- variable to get the source from which to copy
- the Xauthorization file.
-
-2004-04-11 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - more select->sleep to fix bugs in linux 2.6
-
-2004-03-28 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/test-gksu.c:
- - changed the command that is called from ls to
- xterm
-
- * libgksu/gksu-context.c:
- - remove the password displaying debug stuff
- (it is not safe ;))
- - add an usleep to wait 200 usecs on each loop
- on the while that prints messages... it seems
- like linux 2.6's select() does not want to
- wait =)
-
-2004-03-27 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-context.c:
- - added some wait time before sending the
- password to su - the password was not
- being sent correctly without this.
-
-2004-03-21 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu.h, gksu-context.h:
- - changed double quotes to <> in gksu.h,
- fixed double inclusion of glib.h and
- self-inclusion on gksu-context.h, thanks
- to Max Reinhold Jahnke for the later fix
-
-2004-03-19 Gustavo Noronha Silva <kov at debian.org>
-
- * COPYING, libgksu/*:
- - change license to LGPL version 2
-
-2004-03-08 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-main*, libgksu/gksu-context*:
- - moved -main stuff to -context, made the _run
- stuff be methods of the GksuContext object
- also wrote a get_type function to the enum
- to help bindings
-
- * libgksu/gksu-context.{h,c}:
- - removed title, message and icon related methods
- as they are now to be used with the gksuui-dialog
- widget available in libgksuui
- - fixed problems with the naming of the GObject-related
- macros, so for example TYPE_GKSU_CONTEXT becomes
- GKSU_TYPE_CONTEXT -> I had misunderstood the docs and
- this seems to confuse the python binding generator
-
-2004-03-07 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/*:
- - loads of reorganization and code fixing to have
- it support the new build system, etc
-
- * separating libgksu into its own source package
-
-2004-03-05 gettextize <bug-gnu-gettext at gnu.org>
-
- * Makefile.am (SUBDIRS): Add intl.
- (DIST_SUBDIRS): Add intl.
- * configure.ac (AC_CONFIG_FILES): Add intl/Makefile.
-
-2004-03-05 gettextize <bug-gnu-gettext at gnu.org>
-
- * Makefile.am (SUBDIRS): Add m4.
- (DIST_SUBDIRS): Add m4.
- (EXTRA_DIST): New variable.
- * configure.ac (AC_CONFIG_FILES): Add m4/Makefile.
- (AM_GNU_GETTEXT_VERSION): Bump to 0.14.1.
-
-2004-02-03 Gustavo Noronha Silva <kov at debian.org> [1.1.1]
-
- * configure.ac:
- - polished a bit
-
- * libgksu/gksu-private.c:
- - fixed wrong error checking (duh)
-
- * libgksu/gksu-context.[ch]:
- - new implementation of GksuContext, based on
- the GObject glib facility
-
- * libgksu/libgksu.c, gksu/gksu.c:
- - port to the new GObject-based GksuContext
-
-2004-02-02 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/gksu-private.c, libgksu-gksu-private.h:
- - added a gksu_init_check function to init
- gtk
-
- * libgksu/libgksu.c, libgksu/gksu.h:
- - added printf-like format support for title and
- message setters
- - call gksu_init_check on all the three main functions
- to make sure gtk will be inited
-
-2004-01-29 Gustavo Noronha Silva <kov at debian.org>
-
- * gksu/gksu.c:
- - ported to the new API
-
- * libgksu/libgksu.c, libgksu/gksu-private.c:
- - more well-defined separation between exported
- and not export symbols (now even using the
- visibility __attribute__)
- - new API, based on contexts, preparation for
- 1.2
-
- * gksu/gksuexec.c:
- - accepted patch from Jorgen Viksell <jorgen.viksell at telia.com>
- to have gksuexec show a combo listing all the users on the
- system, thanks!
-
-2004-01-20 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.0.3
-
- * libgksu/libgksu.c:
- - fixed _gksu_conf->dir allocation for gksu_sudo_run
- to work
-
- * libgksu/libgksu.c:
- - added aditional error checking code to the xauth
- exec to avoid a segfault when it returns nothing
- patch by Doug Holland <meldroc at frii.com>
-
-2004-01-18 Gustavo Noronha Silva <kov at debian.org>
-
- * gksu/gksu.c, Makefile.am:
- - added support to sudo, when called as 'gksudo'
- - create the symlink on install
-
-2004-01-17 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.0.2
-
-2004-01-16 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c, libgksu/gksu.h:
- - improved error checking
- - improved error reporting on sudo related stuff
- - added gksu_sudo_run, with sudo support
-
- * remove the common directory and library, integrate
- the relevant parts into libgksu and gksu separately
-
- * libgksu/libgksu.c, common/gksutils.c:
- - incorporated code from gnome-sudo with some
- modifications to have gksu handle sudo, too
- untested, probably unstable code, needs testing
- to be exposed
-
- * libgksu/Makefile.am:
- - build the library with -fPIC, to allow prelinking
-
- * configure.ac:
- - added da to ALL_LINGUAS
-
-2004-01-15 Gustavo Noronha Silva <kov at debian.org>
-
- * libgksu/libgksu.c:
- - Fixed problems with gksu closing the application
- when canceled
- - gtk_init_check instead of gtk_init, to avoid failures
- killing the "parent" application
-
-2004-01-14 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.0.1
-
- * Major update on the documentation stuff
-
- * Small corrections to the locale handling code
-
-2003-12-19 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 1.0.0
-
- * introducing libgksu! I believe the code is stable
- enough for a 1.0 release -- althought the change to
- a library might be a big move, the code has not
- being changed a lot... let's see if the Debian
- unstable trial proves me wrong.
-
-2003-11-18 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.18
-
- * src/gui.c:
- - does not quit when grab fails, warns and continues...
-
- * po/de.po:
- - small fix, thanks to Michael Vogt <mvogt at acm.org>
-
- * src/gksu-run-helper.c:
- - fix bashism
-
-2003-11-14 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.17
-
- * autogen.sh:
- - use automake 1.7, instead of 1.6
-
- * configure.ac, po/pl.po:
- - added polish translation, thanks to Emil <emil5 at go2.pl>
-
- * src/gksu-run-helper.c:
- - added, to help fix the stupid security bug
-
- * src/gksu.{c,h}, src/su.c, src/xauth.c:
- - modified to use the gksu-run-helper, which will
- fix the security bug in which the Xauth token
- appears on a ps auxwww
-
-2003-08-28 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.16
-
-2003-08-26 Gustavo Noronha Silva <kov at debian.org>
-
- * src/xauth.c:
- - take care to take the MIT-MAGIC-COOKIE-1 from
- xauth list, XDM auth strings were biting gksu
-
-2003-08-08 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.15
-
-2003-08-06 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac:
- - added 'de' (German) to ALL_LINGUAS
-
- * gksu.desktop, gksuexec.desktop:
- - added German translation, thanks to:
- Sebastian Heinlein <sebastian.heinlein at campus.lmu.de>
-
-2003-07-29 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.14
-
- * src/su.c:
- - shows a nicer dialog with 'Wrong password.'
- instead of simply 'Child exited with error
- 1' thingy if su returns 'Authentication failure'
-
- * src/su.c:
- - use >& to redirect instead of 2>&1 to make
- non-bash shells happy (Closes: #203386,
- #203387)
-
-2003-07-24 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.13
-
- * README:
- - some explanations added
-
- * src/gui.c, src/su.c:
- - some modifications on the default label that's
- presented explaining why it wants the password,
- and in the label behavior, in general
-
- * src/gksu.c, src/xauth.c:
- - added --ssh-fwd option, which uses just the :x.x
- part of display when working with xauth, for gksu
- to work on ssh X11 forwarding
- (Closes Debian bug: #202532)
-
-2003-07-23 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.12
-
-2003-07-22 Gustavo Noronha Silva <kov at debian.org>
-
- * src/xauth.c:
- - added output about xauth token, file, directory and
- display, for debuging purposes (when --debug is enabled)
- - fixed clean_dir to remove the directory if it is empty
- before clean_dir is called
-
- * src/su.c:
- - do not show xauth's output, unless --debug is given
- - get rid of bashism when calling xauth by using the
- env command
-
- * src/gksu.c:
- - added a --debug option, to ask for more verbose
- output
-
-2003-07-14 Gustavo Noronha Silva <kov at debian.org>
-
- * man/gksu.1:
- - fixed --icon position
-
-2003-06-14 gettextize <bug-gnu-gettext at gnu.org>
-
- * Makefile.am (ACLOCAL_AMFLAGS): New variable.
- * configure.ac (AC_CONFIG_FILES): Add m4/Makefile.
- (AM_GNU_GETTEXT_VERSION): Bump to 0.12.1.
-
-2003-06-14 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.11
-
- * Applied patch from Ãlvaro Peña <apg at esware.com>
- to HIG-ify gksu a bit more
-
-2003-05-24 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.10
-
- * src/su.c:
- - Why the hell do I want gksu to automaticaly go to
- background? Changed that, I guess that'll help
- lots of scripts.
-
-2003-05-10 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.9
-
- * src/gksuexec.c:
- - fixed the way the command is passed as argument
- to gksu to fix running programs with arguments (duh)
-
-2003-05-08 Gustavo Noronha Silva <kov at debian.org>
-
- * src/su.c:
- - fixed bug which did not allow gksu to run programs
- with arguments like, say, 'emacs /etc/mozpluggerrc' =)
-
-2003-05-06 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac: added es.po to ALL_LINGUAS
-
-2003-05-02 Gustavo Noronha Silva <kov at debian.org>
-
- * configure.ac: added ru.po to ALL_LINGUAS
-
-2003-04-05 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.8
-
- * src/xauth.c:
- - initialize 'xauth' to avoid problems with junk
- thanks to Alex Stewart <am2stewa at uwaterloo.ca>
-
- * src/gui.c:
- - wait a bit longer before checking for the effectiveness of
- the keyboard/mouse grab
-
-2003-03-29 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.7
-
- * src/gksu.c, src/xauth.c:
- - remove references to sudo, at least for now
-
- * src/sudo.{c,h}:
- - removed, no longer provide sudo functionality, it
- doesn't work as well as it should
-
-2003-03-28 Gustavo Noronha Silva <kov at debian.org>
-
- * src/su.c:
- - use xauth information to make the magic work
-
- * src/xauth.c:
- - implement prepare_xauth_su to handle Xauth in a safer way,
- by using the 'xauth' program instead of a world readable
- .Xauthorization file
- - move the old way of doing things to the prepare_xauth_sudo
- function... sudo is a difficult piece of software to handle
-
- * src/gksu.c:
- - moved as much xauth specific stuff as I could to xauth.c
-
-2003-02-01 Allan Douglas <allan_douglas at gmx.net>
-
- * src/sudo.c:
- - cleanups
-
-2003-01-31 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.1
-
- * AUTHORS:
- - added Allan Douglas
-
-2003-01-31 Allan Douglas <allan_douglas at gmx.net>
-
- * src/su.c:
- - fixed the "missing output" bug
-
-2003-01-30 Allan Douglas <allan_douglas at gmx.net>
-
- * configure.ac:
- - removed yacc dependency
-
- * src/su.c:
- - cleanups
-
-2003-01-30 Gustavo Noronha Silva <kov at debian.org>
-
- * src/su.c, src/sudo.c:
- - fixed some stuff pointed by my friend "o_0" =P
-
- * src/gksuexec.c:
- - has an 'advanced' dialog to select options
- 'login_shell' and '--preserv-env' for gksu
-
-2003-01-30 Gustavo Noronha Silva <kov at debian.org>
-
- * src/gksuexec.c:
- - has an 'advanced' dialog to select options
- 'login_shell' and '--preserv-env' for gksu
-
-2003-01-29 Gustavo Noronha Silva <kov at debian.org>
-
- * man/gksu.1:
- - added reference for gksuexec command
- - updated with the help of the 'help2man' command
-
- * man/gksuexec.1: (new)
- - wrote manpage to the new command
-
- * man/Makefile.am: (new)
- - install manpages
-
- * src/gksu.c:
- - fixed small and harmless segfault when free'ing
- conf.title
- - accept -i, --icon to set window's icon
- - print-pass' message no longer assumes root user
-
- * src/gui.c:
- - use gksu's icon at the window, instead of the
- question mark
- - use conf.icon to set gksu window's icon
-
-2003-01-29 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.9.0
-
- * src/gksuexec.c:
- - a new program, a dialog to ask for other informations
- as a wrapper to gksu's command line
-
- * src/util.{c,h}, src/gui.{c,h}:
- - moved gk_dialog from gui to util to make it easier
- for gksuexec to use it
-
- * gksuexec.desktop:
- - new icon for GNOME, to run gksuexec
-
-2003-01-28 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.8.5
-
- * src/su.c:
- - does not ask for password when the real uid
- is 0 (see http://bugs.debian.org/178675)
-
- * src/gksu.c:
- - minor aesthetical fixes
-
-2003-01-22 Gustavo Noronha Silva <kov at debian.org>
-
- * Release 0.8.4
-
-2003-01-14 Gustavo Noronha Silva <kov at debian.org>
-
- * src/Makefile.am:
- - define DATA_DIR
- - add optimization on compilation
-
- * src/gui.c:
- - set default windows icon (requires Gtk+2.2)
-
- * gksu.png:
- - new icon, from art.gnome.org, Authorization.png
-
- * gksu.png -> gksu-terminal.png:
- - renamed icon for gnome's desktop icon
-
-2003-01-14 Gustavo Noronha Silva <kov at debian.org>
-
- * 0.8.3 Release
-
- * clean up to the build system, using autoconf
- 2.50 and automake-1.6
-
- * man/gksu.1:
- - fixed WHATIS entry
-
- * gksu.desktop, gksu.png:
- - icon for GNOME's System menu, to open a terminal
- as the root user
-
-2003-01-14 Gustavo Noronha Silva <kov at debian.org>
-
- * 0.8.2 Release
- - changed configure.in
-
- * src/gksu.c:
- - make reset environment the default, changed:
- reset-env, r to preserv-env, k
- - make not login shell the default, again, it
- will make the Xauth stuff break... duh
-
- * src/su.c, src/sudo.c:
- - yes, yes, auto-background again =P
-
- * src/gui.c:
- - cleans the Xauth directory in case the dialog is
- canceled or closed
- - changed buttons' positions to reflect the changes
- that happened to GNOME2
-
- * src/gksu.c:
- - made title more i18n friendly, fixed some small
- memory leaks
-
- * po/pt_BR.po:
- - updated translation
-
-2003-01-12 Gustavo Noronha Silva <kov at debian.org>
-
- * src/gksu.c:
- - make login shell by default
-
- * src/su.c, src/sudo.c:
- - no grandchild, no auto-background anymore
- - fixes on outputing things
-
-2002-08-13 gettextize <bug-gnu-gettext at gnu.org>
-
- * Makefile.am (SUBDIRS): Add m4.
- (SUBDIRS): Remove intl.
- (ACLOCAL_AMFLAGS): New variable.
- (EXTRA_DIST): New variable.
-
- * configure.in (AC_OUTPUT): Add m4/Makefile.
-
-2002-02-18 Gustavo Noronha Silva <kov at debian.org>
-
- * gksu: initial version.
-
Copied: libgksu/tags/1.9.5/ChangeLog (from rev 652, libgksu/trunk/ChangeLog)
Deleted: libgksu/tags/1.9.5/Makefile.am
===================================================================
--- libgksu/trunk/Makefile.am 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/Makefile.am 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,24 +0,0 @@
-AUTOMAKE_OPTIONS = 1.7
-
-DISTCLEANFILES = *~ intltool-extract intltool-merge intltool-update gksu.schemas
-
-SUBDIRS = po libgksuui libgksu gksu-properties docs
-DIST_SUBDIRS = $(SUBDIRS)
-
-schemasdir = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = gksu.schemas.in
-schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
- at INTLTOOL_SCHEMAS_RULE@
-
-EXTRA_DIST = config.rpath mkinstalldirs intltool-extract.in intltool-merge.in intltool-update.in gksu.schemas.in
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
- if test -z "$(DESTDIR)" ; then \
- for p in $(schemas_DATA) ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$$p ; \
- done \
- fi
-else
-install-data-local:
-endif
Copied: libgksu/tags/1.9.5/Makefile.am (from rev 641, libgksu/trunk/Makefile.am)
Deleted: libgksu/tags/1.9.5/configure.ac
===================================================================
--- libgksu/trunk/configure.ac 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/configure.ac 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,96 +0,0 @@
-# -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.57)
-
-AC_INIT(libgksu, 1.9.4, kov at debian.org)
-AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
-AC_CONFIG_SRCDIR(libgksu/libgksu.c)
-AM_CONFIG_HEADER(config.h)
-
-MAJOR_VERSION=`echo $VERSION | cut -d '.' -f 1`
-MINOR_VERSION=`echo $VERSION | cut -d '.' -f 2`
-MICRO_VERSION=`echo $VERSION | cut -d '.' -f 3`
-
-# gettext domain
-AC_DEFINE(DOMAIN, ["libgksu"], [gettext domain])
-
-AC_SUBST(MAJOR_VERSION)
-AC_SUBST(MINOR_VERSION)
-AC_SUBST(MICRO_VERSION)
-
-AM_MAINTAINER_MODE
-
-AC_DEFINE(PACKAGE, DOMAIN, [package name])
-AC_DEFINE(VERSION, AC_PACKAGE_VERSION, [package version])
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_LIBTOOL
-
-##################################################
-# Check for linker --version-script flag
-##################################################
-lt_simple_link_test_code='int main(){return(0);}\n'
-AC_LIBTOOL_LINKER_OPTION([whether the linker accepts the --version-script flag],
- use_version_script, [-Wl,--version-script=libgksu/libgksu.ver])
-AM_CONDITIONAL(USE_VERSION_SCRIPT, test x$use_version_script = xyes)
-
-AC_PATH_PROG(GCONFTOOL, gconftool-2)
-AM_GCONF_SOURCE_2
-
-PKG_CHECK_MODULES(LIBGKSU, [gtk+-2.0 >= 2.4.0, gconf-2.0, libstartup-notification-1.0, gnome-keyring-1, libgtop-2.0])
-PKG_CHECK_MODULES(GKSU_PROPERTIES, [gtk+-2.0 >= 2.4.0, gconf-2.0, libglade-2.0])
-
-# Checks for library functions.
-ALL_LINGUAS="ca cs da de es eu fr hu pl pt_BR ro ru sk nb nl"
-
-AC_DEFINE(GETTEXT_PACKAGE, AC_PACKAGE_NAME, [gettext package])
-GETTEXT_PACKAGE=AC_PACKAGE_NAME
-AC_SUBST(GETTEXT_PACKAGE)
-
-IT_PROG_INTLTOOL
-AM_GLIB_GNU_GETTEXT
-
-##################################################
-# Check for gtk-doc.
-##################################################
-
-AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs ])
-
-if test "x$with_html_dir" = "x" ; then
- HTML_DIR='${datadir}/gtk-doc/html'
-else
- HTML_DIR=$with_html_dir
-fi
-
-AC_SUBST(HTML_DIR)
-
-gtk_doc_min_version=1.0
-AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
-if pkg-config --atleast-version=$gtk_doc_min_version gtk-doc; then
- AC_MSG_RESULT(yes)
- GTKDOC=true
-else
- AC_MSG_RESULT(no)
- GTKDOC=false
-fi
-
-dnl Let people disable the gtk-doc stuff.
-AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc Use gtk-doc to build documentation [default=yes]], enable_gtk_doc="$enableval", enable_gtk_doc=yes)
-
-AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
-AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test x$use_libtool = xyes)
-# end of gtk-doc check
-
-AC_CONFIG_FILES([
- Makefile
- po/Makefile.in
- libgksu/Makefile
- libgksu/libgksu2.pc
- libgksuui/Makefile
- gksu-properties/Makefile
- docs/Makefile
- ])
-AC_OUTPUT
Copied: libgksu/tags/1.9.5/configure.ac (from rev 648, libgksu/trunk/configure.ac)
Deleted: libgksu/tags/1.9.5/gksu-properties/Makefile.am
===================================================================
--- libgksu/trunk/gksu-properties/Makefile.am 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/gksu-properties/Makefile.am 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,10 +0,0 @@
-AM_CFLAGS = -g -O2 -Wall
-INCLUDES = ${GKSU_PROPERTIES_CFLAGS}
-AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" -DDATA_DIR=\"$(datadir)\" -DPREFIX=\"$(prefix)\"
-
-bin_PROGRAMS = gksu-properties
-gksu_properties_LDFLAGS = ${GKSU_PROPERTIES_LIBS}
-gksu_properties_SOURCES = gksu-properties.c
-
-gladedir = ${prefix}/share/${PACKAGE}
-glade_DATA = gksu-properties.glade
Copied: libgksu/tags/1.9.5/gksu-properties/Makefile.am (from rev 641, libgksu/trunk/gksu-properties/Makefile.am)
Deleted: libgksu/tags/1.9.5/gksu-properties/gksu-properties.c
===================================================================
--- libgksu/trunk/gksu-properties/gksu-properties.c 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/gksu-properties/gksu-properties.c 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,263 +0,0 @@
-#include <locale.h>
-#include <string.h>
-#include <glade/glade.h>
-#include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
-
-#include "../config.h"
-#include "../libgksu/defines.h"
-
-static GladeXML *gui = NULL;
-static GtkWidget *main_window;
-static GtkWidget *grab_combo;
-static GtkWidget *mode_combo;
-static GConfClient *gconf_client; /* NULL */
-
-gboolean disable_grab = FALSE;
-gboolean force_grab = FALSE;
-gboolean prompt = FALSE;
-gboolean sudo_mode = FALSE;
-
-void
-update_from_gconf ()
-{
- disable_grab = gconf_client_get_bool (gconf_client, BASE_PATH "disable-grab",
- NULL);
-
- force_grab = gconf_client_get_bool (gconf_client, BASE_PATH "force-grab",
- NULL);
-
- prompt = gconf_client_get_bool (gconf_client, BASE_PATH "prompt",
- NULL);
-
- sudo_mode = gconf_client_get_bool (gconf_client, BASE_PATH "sudo-mode",
- NULL);
-}
-
-const gchar*
-get_grab_string ()
-{
- if (prompt)
- return "prompt";
-
- if (force_grab)
- return "force enable";
-
- if (disable_grab)
- return "disable";
-
- return "enable";
-}
-
-void
-update_grab_combo ()
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- const gchar *tmp = NULL;
- gchar *buffer = NULL;
- gboolean found = FALSE;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (grab_combo));
- gtk_tree_model_get_iter_first (model, &iter);
- tmp = get_grab_string ();
- do
- {
- gtk_tree_model_get (model, &iter, 0, &buffer, -1);
- if (!strcmp (tmp, buffer))
- {
- g_free (buffer);
- found = TRUE;
- break;
- }
- g_free (buffer);
- } while (gtk_tree_model_iter_next (model, &iter));
-
- if (found)
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (grab_combo), &iter);
-}
-
-void
-update_mode_combo ()
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- const gchar *tmp = NULL;
- gchar *buffer = NULL;
- gboolean found = FALSE;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (mode_combo));
- gtk_tree_model_get_iter_first (model, &iter);
- if (sudo_mode)
- tmp = "sudo";
- else
- tmp = "su";
- do
- {
- gtk_tree_model_get (model, &iter, 0, &buffer, -1);
- if (!strcmp (tmp, buffer))
- {
- g_free (buffer);
- found = TRUE;
- break;
- }
- g_free (buffer);
- } while (gtk_tree_model_iter_next (model, &iter));
-
- if (found)
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (mode_combo), &iter);
-}
-
-void
-create_dialog ()
-{
- main_window = glade_xml_get_widget (gui, "main_window");
-
- grab_combo = glade_xml_get_widget (gui, "grab_combo");
- update_grab_combo ();
-
- mode_combo = glade_xml_get_widget (gui, "mode_combo");
- update_mode_combo ();
-
- gtk_widget_show_all (main_window);
-}
-
-void
-gconf_change_cb (GConfClient *gconf_client, guint cnxn_id,
- GConfEntry *entry, gpointer data)
-{
- update_from_gconf ();
- update_mode_combo ();
- update_grab_combo ();
-}
-
-void
-combo_change_cb (GtkWidget *widget, gpointer data)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
- gchar *combo_name = (gchar*)data;
-
- gchar *buffer = NULL;
-
- model = gtk_combo_box_get_model (combo_box);
- if (gtk_combo_box_get_active_iter (combo_box, &iter))
- {
- gtk_tree_model_get (model, &iter, 0, &buffer, -1);
- if (!strcmp (combo_name, "mode"))
- {
- if (!strcmp (buffer, "sudo"))
- gconf_client_set_bool (gconf_client, BASE_PATH "sudo-mode",
- TRUE, NULL);
- else
- gconf_client_set_bool (gconf_client, BASE_PATH "sudo-mode",
- FALSE, NULL);
- }
- else
- {
- if (!strcmp (buffer, "enable"))
- {
- gconf_client_set_bool (gconf_client, BASE_PATH "prompt",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "disable-grab",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "force-grab",
- FALSE, NULL);
- }
- else if (!strcmp (buffer, "disable"))
- {
- gconf_client_set_bool (gconf_client, BASE_PATH "prompt",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "disable-grab",
- TRUE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "force-grab",
- FALSE, NULL);
- }
- else if (!strcmp (buffer, "prompt"))
- {
- gconf_client_set_bool (gconf_client, BASE_PATH "prompt",
- TRUE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "disable-grab",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "force-grab",
- FALSE, NULL);
- }
- else if (!strcmp (buffer, "force enable"))
- {
- gconf_client_set_bool (gconf_client, BASE_PATH "prompt",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "disable-grab",
- FALSE, NULL);
- gconf_client_set_bool (gconf_client, BASE_PATH "force-grab",
- TRUE, NULL);
- }
- }
- }
-}
-
-void
-setup_notifications ()
-{
- gconf_client_notify_add (gconf_client, GCONF_DIR, gconf_change_cb,
- NULL, NULL, NULL);
-
- g_signal_connect (G_OBJECT(mode_combo), "changed",
- G_CALLBACK(combo_change_cb), "mode");
-
- g_signal_connect (G_OBJECT(grab_combo), "changed",
- G_CALLBACK(combo_change_cb), "grab");
-}
-
-int
-main (int argc, char **argv)
-{
- bindtextdomain (PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (PACKAGE, "UTF-8");
- textdomain (PACKAGE);
-
- gtk_init (&argc, &argv);
-
- if (g_file_test ("gksu-properties.glade", G_FILE_TEST_EXISTS) == TRUE)
- {
- gui = glade_xml_new ("gksu-properties.glade", NULL, NULL);
- }
- else if (g_file_test (PREFIX "/share/" PACKAGE "/gksu-properties.glade",
- G_FILE_TEST_EXISTS) == TRUE)
- {
- gui = glade_xml_new (PREFIX "/share/" PACKAGE "/gksu-properties.glade", NULL,
- NULL);
- }
-
- if (!gui) {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL,
- 0,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("Failed to load glade file; please check your installation."));
-
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- return 1;
- }
-
- glade_xml_signal_autoconnect (gui);
-
- gconf_client = gconf_client_get_default ();
-
- update_from_gconf ();
- create_dialog ();
- setup_notifications ();
-
- if (main_window)
- gtk_main ();
-
- g_object_unref (gconf_client);
-
- return 0;
-}
Copied: libgksu/tags/1.9.5/gksu-properties/gksu-properties.c (from rev 641, libgksu/trunk/gksu-properties/gksu-properties.c)
Copied: libgksu/tags/1.9.5/gksu-properties/gksu-properties.desktop.in (from rev 641, libgksu/trunk/gksu-properties/gksu-properties.desktop.in)
Copied: libgksu/tags/1.9.5/gksu.png (from rev 641, libgksu/trunk/gksu.png)
Deleted: libgksu/tags/1.9.5/libgksu/libgksu.c
===================================================================
--- libgksu/trunk/libgksu/libgksu.c 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/libgksu/libgksu.c 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,2581 +0,0 @@
-/*
- * Gksu -- a library providing access to su functionality
- * Copyright (C) 2004 Gustavo Noronha Silva
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <pty.h>
-#include <pwd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include <sys/select.h>
-#include <errno.h>
-
-#include <glibtop.h>
-#include <glibtop/procstate.h>
-
-#define SN_API_NOT_YET_FROZEN
-#include <libsn/sn.h>
-
-#include <gtk/gtk.h>
-#include <locale.h>
-
-#include <gconf/gconf-client.h>
-#include <gnome-keyring.h>
-
-#include "defines.h"
-#include "../config.h"
-
-#include "libgksu.h"
-#include "../libgksuui/gksuui-dialog.h"
-
-GType
-gksu_error_get_type (void)
-{
- static GType etype = 0;
- if (etype == 0) {
- static const GEnumValue values[] = {
- { GKSU_ERROR_HELPER, "GKSU_ERROR_HELPER", "helper" },
- { GKSU_ERROR_NOCOMMAND, "GKSU_ERROR_NOCOMMAND", "nocommand" },
- { GKSU_ERROR_NOPASSWORD, "GKSU_ERROR_NOPASSWORD", "nopassword" },
- { GKSU_ERROR_FORK, "GKSU_ERROR_FORK", "fork" },
- { GKSU_ERROR_EXEC, "GKSU_ERROR_EXEC", "exec" },
- { GKSU_ERROR_PIPE, "GKSU_ERROR_PIPE", "pipe" },
- { GKSU_ERROR_PIPEREAD, "GKSU_ERROR_PIPEREAD", "piperead" },
- { GKSU_ERROR_WRONGPASS, "GKSU_ERROR_WRONGPASS", "wrongpass" },
- { GKSU_ERROR_CHILDFAILED, "GKSU_ERROR_CHILDFAILED", "childfailed" },
- { GKSU_ERROR_CANCELED, "GKSU_ERROR_CANCELED", "canceled" },
- { 0, NULL, NULL }
- };
- etype = g_enum_register_static ("GksuError", values);
- }
- return etype;
-}
-
-static pid_t
-test_lock(const char* fname)
-{
- int FD = open(fname, 0);
- if(FD < 0) {
- if(errno == ENOENT) {
- // File does not exist
- return 0;
- } else {
- perror("open");
- return(-1);
- }
- }
- struct flock fl;
- fl.l_type = F_WRLCK;
- fl.l_whence = SEEK_SET;
- fl.l_start = 0;
- fl.l_len = 0;
- if (fcntl(FD, F_GETLK, &fl) < 0) {
- g_critical("fcntl error");
- close(FD);
- return(-1);
- }
- close(FD);
- // lock is available
- if(fl.l_type == F_UNLCK)
- return(0);
- // file is locked by another process
- return (fl.l_pid);
-}
-
-static int
-get_lock(const char *File)
-{
- int FD = open(File,O_RDWR | O_CREAT | O_TRUNC,0640);
- if (FD < 0)
- {
- // Read only .. cant have locking problems there.
- if (errno == EROFS)
- {
- g_warning(_("Not using locking for read only lock file %s"),File);
- return dup(0); // Need something for the caller to close
- }
-
- // Feh.. We do this to distinguish the lock vs open case..
- errno = EPERM;
- return -1;
- }
- fcntl(FD,F_SETFD, FD_CLOEXEC);
-
- // Aquire a write lock
- struct flock fl;
- fl.l_type = F_WRLCK;
- fl.l_whence = SEEK_SET;
- fl.l_start = 0;
- fl.l_len = 0;
- if (fcntl(FD,F_SETLK,&fl) == -1)
- {
- if (errno == ENOLCK)
- {
- g_warning(_("Not using locking for nfs mounted lock file %s"), File);
- unlink(File);
- close(FD);
- return dup(0); // Need something for the caller to close
- }
-
- int Tmp = errno;
- close(FD);
- errno = Tmp;
- return -1;
- }
-
- return FD;
-}
-
-/*
- * code 'stolen' from gnome-session's logout.c
- *
- * Written by Owen Taylor <otaylor at redhat.com>
- * Copyright (C) Red Hat
- */
-typedef struct {
- GdkScreen *screen;
- int monitor;
- GdkRectangle area;
- int rowstride;
- GdkWindow *root_window;
- GdkWindow *draw_window;
- GdkPixbuf *start_pb, *end_pb, *frame;
- guchar *start_p, *end_p, *frame_p;
- GTimeVal start_time;
- GdkGC *gc;
-} FadeoutData;
-
-FadeoutData *fade_data = NULL;
-static GList *fadeout_windows = NULL;
-
-#define FADE_DURATION 500.0
-
-int
-gsm_screen_get_width (GdkScreen *screen,
- int monitor)
-{
- GdkRectangle geometry;
-
- gdk_screen_get_monitor_geometry (screen, monitor, &geometry);
-
- return geometry.width;
-}
-
-int
-gsm_screen_get_height (GdkScreen *screen,
- int monitor)
-{
- GdkRectangle geometry;
-
- gdk_screen_get_monitor_geometry (screen, monitor, &geometry);
-
- return geometry.height;
-}
-
-int
-gsm_screen_get_x (GdkScreen *screen,
- int monitor)
-{
- GdkRectangle geometry;
-
- gdk_screen_get_monitor_geometry (screen, monitor, &geometry);
-
- return geometry.x;
-}
-
-int
-gsm_screen_get_y (GdkScreen *screen,
- int monitor)
-{
- GdkRectangle geometry;
-
- gdk_screen_get_monitor_geometry (screen, monitor, &geometry);
-
- return geometry.y;
-}
-
-static void
-get_current_frame (FadeoutData *fadeout,
- double sat)
-{
- guchar *sp, *ep, *fp;
- int i, j, width, offset;
-
- width = fadeout->area.width * 3;
- offset = 0;
-
- for (i = 0; i < fadeout->area.height; i++)
- {
- sp = fadeout->start_p + offset;
- ep = fadeout->end_p + offset;
- fp = fadeout->frame_p + offset;
-
- for (j = 0; j < width; j += 3)
- {
- guchar r = abs (*(sp++) - ep[0]);
- guchar g = abs (*(sp++) - ep[1]);
- guchar b = abs (*(sp++) - ep[2]);
-
- *(fp++) = *(ep++) + r * sat;
- *(fp++) = *(ep++) + g * sat;
- *(fp++) = *(ep++) + b * sat;
- }
-
- offset += fadeout->rowstride;
- }
-}
-
-static void
-darken_pixbuf (GdkPixbuf *pb)
-{
- int width, height, rowstride;
- int i, j;
- guchar *p, *pixels;
-
- width = gdk_pixbuf_get_width (pb) * 3;
- height = gdk_pixbuf_get_height (pb);
- rowstride = gdk_pixbuf_get_rowstride (pb);
- pixels = gdk_pixbuf_get_pixels (pb);
-
- for (i = 0; i < height; i++)
- {
- p = pixels + (i * rowstride);
- for (j = 0; j < width; j++)
- p [j] >>= 1;
- }
-}
-
-static gboolean
-fadeout_callback (FadeoutData *fadeout)
-{
- GTimeVal current_time;
- double elapsed, percent;
-
- g_get_current_time (¤t_time);
- elapsed = ((((double)current_time.tv_sec - fadeout->start_time.tv_sec) * G_USEC_PER_SEC +
- (current_time.tv_usec - fadeout->start_time.tv_usec))) / 1000.0;
-
- if (elapsed < 0)
- {
- g_warning ("System clock seemed to go backwards?");
- elapsed = G_MAXDOUBLE;
- }
-
- if (elapsed > FADE_DURATION)
- {
- gdk_draw_pixbuf (fadeout->draw_window,
- fadeout->gc,
- fadeout->end_pb,
- 0, 0,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- return FALSE;
- }
-
- percent = elapsed / FADE_DURATION;
-
- get_current_frame (fadeout, 1.0 - percent);
- gdk_draw_pixbuf (fadeout->draw_window,
- fadeout->gc,
- fadeout->frame,
- 0, 0,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- gdk_flush ();
-
- return TRUE;
-}
-
-static void
-hide_fadeout_windows (void)
-{
- GList *l;
-
- for (l = fadeout_windows; l; l = l->next)
- {
- gdk_window_hide (GDK_WINDOW (l->data));
- g_object_unref (l->data);
- }
-
- g_list_free (fadeout_windows);
- fadeout_windows = NULL;
-}
-
-static gboolean
-fadein_callback (FadeoutData *fadeout)
-{
- GTimeVal current_time;
- double elapsed, percent;
-
- g_get_current_time (¤t_time);
- elapsed = ((((double)current_time.tv_sec - fadeout->start_time.tv_sec) * G_USEC_PER_SEC +
- (current_time.tv_usec - fadeout->start_time.tv_usec))) / 1000.0;
-
- if (elapsed < 0)
- {
- g_warning ("System clock seemed to go backwards?");
- elapsed = G_MAXDOUBLE;
- }
-
- if (elapsed > FADE_DURATION)
- {
- gdk_draw_pixbuf (fadeout->draw_window,
- fadeout->gc,
- fadeout->end_pb,
- 0, 0,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- g_object_unref (fadeout->gc);
- g_object_unref (fadeout->start_pb);
- g_object_unref (fadeout->end_pb);
- g_object_unref (fadeout->frame);
-
- g_free (fadeout);
-
- hide_fadeout_windows ();
-
- return FALSE;
- }
-
- percent = elapsed / FADE_DURATION;
-
- get_current_frame (fadeout, percent);
- gdk_draw_pixbuf (fadeout->draw_window,
- fadeout->gc,
- fadeout->frame,
- 0, 0,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- gdk_flush ();
-
- return TRUE;
-}
-
-static void
-fadeout_screen (GdkScreen *screen,
- int monitor)
-{
- GdkWindowAttr attr;
- int attr_mask;
- GdkGCValues values;
- FadeoutData *fadeout;
-
- fadeout = g_new (FadeoutData, 1);
-
- fadeout->screen = screen;
- fadeout->monitor = monitor;
-
- fadeout->area.x = gsm_screen_get_x (screen, monitor);
- fadeout->area.y = gsm_screen_get_y (screen, monitor);
- fadeout->area.width = gsm_screen_get_width (screen, monitor);
- fadeout->area.height = gsm_screen_get_height (screen, monitor);
-
- fadeout->root_window = gdk_screen_get_root_window (screen);
- attr.window_type = GDK_WINDOW_CHILD;
- attr.x = fadeout->area.x;
- attr.y = fadeout->area.y;
- attr.width = fadeout->area.width;
- attr.height = fadeout->area.height;
- attr.wclass = GDK_INPUT_OUTPUT;
- attr.visual = gdk_screen_get_system_visual (fadeout->screen);
- attr.colormap = gdk_screen_get_default_colormap (fadeout->screen);
- attr.override_redirect = TRUE;
- attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_NOREDIR;
-
- fadeout->draw_window = gdk_window_new (fadeout->root_window, &attr, attr_mask);
- fadeout_windows = g_list_prepend (fadeout_windows, fadeout->draw_window);
-
- fadeout->start_pb = gdk_pixbuf_get_from_drawable (NULL,
- fadeout->root_window,
- NULL,
- fadeout->area.x,
- fadeout->area.y,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height);
-
- fadeout->end_pb = gdk_pixbuf_copy (fadeout->start_pb);
- darken_pixbuf (fadeout->end_pb);
-
- fadeout->frame = gdk_pixbuf_copy (fadeout->start_pb);
- fadeout->rowstride = gdk_pixbuf_get_rowstride (fadeout->start_pb);
-
- fadeout->start_p = gdk_pixbuf_get_pixels (fadeout->start_pb);
- fadeout->end_p = gdk_pixbuf_get_pixels (fadeout->end_pb);
- fadeout->frame_p = gdk_pixbuf_get_pixels (fadeout->frame);
-
- values.subwindow_mode = GDK_INCLUDE_INFERIORS;
-
- fadeout->gc = gdk_gc_new_with_values (fadeout->root_window, &values, GDK_GC_SUBWINDOW);
-
- gdk_window_set_back_pixmap (fadeout->draw_window, NULL, FALSE);
- gdk_window_show (fadeout->draw_window);
- gdk_draw_pixbuf (fadeout->draw_window,
- fadeout->gc,
- fadeout->frame,
- 0, 0,
- 0, 0,
- fadeout->area.width,
- fadeout->area.height,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- g_get_current_time (&fadeout->start_time);
- g_idle_add ((GSourceFunc) fadeout_callback, fadeout);
-
- fade_data = fadeout;
-}
-
-/* End of 'stolen' code */
-
-#define GRAB_TRIES 16
-#define GRAB_WAIT 250 /* milliseconds */
-
-typedef enum
- {
- FAILED_GRAB_MOUSE,
- FAILED_GRAB_KEYBOARD
- } FailedGrabWhat;
-
-void
-report_failed_grab (FailedGrabWhat what)
-{
- GtkWidget *dialog;
-
- dialog = g_object_new (GTK_TYPE_MESSAGE_DIALOG,
- "message-type", GTK_MESSAGE_WARNING,
- "buttons", GTK_BUTTONS_CLOSE,
- NULL);
-
- switch (what)
- {
- case FAILED_GRAB_MOUSE:
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog),
- _("<b><big>Could not grab your mouse.</big></b>"
- "\n\n"
- "A malicious client may be eavesdropping "
- "on your session or you may have just clicked "
- "a menu or some application just decided to get "
- "focus."
- "\n\n"
- "Try again."));
-
- break;
- case FAILED_GRAB_KEYBOARD:
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog),
- _("<b><big>Could not grab your keyboard.</big></b>"
- "\n\n"
- "A malicious client may be eavesdropping "
- "on your session or you may have just clicked "
- "a menu or some application just decided to get "
- "focus."
- "\n\n"
- "Try again."));
- break;
- }
-
- gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
- gtk_dialog_run (GTK_DIALOG(dialog));
- gtk_widget_destroy (dialog);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
-}
-
-int
-grab_keyboard_and_mouse (GtkWidget *dialog)
-{
- GdkGrabStatus status;
- gint grab_tries = 0;
- gint lock = -1;
-
- gchar *fname = g_strdup_printf ("%s/.gksu.lock", getenv ("HOME"));
- pid_t pid = test_lock (fname);
-
- if (pid != 0)
- {
- g_warning ("Lock taken by pid: %i. Exiting.", pid);
- exit (0);
- }
-
- lock = get_lock(fname);
- if( lock < 0)
- g_warning ("Unable to create lock file.");
- g_free (fname);
-
- fadeout_screen (gdk_screen_get_default (), 0);
- gtk_widget_show_all (dialog);
-
- /* reset cursor */
- gdk_window_set_cursor(dialog->window, gdk_cursor_new(GDK_LEFT_PTR));
-
- for(;;)
- {
- status = gdk_pointer_grab ((GTK_WIDGET(dialog))->window, TRUE, 0, NULL,
- NULL, GDK_CURRENT_TIME);
- if (status == GDK_GRAB_SUCCESS)
- break;
- usleep (GRAB_WAIT * 1000);
- if (++grab_tries > GRAB_TRIES)
- {
- gtk_widget_hide (dialog);
- g_get_current_time (&fade_data->start_time);
- while (fadein_callback (fade_data) != FALSE);
- report_failed_grab (FAILED_GRAB_MOUSE);
- exit (1);
- break;
- }
- }
-
- for(;;)
- {
- status = gdk_keyboard_grab ((GTK_WIDGET(dialog))->window,
- FALSE, GDK_CURRENT_TIME);
- if (status == GDK_GRAB_SUCCESS)
- break;
-
- usleep(GRAB_WAIT * 1000);
-
- if (++grab_tries > GRAB_TRIES)
- {
- gtk_widget_hide (dialog);
- g_get_current_time (&fade_data->start_time);
- while (fadein_callback (fade_data) != FALSE);
- report_failed_grab (FAILED_GRAB_KEYBOARD);
- exit (1);
- break;
- }
- }
-
- /* we "raise" the window because there is a race here for
- * focus-follow-mouse and auto-raise WMs that may put the window
- * in the background and confuse users
- */
- gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- return lock;
-}
-
-void
-ungrab_keyboard_and_mouse (int lock)
-{
- /* Ungrab */
- gdk_pointer_ungrab(GDK_CURRENT_TIME);
- gdk_keyboard_ungrab(GDK_CURRENT_TIME);
- gdk_flush();
-
- g_get_current_time (&fade_data->start_time);
- while (fadein_callback (fade_data) != FALSE);
-
- close(lock);
-}
-
-static gchar*
-get_gnome_keyring_password (GksuContext *context)
-{
- GnomeKeyringAttributeList *attributes;
- GnomeKeyringAttribute attribute;
- GnomeKeyringResult result;
- GList *list;
-
- attributes = gnome_keyring_attribute_list_new ();
-
- attribute.name = g_strdup ("user");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup (gksu_context_get_user (context));
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("type");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("local");
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("creator");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("gksu");
- g_array_append_val (attributes, attribute);
-
- list = g_list_alloc();
-
- result = gnome_keyring_find_items_sync (GNOME_KEYRING_ITEM_GENERIC_SECRET,
- attributes,
- &list);
- gnome_keyring_attribute_list_free (attributes);
- if (
- (result == GNOME_KEYRING_RESULT_OK) &&
- (g_list_length(list) == 1)
- )
- {
- GnomeKeyringFound *found = list->data;
- gint password_length = strlen (found->secret);
- gchar *password;
-
- password = g_locale_from_utf8 (found->secret,
- password_length,
- NULL, NULL, NULL);
- /* strip the \n that is always stored in gnome-keyring */
- password[password_length - 1] = '\0';
- return password;
- }
-
- return NULL;
-}
-
-static void
-keyring_create_item_cb (GnomeKeyringResult result,
- guint32 id, gpointer keyring_loop)
-{
- g_main_loop_quit (keyring_loop);
-}
-
-static void
-set_gnome_keyring_password (GksuContext *context, gchar *password)
-{
- GConfClient *gconf_client;
- gboolean save_to_keyring;
-
- gconf_client = context->gconf_client;
- save_to_keyring = gconf_client_get_bool (gconf_client, BASE_PATH"save-to-keyring", NULL);
-
- if (password && save_to_keyring)
- {
- static GMainLoop *keyring_loop = NULL;
- GnomeKeyringAttributeList *attributes;
- GnomeKeyringAttribute attribute;
-
- gchar *keyring_name;
- gchar *key_name;
-
- attributes = gnome_keyring_attribute_list_new ();
-
- attribute.name = g_strdup ("user");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup (gksu_context_get_user (context));
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("type");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("local");
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("creator");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("gksu");
- g_array_append_val (attributes, attribute);
-
- key_name = g_strdup_printf ("Local password for user %s",
- gksu_context_get_user (context));
-
- keyring_loop = g_main_loop_new (NULL, FALSE);
-
- keyring_name = gconf_client_get_string (gconf_client, BASE_PATH"save-keyring", NULL);
- if (keyring_name == NULL)
- keyring_name = g_strdup ("session");
- gnome_keyring_item_create (keyring_name,
- GNOME_KEYRING_ITEM_GENERIC_SECRET,
- key_name,
- attributes,
- password,
- TRUE,
- keyring_create_item_cb,
- keyring_loop, NULL);
- gnome_keyring_attribute_list_free (attributes);
- g_free (keyring_name);
- g_main_loop_run (keyring_loop);
- }
-}
-
-static void
-unset_gnome_keyring_password (GksuContext *context)
-{
- GConfClient *gconf_client;
- gboolean save_to_keyring;
-
- GnomeKeyringAttributeList *attributes;
- GnomeKeyringAttribute attribute;
- GnomeKeyringResult result;
- GList *list;
-
- gconf_client = context->gconf_client;
- save_to_keyring = gconf_client_get_bool (gconf_client, BASE_PATH"save-to-keyring", NULL);
-
- if (save_to_keyring)
- {
- attributes = gnome_keyring_attribute_list_new ();
-
- attribute.name = g_strdup ("user");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup (gksu_context_get_user (context));
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("type");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("local");
- g_array_append_val (attributes, attribute);
-
- attribute.name = g_strdup ("creator");
- attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
- attribute.value.string = g_strdup ("gksu");
- g_array_append_val (attributes, attribute);
-
- list = g_list_alloc();
-
- result = gnome_keyring_find_items_sync (GNOME_KEYRING_ITEM_GENERIC_SECRET,
- attributes,
- &list);
- gnome_keyring_attribute_list_free (attributes);
- if (
- (result == GNOME_KEYRING_RESULT_OK) &&
- (g_list_length(list) == 1)
- )
- {
- GnomeKeyringFound *found = list->data;
-
- gnome_keyring_item_delete_sync (found->keyring,
- found->item_id);
- }
- }
-}
-
-void
-get_configuration_options (GksuContext *context)
-{
- GConfClient *gconf_client = context->gconf_client;
- gboolean force_grab;
-
- context->grab = !gconf_client_get_bool (gconf_client, BASE_PATH "disable-grab",
- NULL);
- force_grab = gconf_client_get_bool (gconf_client, BASE_PATH "force-grab",
- NULL);
- if (force_grab)
- context->grab = TRUE;
-
- context->sudo_mode = gconf_client_get_bool (gconf_client, BASE_PATH "sudo-mode",
- NULL);
-}
-
-/**
- * su_ask_password:
- * @context: a #GksuContext
- * @prompt: the prompt that should be used instead of "Password: "
- * @data: data that is passed by gksu_*_full
- * @error: a pointer to pointer #GError that will be filled with
- * data if an error happens.
- *
- * This is a convenience function to create a #GksuuiDialog and
- * request the password.
- *
- * Returns: a newly allocated gchar containing the password
- * or NULL if an error happens or the user cancels the action
- */
-static gchar*
-su_ask_password (GksuContext *context, gchar *prompt,
- gpointer data, GError **error)
-{
- GtkWidget *dialog = NULL;
- gchar *msg;
- gchar *password = NULL, *tmp = NULL;
- int retvalue = 0;
- int lock = 0;
- GQuark gksu_quark;
-
- gksu_quark = g_quark_from_string (PACKAGE);
-
- if (context->grab)
- dialog = g_object_new (GKSUUI_TYPE_DIALOG,
- "type", GTK_WINDOW_POPUP,
- NULL);
- else
- dialog = gksuui_dialog_new ();
-
- if (prompt)
- gksuui_dialog_set_prompt (GKSUUI_DIALOG(dialog), prompt);
-
- if (context->message)
- gksuui_dialog_set_message (GKSUUI_DIALOG(dialog), context->message);
- else
- {
- gchar *command = NULL;
- if (context->description)
- command = context->description;
- else
- command = context->command;
-
- if (context->sudo_mode)
- {
- if (!strcmp(context->user, "root"))
- msg = g_strdup_printf (_("<b><big>Enter your password to perform"
- " administrative tasks</big></b>\n\n"
- "The application '%s' lets you "
- "modify essential parts of your "
- "system."),
- command);
- else
- msg = g_strdup_printf (_("<b><big>Enter your password to run "
- "the application '%s' as user %s"
- "</big></b>"),
- command, context->user);
- }
- else
- {
- if (strcmp(gksu_context_get_user (context), "root") == 0)
- msg = g_strdup_printf (_("<b><big>Enter the administrative password"
- "</big></b>\n\n"
- "The application '%s' lets you "
- "modify essential parts of your "
- "system."),
- command);
- else
- msg = g_strdup_printf (_("<b><big>Enter the password of %s to run "
- "the application '%s'"
- "</big></b>"),
- command, context->user);
- }
-
- gksuui_dialog_set_message (GKSUUI_DIALOG(dialog), msg);
- g_free (msg);
- }
-
- if (context->grab)
- lock = grab_keyboard_and_mouse (dialog);
- retvalue = gtk_dialog_run (GTK_DIALOG(dialog));
- gtk_widget_hide (dialog);
- if (context->grab)
- ungrab_keyboard_and_mouse (lock);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- if (retvalue != GTK_RESPONSE_OK)
- {
- switch (retvalue)
- {
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- g_set_error (error, gksu_quark,
- GKSU_ERROR_CANCELED,
- _("Password prompt canceled."));
- }
- return NULL;
- }
-
- tmp = gksuui_dialog_get_password (GKSUUI_DIALOG(dialog));
- password = g_locale_from_utf8 (tmp, strlen (tmp), NULL, NULL, NULL);
- g_free (tmp);
-
- return password;
-}
-
-static void
-cb_toggled_cb (GtkWidget *button, gpointer data)
-{
- GConfClient *gconf_client;
- gchar *key;
- gboolean toggled;
- gchar *key_name;
-
- g_return_if_fail (data != NULL);
-
- key_name = (gchar*)data;
-
- gconf_client = gconf_client_get_default ();
- toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
-
- key = g_strdup_printf (BASE_PATH "%s", key_name);
-
- if (!strcmp (key_name, "display-no-pass-info"))
- {
- /* the meaning of the key is the exact opposite of the meaning
- of the answer - when the check button is checked the key must
- be off
- */
- gconf_client_set_bool (gconf_client, key, !toggled, NULL);
- }
- else
- gconf_client_set_bool (gconf_client, key, toggled, NULL);
-
- g_object_unref (gconf_client);
-
- g_free (key);
-}
-
-void
-no_pass (GksuContext *context, gpointer data)
-{
- GtkWidget *dialog;
- GtkWidget *alignment;
- GtkWidget *check_button;
-
- gchar *command = NULL;
-
- if (context->description)
- command = context->description;
- else
- command = context->command;
-
- dialog = gtk_message_dialog_new_with_markup (NULL, 0,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
- _("<b><big>Granted permissions without asking "
- "for password</big></b>"
- "\n\n"
- "The '%s' program was started with "
- "the privileges of the %s user without "
- "the need to ask for a password, due to "
- "your system's authentication mechanism "
- "setup."
- "\n\n"
- "It is possible that you are being allowed "
- "to run specific programs as user %s "
- "without the need for a password, or that "
- "the password is cached."
- "\n\n"
- "This is not a problem report; it's "
- "simply a notification to make sure "
- "you are aware of this."),
- command,
- context->user,
- context->user);
-
- alignment = gtk_alignment_new (0.5, 0.5, 0.6, 1);
- gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), alignment, TRUE, TRUE, 2);
-
- check_button = gtk_check_button_new_with_mnemonic (_("Do _not display this message again"));
- g_signal_connect (G_OBJECT(check_button), "toggled",
- G_CALLBACK(cb_toggled_cb), "display-no-pass-info");
- gtk_container_add (GTK_CONTAINER(alignment), check_button);
-
- gtk_widget_show_all (dialog);
- gtk_dialog_run (GTK_DIALOG(dialog));
- gtk_widget_destroy (GTK_WIDGET(dialog));
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-}
-
-static void
-gksu_prompt_grab (GksuContext *context)
-{
- GtkWidget *d;
-
- d = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- _("<b>Would you like your screen to be \"grabbed\"\n"
- "while you enter the password?</b>"
- "\n\n"
- "This means all applications will be paused to avoid\n"
- "the eavesdropping of your password by a a malicious\n"
- "application while you type it."));
-
- if (gtk_dialog_run (GTK_DIALOG(d)) == GTK_RESPONSE_NO)
- context->grab = FALSE;
- else
- context->grab = TRUE;
-
- gtk_widget_destroy (d);
-}
-
-static void
-nullify_password (gchar *pass)
-{
- if (pass)
- {
- memset(pass, 0, strlen(pass));
- g_free (pass);
- }
- pass = NULL;
-}
-
-static gchar *
-get_process_name (pid_t pid)
-{
- static gboolean init;
- glibtop_proc_state buf;
-
- if (!init) {
- glibtop_init();
- init = TRUE;
- }
-
- glibtop_get_proc_state (&buf, pid);
- return strdup(buf.cmd);
-}
-
-/**
- * prepare_xauth:
- *
- * Sets up the variables with values for the $DISPLAY
- * environment variable and xauth-related stuff. Also
- * creates a temporary directory to hold a .Xauthority
- *
- * Returns: TRUE if it suceeds, FALSE if it fails.
- */
-static int
-prepare_xauth (GksuContext *context)
-{
- gchar *xauth_bin = NULL;
-
- FILE *xauth_output;
- gchar xauth[256] = {0};
-
- gchar *tmp = NULL;
- gchar **tmpv = NULL;
- gchar *display = NULL;
-
- /* avoid problems with "network" DISPLAY's */
- display = g_strdup (getenv ("DISPLAY"));
- tmpv = g_strsplit (display, ":", 3);
- g_free (display);
-
- context->display = g_strdup_printf (":%s", tmpv[1]);
-
- g_strfreev (tmpv);
-
- /* find out where the xauth binary is located */
- if (g_file_test ("/usr/bin/xauth", G_FILE_TEST_IS_EXECUTABLE))
- xauth_bin = "/usr/bin/xauth";
- else if (g_file_test ("/usr/X11R6/bin/xauth", G_FILE_TEST_IS_EXECUTABLE))
- xauth_bin = "/usr/X11R6/bin/xauth";
- else
- {
- fprintf (stderr,
- "Failed to obtain xauth key: xauth binary not found "
- "at usual locations");
-
- return FALSE;
- }
-
- /* get the authorization token */
- tmp = g_strdup_printf ("%s list %s | "
- "head -1 | awk '{ print $3 }'",
- xauth_bin,
- context->display);
- if ((xauth_output = popen (tmp, "r")) == NULL)
- {
- fprintf (stderr,
- "Failed to obtain xauth key: %s",
- strerror(errno));
- return FALSE;
- }
- fread (xauth, sizeof(char), 255, xauth_output);
- pclose (xauth_output);
- g_free (tmp);
-
- context->xauth = g_strdup (xauth);
-
- if (context->debug)
- {
- fprintf(stderr,
- "xauth: -%s-\n"
- "display: -%s-\n",
- context->xauth, context->display);
- }
-
- return TRUE;
-}
-
-/* Write all of buf, even if write(2) is interrupted. */
-static ssize_t
-full_write (int d, const char *buf, size_t nbytes)
-{
- ssize_t r, w = 0;
-
- /* Loop until nbytes of buf have been written. */
- while (w < nbytes) {
- /* Keep trying until write succeeds without interruption. */
- do {
- r = write(d, buf + w, nbytes - w);
- } while (r < 0 && errno == EINTR);
-
- if (r < 0) {
- return -1;
- }
-
- w += r;
- }
-
- return w;
-}
-
-static gboolean
-copy (const char *fn, const char *dir)
-{
- int in, out;
- int r;
- char *newfn;
- char buf[BUFSIZ] = "";
-
- newfn = g_strdup_printf("%s/.Xauthority", dir);
-
- out = open(newfn, O_WRONLY | O_CREAT | O_EXCL, 0600);
- if (out == -1)
- {
- if (errno == EEXIST)
- fprintf (stderr,
- "Impossible to create the .Xauthority file: a file "
- "already exists. This might be a security issue; "
- "please investigate.");
- else
- fprintf (stderr,
- "Error copying '%s' to '%s': %s",
- fn, dir, strerror(errno));
-
- return FALSE;
- }
-
- in = open(fn, O_RDONLY);
- if (in == -1)
- {
- fprintf (stderr,
- "Error copying '%s' to '%s': %s",
- fn, dir, strerror(errno));
- return FALSE;
- }
-
- while ((r = read(in, buf, BUFSIZ)) > 0)
- {
- if (full_write(out, buf, r) == -1)
- {
- fprintf (stderr,
- "Error copying '%s' to '%s': %s",
- fn, dir, strerror(errno));
- return FALSE;
- }
- }
-
- if (r == -1)
- {
- fprintf (stderr,
- "Error copying '%s' to '%s': %s",
- fn, dir, strerror(errno));
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-sudo_prepare_xauth (GksuContext *context)
-{
- gchar template[] = "/tmp/" PACKAGE "-XXXXXX";
- gboolean error_copying = FALSE;
- gchar *xauth = NULL;
-
- context->dir = g_strdup (mkdtemp(template));
- if (!context->dir)
- {
- fprintf (stderr, strerror(errno));
- return FALSE;
- }
-
- xauth = g_strdup(g_getenv ("XAUTHORITY"));
- if (xauth == NULL)
- xauth = g_strdup_printf ("%s/.Xauthority", g_get_home_dir());
-
- error_copying = !copy (xauth, context->dir);
- g_free (xauth);
-
- if (error_copying)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-sudo_reset_xauth (GksuContext *context, gchar *xauth,
- gchar *xauth_env)
-{
- /* reset the env var as it was before or clean it */
- if (xauth_env)
- setenv ("XAUTHORITY", xauth_env, TRUE);
- else
- unsetenv ("XAUTHORITY");
-
- if (context->debug)
- fprintf (stderr, "xauth: %s\nxauth_env: %s\ndir: %s\n",
- xauth, xauth_env, context->dir);
-
- unlink (xauth);
- rmdir (context->dir);
-
- g_free (xauth);
-}
-
-/**
- * gksu_context_new
- *
- * This function should be used when creating a new #GksuContext to
- * pass to gksu_su_full or gksu_sudo_full. The #GksuContext must be
- * freed with gksu_context_free.
- *
- * Returns: a newly allocated #GksuContext
- */
-GksuContext*
-gksu_context_new ()
-{
- GksuContext *context;
-
- context = g_new (GksuContext, 1);
-
- context->xauth = NULL;
- context->dir = NULL;
- context->display = NULL;
-
- context->gconf_client = gconf_client_get_default ();
-
- context->sudo_mode = FALSE;
-
- context->user = g_strdup ("root");
- context->command = NULL;
-
- context->login_shell = FALSE;
- context->keep_env = FALSE;
-
- context->description = NULL;
- context->message = NULL;
- context->grab = TRUE;
-
- context->debug = FALSE;
-
- context->sn_context = NULL;
-
- get_configuration_options (context);
-
- return context;
-}
-
-/**
- * gksu_context_set_user:
- * @context: the #GksuContext you want to modify
- * @username: the target username
- *
- * Sets up what user the command will be run as. The default
- * is root, but you can run the command as any user.
- *
- */
-void
-gksu_context_set_user (GksuContext *context, gchar *username)
-{
- g_assert (username != NULL);
-
- if (context->user)
- g_free (context->user);
- context->user = g_strdup (username);
-}
-
-/**
- * gksu_context_get_user:
- * @context: the #GksuContext from which to grab the information
- *
- * Gets the user the command will be run as, as set
- * by gksu_context_set_user.
- *
- * Returns: a string with the user or NULL if not set.
- */
-const gchar*
-gksu_context_get_user (GksuContext *context)
-{
- return context->user;
-}
-
-/**
- * gksu_context_set_command:
- * @context: the #GksuContext you want to modify
- * @command: the command that shall be ran
- *
- * Sets up what command will run with the target user.
- *
- */
-void
-gksu_context_set_command (GksuContext *context, gchar *command)
-{
- g_assert (command != NULL);
-
- if (context->command)
- g_free (context->command);
- context->command = g_strdup (command);
-}
-
-/**
- * gksu_context_get_command:
- * @context: the #GksuContext from which to grab the information
- *
- * Gets the command that will be run, as set by
- * gksu_context_set_command.
- *
- * Returns: a string with the command or NULL if not set.
- */
-const gchar*
-gksu_context_get_command (GksuContext *context)
-{
- return context->command;
-}
-
-/**
- * gksu_context_set_login_shell:
- * @context: the #GksuContext you want to modify
- * @value: TRUE or FALSE
- *
- * Should the shell in which the command will be run be
- * a login shell?
- */
-void
-gksu_context_set_login_shell (GksuContext *context, gboolean value)
-{
- context->login_shell = value;
-}
-
-/**
- * gksu_context_get_login_shell:
- * @context: the #GksuContext from which to grab the information
- *
- * Finds out if the shell created by the underlying su process
- * will be a login shell.
- *
- * Returns: TRUE if the shell will be a login shell, FALSE otherwise.
- */
-gboolean
-gksu_context_get_login_shell (GksuContext *context)
-{
- return context->login_shell;
-}
-
-/**
- * gksu_context_set_keep_env:
- * @context: the #GksuContext you want to modify
- * @value: TRUE or FALSE
- *
- * Should the environment be kept as it is? Defaults to
- * TRUE. Notice that setting this to FALSE may cause the
- * X authorization stuff to fail.
- */
-void
-gksu_context_set_keep_env (GksuContext *context, gboolean value)
-{
- context->keep_env = value;
-}
-
-/**
- * gksu_context_get_keep_env:
- * @context: the #GksuContext from which to grab the information
- *
- * Finds out if the environment in which the program will be
- * run will be reset.
- *
- * Returns: TRUE if the environment is going to be kept,
- * FALSE otherwise.
- */
-gboolean
-gksu_context_get_keep_env (GksuContext *context)
-{
- return context->keep_env;
-}
-
-/**
- * gksu_context_set_description:
- * @context: the #GksuContext you want to modify
- * @description: a string to set the description for
- *
- * Set the nice name for the action that is being run that the window
- * that asks for the password will have. This is only meant to be
- * used if the default window is used, of course.
- */
-void
-gksu_context_set_description (GksuContext *context, gchar *description)
-{
- if (context->description)
- g_free (context->description);
- context->description = g_strdup (description);
-}
-
-/**
- * gksu_context_get_description:
- * @context: the #GksuContext you want to get the description from.
- *
- * Get the description that the window will have when the
- * default function for requesting the password is
- * called.
- *
- * Returns: a string with the description or NULL if not set.
- */
-gchar*
-gksu_context_get_description (GksuContext *context)
-{
- return context->description;
-}
-
-/**
- * gksu_context_set_message:
- * @context: the #GksuContext you want to modify
- * @message: a string to set the message for
- *
- * Set the message that the window that asks for the password will have.
- * This is only meant to be used if the default window is used, of course.
- */
-void
-gksu_context_set_message (GksuContext *context, gchar *message)
-{
- if (context->message)
- g_free (context->message);
- context->message = g_strdup (message);
-}
-
-/**
- * gksu_context_get_message:
- * @context: the #GksuContext you want to get the message from.
- *
- * Get the message that the window will have when the
- * default function for requesting the password is
- * called.
- *
- * Returns: a string with the message or NULL if not set.
- */
-gchar*
-gksu_context_get_message (GksuContext *context)
-{
- return context->message;
-}
-
-/**
- * gksu_context_set_debug:
- * @context: the #GksuContext you want to modify
- * @value: TRUE or FALSE
- *
- * Set up if debuging information should be printed.
- */
-void
-gksu_context_set_grab (GksuContext *context, gboolean value)
-{
- context->grab = value;
-}
-
-/**
- * gksu_context_get_grab:
- * @context: the #GksuContext you want to ask whether a grab will be done.
- *
- * Returns TRUE if gksu has been asked to do a grab on keyboard and mouse
- * when asking for the password.
- *
- * Returns: TRUE if yes, FALSE otherwise.
- */
-gboolean
-gksu_context_get_grab (GksuContext *context)
-{
- return context->grab;
-}
-
-/**
- * gksu_context_set_debug:
- * @context: the #GksuContext you want to modify
- * @value: TRUE or FALSE
- *
- * Set up if debuging information should be printed.
- */
-void
-gksu_context_set_debug (GksuContext *context, gboolean value)
-{
- context->debug = value;
-}
-
-/**
- * gksu_context_get_debug:
- * @context: the #GksuContext from which to grab the information
- *
- * Finds out if the library is configured to print debuging
- * information.
- *
- * Returns: TRUE if it is, FALSE otherwise.
- */
-gboolean
-gksu_context_get_debug (GksuContext *context)
-{
- return context->debug;
-}
-
-/**
- * gksu_context_free
- * @context: the #GksuContext to be freed.
- *
- * Frees the given #GksuContext.
- */
-void
-gksu_context_free (GksuContext *context)
-{
- g_free (context->xauth);
- g_free (context->dir);
- g_free (context->display);
-
- g_object_unref (context->gconf_client);
-
- g_free (context->description);
- g_free (context->message);
-
- g_free (context->user);
- g_free (context->command);
-
- g_free (context);
-}
-
-/**
- * gksu_su_full:
- * @context: a #GksuContext
- * @ask_pass: a #GksuAskPassFunc to be called when the lib determines
- * requesting a password is necessary; it may be NULL, in which case
- * the standard password request dialog will be used
- * @ask_pass_data: a #gpointer with user data to be passed to the
- * #GksuAskPasswordFunc
- * @pass_not_needed: a #GksuPassNotNeededFunc that will be called
- * when the command is being run without the need for requesting
- * a password; it will only be called if the display-no-pass-info
- * gconf key is enabled; NULL will have the standard dialog be shown
- * @pass_not_needed_data: a #gpointer with the user data to be passed to the
- * #GksuPasswordNotNeededFunc
- * @error: a #GError object to be filled with the error code or NULL
- *
- * This could be considered one of the main functions in GKSu.
- * it is responsible for doing the 'user changing' magic calling
- * the #GksuAskPassFunc function to request a password if needed.
- * and the #GksuPassNotNeededFunc function if a password won't be
- * needed, so the application has the oportunity of warning the user
- * what it's doing.
- *
- * This function uses su as backend.
- *
- * Returns: TRUE if all went fine, FALSE if failed
- */
-gboolean
-gksu_su_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error)
-{
- GQuark gksu_quark;
- int i = 0;
-
- gchar auxcommand[] = PREFIX "/lib/" PACKAGE "/gksu-run-helper";
-
- int fdpty;
- pid_t pid;
-
- context->sudo_mode = FALSE;
-
- gksu_quark = g_quark_from_string (PACKAGE);
-
- if (!context->command)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_NOCOMMAND,
- _("gksu_run needs a command to be run, "
- "none was provided."));
- return FALSE;
- }
-
- if (!context->user)
- context->user = g_strdup ("root");
-
- if (!g_file_test (auxcommand, G_FILE_TEST_IS_EXECUTABLE))
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_HELPER,
- _("The gksu-run-helper command was not found or "
- "is not executable."));
- return FALSE;
- }
-
- if (!prepare_xauth (context))
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_XAUTH,
- _("Unable to copy the user's Xauthorization file."));
- return FALSE;
- }
-
- if(context->sn_context)
- {
- gchar *sid = g_strdup_printf ("%s",sn_launcher_context_get_startup_id (context->sn_context));
- if (context->debug)
- fprintf (stderr, "STARTUP_ID: %s\n", sid);
- setenv ("DESKTOP_STARTUP_ID", sid, TRUE);
- g_free(sid);
- }
-
- pid = forkpty (&fdpty, NULL, NULL, NULL);
- if (pid == 0)
- {
- gchar **cmd = g_malloc (sizeof(gchar*)*7);
-
- cmd[i] = g_strdup ("/bin/su"); i++;
- if (context->login_shell)
- {
- cmd[i] = g_strdup ("-"); i++;
- }
- cmd[i] = g_strdup (context->user); i++;
- if (context->keep_env)
- {
- cmd[i] = g_strdup ("-p"); i++;
- }
- cmd[i] = g_strdup ("-c"); i++;
-
- /* needs to get X authorization prior to running the program */
- cmd[i] = g_strdup_printf ("%s \"%s\"", auxcommand,
- context->command); i++;
-
- cmd[i] = NULL;
-
- /* executes the command */
- if (execv (cmd[0], cmd) == -1)
- {
- fprintf (stderr,
- "Unable to run /bin/su: %s",
- strerror(errno));
- }
-
- for (i = 0 ; cmd[i] != NULL ; i++)
- g_free (cmd[i]);
- g_free(cmd);
- }
- else if (pid == -1)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_FORK,
- _("Failed to fork new process: %s"),
- strerror(errno));
- return FALSE;
- }
- else
- {
- fd_set rfds;
-
- struct timeval tv;
-
- struct passwd *pwd = NULL;
- gint target_uid = -1;
- gint my_uid = 0;
-
- gchar buf[256] = {0};
- gint status;
-
- gchar *password = NULL;
- gchar *cmdline = NULL;
- gboolean password_needed = FALSE;
- gboolean used_gnome_keyring = FALSE;
-
- my_uid = getuid();
- pwd = getpwnam (context->user);
- if (pwd)
- target_uid = pwd->pw_uid;
-
- if (ask_pass == NULL)
- {
- ask_pass = su_ask_password;
- }
-
- if (pass_not_needed == NULL)
- {
- pass_not_needed = no_pass;
- }
-
- /* no need to ask for password if we're already root */
- if (my_uid != target_uid && my_uid)
- {
- struct termios tio;
-
- usleep (100);
- read (fdpty, buf, 255);
- if (context->debug)
- fprintf (stderr, "gksu_context_run: buf: -%s-\n", buf);
-
- usleep (100);
-
- tcgetattr (fdpty, &tio);
-
- if (!(tio.c_lflag & ECHO))
- {
- gchar *tmp = NULL;
-
- gboolean prompt_grab;
- prompt_grab = gconf_client_get_bool (context->gconf_client, BASE_PATH "prompt",
- NULL);
- if (prompt_grab)
- gksu_prompt_grab (context);
-
- /* try to get the password from the GNOME Keyring first */
- tmp = get_gnome_keyring_password (context);
- if (context->debug)
- fprintf (stderr, "tmp: %s\n", tmp);
- if (tmp == NULL)
- tmp = ask_pass (context, buf, ask_pass_data, error);
- else
- used_gnome_keyring = TRUE;
- if (context->debug)
- fprintf (stderr, "tmp: %s\n", tmp);
- if (tmp == NULL || (*error))
- {
- if (context->debug)
- fprintf (stderr, "gksu_su_full: problem getting password - getting out\n");
- if (context->debug && error)
- fprintf (stderr, "error: %s\n", (*error)->message);
- nullify_password (password);
- return TRUE;
- }
-
- usleep (100);
-
- password = g_strdup_printf ("%s\n", tmp);
- nullify_password (tmp);
-
- write (fdpty, password, strlen(password));
- password_needed = TRUE;
- }
- }
-
- if (context->debug)
- fprintf (stderr, "DEBUG (run:after-pass) buf: -%s-\n", buf);
- if (strncmp (buf, "gksu", 4) && strncmp (buf, "su", 2))
- {
- /* drop the \n echoed on password entry if su did request
- a password */
- if (password_needed)
- read (fdpty, buf, 255);
- if (context->debug)
- fprintf (stderr, "DEBUG (run:post-after-pass) buf: -%s-\n", buf);
- read (fdpty, buf, 255);
- if (context->debug)
- fprintf (stderr, "DEBUG (run:post-after-pass) buf: -%s-\n", buf);
- }
-
- if (!strncmp (buf, "su", 2))
- {
- gchar **strings;
-
- if (password)
- {
- nullify_password (password);
- unset_gnome_keyring_password (context);
- }
-
- strings = g_strsplit (buf, ":", 2);
- if (strings[1] && !strncmp (strings[1], " Authentication failure", 23))
- g_set_error (error, gksu_quark,
- GKSU_ERROR_WRONGPASS,
- _("Wrong password."));
- g_strfreev (strings);
-
- if (context->debug)
- fprintf (stderr, "DEBUG (auth_failed) buf: -%s-\n", buf);
- }
- else if (!strncmp (buf, "gksu: waiting", 13))
- {
- gchar *line;
-
- if (password)
- {
- set_gnome_keyring_password (context, password);
- nullify_password (password);
- }
-
- if (context->debug)
- fprintf (stderr, "DEBUG (gksu: waiting) buf: -%s-\n", buf);
-
- line = g_strdup_printf ("gksu-run: %s\n", context->display);
- write (fdpty, line, strlen(line));
- g_free (line);
-
- line = g_strdup_printf ("gksu-run: %s\n", context->xauth);
- write (fdpty, line, strlen(line));
- g_free (line);
-
- tcdrain (fdpty);
-
- bzero (buf, 256);
- read (fdpty, buf, 255);
- }
- else
- {
- gchar *emsg = NULL;
- gchar *converted_str = NULL;
- GError *converr = NULL;
-
- if (password)
- nullify_password (password);
-
- converted_str = g_locale_to_utf8 (buf, -1, NULL, NULL, &converr);
- if (converr)
- {
- g_warning (_("Failed to communicate with "
- "gksu-run-helper.\n\n"
- "Received:\n"
- " %s\n"
- "While expecting:\n"
- " %s"), buf, "gksu: waiting");
- emsg = g_strdup_printf (_("Failed to communicate with "
- "gksu-run-helper.\n\n"
- "Received bad string "
- "while expecting:\n"
- " %s"), "gksu: waiting");
- g_error_free (converr);
- }
- else
- emsg = g_strdup_printf (_("Failed to communicate with "
- "gksu-run-helper.\n\n"
- "Received:\n"
- " %s\n"
- "While expecting:\n"
- " %s"), converted_str, "gksu: waiting");
- g_free (converted_str);
-
- g_set_error (error, gksu_quark, GKSU_ERROR_HELPER, emsg);
- g_free (emsg);
-
- if (context->debug)
- fprintf (stderr, "DEBUG (failed!) buf: -%s-\n", buf);
-
- return FALSE;
- }
-
- if (!password_needed || used_gnome_keyring)
- {
- gboolean should_display;
-
- should_display = gconf_client_get_bool (context->gconf_client,
- BASE_PATH "display-no-pass-info", NULL);
-
- /* configuration tells us to show this message */
- if (should_display)
- {
- if (context->debug)
- fprintf (stderr, "Calling pass_not_needed window...\n");
- pass_not_needed (context, pass_not_needed_data);
- /* make sure it is displayed */
- while (gtk_events_pending ())
- gtk_main_iteration ();
- }
- }
-
- FD_ZERO(&rfds);
- FD_SET(fdpty, &rfds);
-
- tv.tv_sec = 0;
- tv.tv_usec = 100;
-
- while (!waitpid (pid, &status, WNOHANG))
- {
- bzero (buf, 256);
- usleep (200);
-
- if (cmdline)
- g_free (cmdline);
- cmdline = get_process_name (pid);
-
- usleep(1000);
-
- if (select (fdpty+1, &rfds, NULL, NULL, &tv) < 0)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_PIPEREAD,
- _("Could not read from the pipe "
- "with the child: %s"),
- strerror(errno));
- return FALSE;
- }
-
- if(FD_ISSET(fdpty, &rfds))
- {
- bzero(buf, 256);
- read (fdpty, buf, 255);
- fprintf (stderr, "%s", buf);
- }
- else
- FD_SET(fdpty, &rfds);
- }
-
- while (1)
- {
- bzero(buf, 256);
- if(read (fdpty, buf, 255) <= 0)
- break;
- fprintf (stderr, "%s", buf);
- }
-
- if (WIFEXITED(status))
- {
- if (WEXITSTATUS(status))
- {
- if(cmdline)
- {
- /* su already exec()ed something else, don't report
- * exit status errors in that case
- */
- if (!g_str_has_suffix (cmdline, "su\n"))
- {
- g_free (cmdline);
- return FALSE;
- }
- g_free (cmdline);
- }
-
- if (error == NULL)
- g_set_error (error, gksu_quark,
- GKSU_ERROR_CHILDFAILED,
- _("su terminated with %d status"),
- WEXITSTATUS(status));
- }
- }
- }
-
- if (error)
- return FALSE;
-
- return TRUE;
-}
-
-/**
- * gksu_su
- * @command_line: the command line that will be executed as other user
- * @error: a #GError to be set with the error condition, if an error
- * happens
- *
- * This function is a wrapper for gksu_su_run_full. It will call it
- * without giving the callback functions, which leads to the standard
- * ones being called. A simple #GksuContext is created to hold the
- * user name and the command.
- *
- * Returns: TRUE if all went well, FALSE if an error happend.
- */
-gboolean
-gksu_su (gchar *command_line, GError **error)
-{
- GksuContext *context = gksu_context_new ();
- gboolean retval;
-
- context->command = g_strdup (command_line);
- context->user = g_strdup ("root");
- retval = gksu_su_full (context,
- NULL, NULL,
- NULL, NULL,
- error);
- gksu_context_free (context);
- return retval;
-}
-
-/**
- * gksu_sudo_full:
- * @context: a #GksuContext
- * @ask_pass: a #GksuAskPassFunc to be called when the lib determines
- * requesting a password is necessary; it may be NULL, in which case
- * the standard password request dialog will be used
- * @ask_pass_data: a #gpointer with user data to be passed to the
- * #GksuAskPasswordFunc
- * @pass_not_needed: a #GksuPassNotNeededFunc that will be called
- * when the command is being run without the need for requesting
- * a password; it will only be called if the display-no-pass-info
- * gconf key is enabled; NULL will have the standard dialog be shown
- * @pass_not_needed_data: a #gpointer with the user data to be passed to the
- * #GksuPasswordNotNeededFunc
- * @error: a #GError object to be filled with the error code or NULL
- *
- * This could be considered one of the main functions in GKSu.
- * it is responsible for doing the 'user changing' magic calling
- * the #GksuAskPassFunc function to request a password if needed.
- * and the #GksuPassNotNeededFunc function if a password won't be
- * needed, so the application has the oportunity of warning the user
- * what it's doing.
- *
- * This function uses the sudo backend.
- *
- * Returns: TRUE if all went fine, FALSE if failed
- */
-gboolean
-gksu_sudo_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error)
-{
- char **cmd;
- char buffer[256] = {0};
- int argcount = 8;
- int i, j;
-
- GQuark gksu_quark;
-
- gchar *xauth = NULL,
- *xauth_env = NULL;
-
- pid_t pid;
- int status;
- size_t r;
- FILE *infile, *outfile;
- int parent_pipe[2]; /* For talking to the parent */
- int child_pipe[2]; /* For talking to the child */
-
- context->sudo_mode = TRUE;
-
- gksu_quark = g_quark_from_string (PACKAGE);
-
- if (!context->command)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_NOCOMMAND,
- _("gksu_sudo_run needs a command to be run, "
- "none was provided."));
- return FALSE;
- }
-
- if (!context->user)
- context->user = g_strdup ("root");
-
- if (ask_pass == NULL)
- {
- if (context->debug)
- fprintf (stderr, "No ask_pass set, using default!\n");
- ask_pass = su_ask_password;
- }
-
- if (pass_not_needed == NULL)
- {
- pass_not_needed = no_pass;
- }
-
- /*
- FIXME: need to set GError in a more detailed way
- */
- if (!sudo_prepare_xauth (context))
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_XAUTH,
- _("Unable to copy the user's Xauthorization file."));
- return FALSE;
- }
-
- /* sets XAUTHORITY */
- xauth = g_strdup_printf ("%s/.Xauthority", context->dir);
- xauth_env = getenv ("XAUTHORITY");
- setenv ("XAUTHORITY", xauth, TRUE);
-
- /* set startup id */
- if(context->sn_context)
- {
- gchar *sid = g_strdup_printf ("%s",sn_launcher_context_get_startup_id (context->sn_context));
- if (context->debug)
- fprintf (stderr, "STARTUP_ID: %s\n", sid);
- setenv ("DESKTOP_STARTUP_ID", sid, TRUE);
- g_free(sid);
- }
- if (context->debug)
- fprintf (stderr, "xauth: %s\n", xauth);
-
- cmd = g_new (gchar *, argcount + 1);
-
- argcount = 0;
-
- /* sudo binary */
- cmd[argcount] = g_strdup("/usr/bin/sudo");
- argcount++;
-
- if (!context->keep_env)
- {
- /* Make sudo set $HOME */
- cmd[argcount] = g_strdup("-H");
- argcount++;
- }
-
- /* Make sudo read from stdin */
- cmd[argcount] = g_strdup("-S");
- argcount++;
-
- /* Make sudo use next arg as prompt */
- cmd[argcount] = g_strdup("-p");
- argcount++;
-
- /* prompt */
- cmd[argcount] = g_strdup("GNOME_SUDO_PASS");
- argcount++;
-
- /* Make sudo use the selected user */
- cmd[argcount] = g_strdup("-u");
- argcount++;
-
- /* user */
- cmd[argcount] = g_strdup(context->user);
- argcount++;
-
- /* sudo does not understand this if we do not use -H
- weird.
- */
- if (!context->keep_env)
- {
- /* Make sudo stop processing options */
- cmd[argcount] = g_strdup("--");
- argcount++;
- }
-
- {
- gchar *tmp_arg = g_malloc (sizeof(gchar)*1);
- gboolean inside_quotes = FALSE;
-
- tmp_arg[0] = '\0';
-
- for (i = j = 0; ; i++)
- {
- if ((context->command[i] == '\'') && (context->command[i-1] != '\\'))
- {
- i = i + 1;
- inside_quotes = !inside_quotes;
- }
-
- if ((context->command[i] == ' ' && inside_quotes == FALSE)
- || context->command[i] == '\0')
- {
- tmp_arg = g_realloc (tmp_arg, sizeof(gchar)*(j+1));
- tmp_arg[j] = '\0';
- cmd = g_realloc (cmd, sizeof(gchar*) * (argcount + 1));
- cmd[argcount] = g_strdup (tmp_arg);
-
- g_free (tmp_arg);
-
- argcount = argcount + 1;
- j = 0;
-
- if (context->command[i] == '\0')
- break;
-
- tmp_arg = g_malloc (sizeof(gchar)*1);
- tmp_arg[0] = '\0';
- }
- else
- {
- if (context->command[i] == '\\')
- i = i + 1;
- tmp_arg = g_realloc (tmp_arg, sizeof(gchar)*(j+1));
- tmp_arg[j] = context->command[i];
- j = j + 1;
- }
- }
- }
- cmd = g_realloc (cmd, sizeof(gchar*) * (argcount + 1));
- cmd[argcount] = NULL;
-
- if (context->debug)
- {
- for (i = 0; cmd[i] != NULL; i++)
- fprintf (stderr, "cmd[%d]: %s\n", i, cmd[i]);
- }
-
- if ((pipe(parent_pipe)) == -1)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_PIPE,
- _("Error creating pipe: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
-
- if ((pipe(child_pipe)) == -1)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_PIPE,
- _("Error creating pipe: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
-
- pid = fork();
- if (pid == -1)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_FORK,
- _("Failed to fork new process: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
- else if (pid == 0)
- {
- // Child
- setsid(); // make us session leader
- close(child_pipe[1]);
- dup2(child_pipe[0], STDIN_FILENO);
- dup2(parent_pipe[1], STDERR_FILENO);
-
- execv(cmd[0], cmd);
-
- g_set_error (error, gksu_quark, GKSU_ERROR_EXEC,
- _("Failed to exec new process: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
- else
- {
- gchar *cmdline = NULL;
-
- // Parent
- close(parent_pipe[1]);
-
- infile = fdopen(parent_pipe[0], "r");
- if (!infile)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_PIPE,
- _("Error opening pipe: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
-
- outfile = fdopen(child_pipe[1], "w");
- if (!outfile)
- {
- g_set_error (error, gksu_quark, GKSU_ERROR_PIPE,
- _("Error opening pipe: %s"),
- strerror(errno));
- sudo_reset_xauth (context, xauth, xauth_env);
- return FALSE;
- }
-
- /*
- we are expecting to receive a GNOME_SUDO_PASS
- if we don't there are two possibilities: an error
- or a password is not needed
- */
- fcntl (parent_pipe[0], F_SETFL, O_NONBLOCK);
- r = read(parent_pipe[0], buffer, 16);
-
- if (context->debug)
- fprintf (stderr, "buffer: -%s-\n", buffer);
-
- if (strncmp(buffer, "GNOME_SUDO_PASS", 15) == 0)
- {
- gchar *password = NULL;
- gboolean prompt_grab;
-
- if (context->debug)
- fprintf (stderr, "Yeah, we're in...\n");
-
- prompt_grab = gconf_client_get_bool (context->gconf_client, BASE_PATH "prompt",
- NULL);
- if (prompt_grab)
- gksu_prompt_grab (context);
-
- password = ask_pass (context, _("Password: "),
- ask_pass_data, error);
- if (password == NULL || (*error))
- {
- nullify_password (password);
- return FALSE;
- }
-
- usleep (100);
-
- fprintf (outfile, "%s\n", password);
- fclose (outfile);
-
- nullify_password (password);
-
- /* ignore the newline that comes right after sudo receives
- the password
- */
- fgets (buffer, 255, infile);
- fgets (buffer, 255, infile);
- }
- else
- {
- gboolean should_display;
- if (context->debug)
- fprintf (stderr, "No password prompt found; we'll assume we don't need a password.\n");
-
- should_display = gconf_client_get_bool (context->gconf_client,
- BASE_PATH "display-no-pass-info", NULL);
-
- /* configuration tells us to show this message */
- if (should_display)
- {
- if (context->debug)
- fprintf (stderr, "Calling pass_not_needed window...\n");
- pass_not_needed (context, pass_not_needed_data);
- /* make sure it is displayed */
- while (gtk_events_pending ())
- gtk_main_iteration ();
- }
-
- fprintf (stderr, "%s", buffer);
- }
-
- if (!strcmp (buffer, "Sorry, try again.\n"))
- g_set_error (error, gksu_quark, GKSU_ERROR_WRONGPASS,
- _("Wrong password."));
- else if (!strncmp (buffer, "Sorry, user ", 12))
- g_set_error (error, gksu_quark, GKSU_ERROR_NOT_ALLOWED,
- _("The underlying authorization mechanism (sudo) "
- "does not allow you to run this program. Contact "
- "the system administrator."));
- else
- {
- gchar *haystack = buffer;
- gchar *needle;
-
- needle = g_strstr_len (haystack, strlen (haystack), " ");
- if (needle && (needle + 1))
- {
- needle += 1;
- if (!strncmp (needle, "is not in", 9))
- g_set_error (error, gksu_quark, GKSU_ERROR_NOT_ALLOWED,
- _("The underlying authorization mechanism (sudo) "
- "does not allow you to run this program. Contact "
- "the system administrator."));
- }
- }
-#if 0
- // stop startup notification (we may want something smarter here,
- // like using SnMonitorContext)
- if(context->sn_context)
- sn_launcher_context_complete(context->sn_context);
-#endif
- while (!waitpid (pid, &status, WNOHANG))
- {
- if (cmdline)
- g_free (cmdline);
- cmdline = get_process_name (pid);
-
- usleep(1000);
-
- bzero(buffer, 256);
- if(!fgets (buffer, 255, infile))
- continue;
- fprintf (stderr, "%s", buffer);
- }
-
- /* make sure we did read everything */
- while (1)
- {
- bzero(buffer, 256);
- if(!fread (buffer, sizeof(gchar), 255, infile))
- break;
- fprintf (stderr, "%s", buffer);
- fflush (stderr);
- }
-
- sudo_reset_xauth (context, xauth, xauth_env);
-
- if (WIFEXITED(status))
- {
- if (WEXITSTATUS(status))
- {
- if(cmdline)
- {
- /* sudo already exec()ed something else, don't report
- * exit status errors in that case
- */
- if (!g_str_has_suffix (cmdline, "sudo\n"))
- {
- g_free (cmdline);
- return FALSE;
- }
- g_free (cmdline);
- }
-
- if (error == NULL)
- g_set_error (error, gksu_quark,
- GKSU_ERROR_CHILDFAILED,
- _("sudo terminated with %d status"),
- WEXITSTATUS(status));
- }
- }
- }
-
- /* if error is set we have found an error condition */
- if (error)
- return FALSE;
-
- return TRUE;
-}
-
-/**
- * gksu_sudo
- * @command_line: the command line that will be executed as other user
- * @error: a #GError to be set with the error condition, if an error
- * happens
- *
- * This function is a wrapper for gksu_sudo_run_full. It will call it
- * without giving the callback functions, which leads to the standard
- * ones being called. A simple #GksuContext is created to hold the
- * user name and the command.
- *
- * Returns: TRUE if all went well, FALSE if an error happend.
- */
-gboolean
-gksu_sudo (gchar *command_line,
- GError **error)
-{
- GksuContext *context = gksu_context_new ();
- gboolean retval;
-
- context->command = g_strdup (command_line);
- context->user = g_strdup ("root");
- retval = gksu_sudo_full (context,
- NULL, NULL,
- NULL, NULL,
- error);
- gksu_context_free (context);
-
- return retval;
-}
-
-/**
- * gksu_run_full:
- * @context: a #GksuContext
- * @ask_pass: a #GksuAskPassFunc to be called when the lib determines
- * requesting a password is necessary; it may be NULL, in which case
- * the standard password request dialog will be used
- * @ask_pass_data: a #gpointer with user data to be passed to the
- * #GksuAskPasswordFunc
- * @pass_not_needed: a #GksuPassNotNeededFunc that will be called
- * when the command is being run without the need for requesting
- * a password; it will only be called if the display-no-pass-info
- * gconf key is enabled; NULL will have the standard dialog be shown
- * @pass_not_needed_data: a #gpointer with the user data to be passed to the
- * #GksuPasswordNotNeededFunc
- * @error: a #GError object to be filled with the error code or NULL
- *
- * This function is a wrapper for gksu_sudo_full/gksu_su_full. It will
- * call one of them, depending on the GConf key that defines whether
- * the default behavior for gksu is su or sudo mode. This is the
- * recommended way of using the library functionality.
- *
- * Returns: TRUE if all went fine, FALSE if failed
- */
-gboolean
-gksu_run_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error)
-{
- GConfClient *gconf_client;
- gboolean sudo_mode;
-
- gconf_client = gconf_client_get_default ();
- sudo_mode = gconf_client_get_bool (gconf_client, BASE_PATH "sudo-mode",
- NULL);
- g_object_unref (gconf_client);
-
- if (sudo_mode)
- return gksu_sudo_full (context, ask_pass, ask_pass_data,
- pass_not_needed, pass_not_needed_data,
- error);
-
- return gksu_su_full (context, ask_pass, ask_pass_data,
- pass_not_needed, pass_not_needed_data,
- error);
-}
-
-/**
- * gksu_run
- * @command_line: the command line that will be executed as other user
- * @error: a #GError to be set with the error condition, if an error
- * happens
- *
- * This function is a wrapper for gksu_sudo/gksu_su. It will call one
- * of them, depending on the GConf key that defines whether the default
- * behavior for gksu is su or sudo mode. This is the recommended way of
- * using the library functionality.
- *
- * Returns: FALSE if all went well, TRUE if an error happend.
- */
-gboolean
-gksu_run (gchar *command_line,
- GError **error)
-{
- GConfClient *gconf_client;
- gboolean sudo_mode;
-
- gconf_client = gconf_client_get_default ();
- sudo_mode = gconf_client_get_bool (gconf_client, BASE_PATH "sudo-mode",
- NULL);
- g_object_unref (gconf_client);
-
- if (sudo_mode)
- return gksu_sudo (command_line, error);
-
- return gksu_su (command_line, error);
-}
-
-/**
- * gksu_ask_password_full:
- * @context: a #GksuContext
- * @prompt: a prompt different from Password:
- * @error: a #GError object to be filled with the error code or NULL
- *
- * This function uses the gksu infra-structure to request for a
- * password, but instead of passing it to su or sudo to run a command
- * it simply returns the password.
- *
- * Returns: a newly allocated string with the password;
- */
-gchar*
-gksu_ask_password_full (GksuContext *context, gchar *prompt,
- GError **error)
-{
- return su_ask_password (context, prompt, NULL, error);
-}
-
-/**
- * gksu_ask_password
- * @error: a #GError to be set with the error condition, if an error
- * happens
- *
- * This function uses the gksu infra-structure to request for a
- * password, but instead of passing it to su or sudo to run a command
- * it simply returns the password. This is just a convenience wrapper
- * for gksu_ask_password_full.
- *
- * Returns: a newly allocated string with the password;
- */
-gchar*
-gksu_ask_password (GError **error)
-{
- GksuContext *context = gksu_context_new ();
- gchar* retval;
-
- context->user = g_strdup ("root");
- retval = gksu_ask_password_full (context, NULL, error);
- gksu_context_free (context);
-
- return retval;
-}
Copied: libgksu/tags/1.9.5/libgksu/libgksu.c (from rev 651, libgksu/trunk/libgksu/libgksu.c)
Deleted: libgksu/tags/1.9.5/libgksu/libgksu.h
===================================================================
--- libgksu/trunk/libgksu/libgksu.h 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/libgksu/libgksu.h 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,199 +0,0 @@
-/*
- * Gksu -- a library providing access to su functionality
- * Copyright (C) 2004 Gustavo Noronha Silva
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GKSU_CONTEXT_H__
-#define __GKSU_CONTEXT_H__
-
-#include <glib.h>
-#include <glib-object.h>
-
-#define SN_API_NOT_YET_FROZEN
-#include <libsn/sn.h>
-
-#include <gtk/gtk.h>
-
-#include <gconf/gconf-client.h>
-
-G_BEGIN_DECLS
-
-typedef struct
-{
- /*
- * Protected
- */
-
- /* Xauth stuff */
- gchar *xauth;
- gchar *dir;
- gchar *display;
-
- gboolean sudo_mode;
-
- GConfClient *gconf_client;
-
- /* what to run, with whose powers */
- gchar *user;
- gchar *command;
-
- gboolean login_shell;
- gboolean keep_env;
-
- /* UI options */
- gchar *description;
- gchar *message;
- gboolean grab;
-
- /* startup notification */
- SnLauncherContext *sn_context;
-
- gboolean debug;
-} GksuContext;
-
-typedef enum
-{
- GKSU_ERROR_XAUTH,
- GKSU_ERROR_HELPER,
- GKSU_ERROR_NOCOMMAND,
- GKSU_ERROR_NOPASSWORD,
- GKSU_ERROR_FORK,
- GKSU_ERROR_EXEC,
- GKSU_ERROR_PIPE,
- GKSU_ERROR_PIPEREAD,
- GKSU_ERROR_WRONGPASS,
- GKSU_ERROR_CHILDFAILED,
- GKSU_ERROR_NOT_ALLOWED,
- GKSU_ERROR_CANCELED
-} GksuError;
-
-typedef
-gchar*
-(*GksuAskPassFunc) (GksuContext *context, gchar *prompt,
- gpointer user_data, GError**);
-
-typedef
-void
-(*GksuPassNotNeededFunc) (GksuContext *context, gpointer user_data);
-
-GksuContext*
-gksu_context_new ();
-
-/*
- getters and setters for the configuration
- options
-*/
-void
-gksu_context_set_user (GksuContext *context, gchar *username);
-
-const gchar*
-gksu_context_get_user (GksuContext *context);
-
-void
-gksu_context_set_command (GksuContext *context, gchar *command);
-
-const gchar*
-gksu_context_get_command (GksuContext *context);
-
-void
-gksu_context_set_login_shell (GksuContext *context, gboolean value);
-
-gboolean
-gksu_context_get_login_shell (GksuContext *context);
-
-void
-gksu_context_set_keep_env (GksuContext *context, gboolean value);
-
-gboolean
-gksu_context_get_keep_env (GksuContext *context);
-
-void
-gksu_context_set_description (GksuContext *context, gchar *description);
-
-gchar*
-gksu_context_get_description (GksuContext *context);
-
-void
-gksu_context_set_message (GksuContext *context, gchar *message);
-
-gchar*
-gksu_context_get_message (GksuContext *context);
-
-void
-gksu_context_set_grab (GksuContext *context, gboolean value);
-
-gboolean
-gksu_context_get_grab (GksuContext *context);
-
-void
-gksu_context_set_debug (GksuContext *context, gboolean value);
-
-gboolean
-gksu_context_get_debug (GksuContext *context);
-
-void
-gksu_context_free (GksuContext *context);
-
-gboolean
-gksu_su_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error);
-
-gboolean
-gksu_su (gchar *command_line,
- GError **error);
-
-gboolean
-gksu_sudo_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error);
-
-gboolean
-gksu_sudo (gchar *command_line,
- GError **error);
-
-
-gboolean
-gksu_run_full (GksuContext *context,
- GksuAskPassFunc ask_pass,
- gpointer ask_pass_data,
- GksuPassNotNeededFunc pass_not_needed,
- gpointer pass_not_needed_data,
- GError **error);
-
-gboolean
-gksu_run (gchar *command_line,
- GError **error);
-
-gchar*
-gksu_ask_password_full (GksuContext *context,
- gchar *prompt,
- GError **error);
-
-gchar*
-gksu_ask_password (GError **error);
-
-G_END_DECLS
-
-#endif
Copied: libgksu/tags/1.9.5/libgksu/libgksu.h (from rev 651, libgksu/trunk/libgksu/libgksu.h)
Deleted: libgksu/tags/1.9.5/libgksuui/gksuui-dialog.c
===================================================================
--- libgksu/trunk/libgksuui/gksuui-dialog.c 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/libgksuui/gksuui-dialog.c 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,452 +0,0 @@
-/*
- * libgksuui -- Gtk+ widget and convenience functions for requesting passwords
- * Copyright (C) 2004 Gustavo Noronha Silva
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <string.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-#include <X11/XKBlib.h>
-
-#include <gconf/gconf-client.h>
-
-#include "defines.h"
-#include "../config.h"
-
-#include "gksuui-dialog.h"
-
-static void
-gksuui_dialog_class_init (GksuuiDialogClass *klass);
-
-static void
-gksuui_dialog_init (GksuuiDialog *gksuui_dialog);
-
-GType
-gksuui_dialog_get_type (void)
-{
- static GType type = 0;
-
- if (type == 0)
- {
- static const GTypeInfo info =
- {
- sizeof (GksuuiDialogClass), /* size of class */
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gksuui_dialog_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GksuuiDialog), /* size of object */
- 0, /* n_preallocs */
- (GInstanceInitFunc) gksuui_dialog_init /* instance_init */
- };
- type = g_type_register_static (gtk_dialog_get_type (),
- "GksuuiDialogType",
- &info, 0);
- }
-
- return type;
-}
-
-static void
-gksuui_dialog_class_init (GksuuiDialogClass *klass)
-{
-}
-
-/**
- * Helper that can detect if caps lock is pressed
- */
-static gboolean
-is_capslock_on (void)
-{
- XkbStateRec states;
- Display *dsp;
-
- dsp = GDK_DISPLAY ();
- if (XkbGetState (dsp, XkbUseCoreKbd, &states) != Success)
- return FALSE;
-
- return (states.locked_mods & LockMask) != 0;
-}
-
-static gboolean
-verify_capslock_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
-{
- GksuuiDialog *dialog = user_data;
-
- if (is_capslock_on ())
- gtk_widget_show (dialog->label_warn_capslock);
- else
- gtk_widget_hide (dialog->label_warn_capslock);
-
- return FALSE;
-}
-
-void
-set_sensitivity_cb (GtkWidget *button, gpointer data)
-{
- GtkWidget *widget = (GtkWidget*)data;
- gboolean sensitive;
-
- sensitive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
- gtk_widget_set_sensitive (widget, sensitive);
-}
-
-static void
-cb_toggled_cb (GtkWidget *button, gpointer data)
-{
- GConfClient *gconf_client;
- gchar *key;
- gboolean toggled;
- gchar *key_name;
-
- g_return_if_fail (data != NULL);
-
- key_name = (gchar*)data;
-
- gconf_client = gconf_client_get_default ();
- toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
-
- key = g_strdup_printf (BASE_PATH "%s", key_name);
-
- if (!strcmp (key_name, "save-keyring"))
- {
- if (toggled)
- gconf_client_set_string (gconf_client, key, "session", NULL);
- else
- gconf_client_set_string (gconf_client, key, "default", NULL);
- }
- else
- gconf_client_set_bool (gconf_client, key, toggled, NULL);
-
- g_object_unref (gconf_client);
-
- g_free (key);
-}
-
-static void
-gksuui_dialog_init (GksuuiDialog *gksuui_dialog)
-{
- GtkDialog *dialog;
- GtkWidget *hbox; /* aditional hbox for 'password: entry' label */
-
- /* gnome-keyring stuff */
- GtkWidget *vbox;
- GtkWidget *check_button;
- GtkWidget *alignment;
- GtkWidget *radio_vbox;
- GtkWidget *radio_session, *radio_default;
-
- GConfClient *gconf_client;
- gboolean remember_password;
- gchar *tmp = NULL;
-
- /*
- make sure we're using UTF-8 and getting our locale files
- from the right place
- */
- bindtextdomain(PACKAGE_NAME, LOCALEDIR);
- bind_textdomain_codeset (PACKAGE_NAME, "UTF-8");
-
- gtk_widget_push_composite_child ();
-
- /* dialog window */
- dialog = GTK_DIALOG(gksuui_dialog);
-
- gksuui_dialog->main_vbox = dialog->vbox;
-
- gtk_window_set_title (GTK_WINDOW(gksuui_dialog), "");
- gtk_dialog_set_has_separator (GTK_DIALOG(gksuui_dialog), FALSE);
- gtk_container_set_border_width (GTK_CONTAINER(gksuui_dialog), 6);
- gtk_box_set_spacing (GTK_BOX(gksuui_dialog->main_vbox), 12);
- gtk_window_set_resizable (GTK_WINDOW(gksuui_dialog), FALSE);
-
- /* skip taskbar and pager hint */
- gtk_window_set_skip_pager_hint (GTK_WINDOW(gksuui_dialog), TRUE);
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW(gksuui_dialog), TRUE);
-
-
- /* center window */
- gtk_window_set_position (GTK_WINDOW(gksuui_dialog), GTK_WIN_POS_CENTER);
-
- /* the action buttons */
- /* the cancel button */
- gksuui_dialog->cancel_button = gtk_dialog_add_button (dialog,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- /* the ok button */
- gksuui_dialog->ok_button = gtk_dialog_add_button (dialog,
- GTK_STOCK_OK,
- GTK_RESPONSE_OK);
- gtk_widget_grab_default (gksuui_dialog->ok_button);
-
-
- /* hbox */
- gksuui_dialog->hbox = gtk_hbox_new (FALSE, 12);
- gtk_container_set_border_width (GTK_CONTAINER(gksuui_dialog->hbox), 6);
- gtk_box_pack_start (GTK_BOX(gksuui_dialog->main_vbox),
- gksuui_dialog->hbox, TRUE, TRUE, 0);
- gtk_widget_show (gksuui_dialog->hbox);
-
- /* image */
- gksuui_dialog->image =
- gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
- GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC(gksuui_dialog->image), 0.5, 0);
- gtk_box_pack_start (GTK_BOX(gksuui_dialog->hbox), gksuui_dialog->image,
- FALSE, FALSE, 0);
- gtk_widget_show (gksuui_dialog->image);
-
- /* vbox for label and entry */
- gksuui_dialog->entry_vbox = gtk_vbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX(gksuui_dialog->hbox), gksuui_dialog->entry_vbox,
- TRUE, TRUE, 0);
- gtk_widget_show (gksuui_dialog->entry_vbox);
-
- /* label */
- gksuui_dialog->label = gtk_label_new (_("<span weight=\"bold\" size=\"larger\">"
- "Type the root password.</span>\n"));
- gtk_label_set_use_markup (GTK_LABEL(gksuui_dialog->label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL(gksuui_dialog->label), TRUE);
- gtk_misc_set_alignment (GTK_MISC(gksuui_dialog->label), 0.0, 0);
- gtk_box_pack_start (GTK_BOX(gksuui_dialog->entry_vbox),
- gksuui_dialog->label, TRUE, TRUE, 0);
- gtk_widget_show (gksuui_dialog->label);
-
- /* hbox for entry and label */
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (gksuui_dialog->entry_vbox), hbox,
- TRUE, TRUE, 0);
- gtk_widget_show (hbox);
-
- /* entry label */
- gksuui_dialog->prompt_label = gtk_label_new (_("Password:"));
- gtk_box_pack_start (GTK_BOX(hbox), gksuui_dialog->prompt_label,
- FALSE, FALSE, 0);
- gtk_widget_show (gksuui_dialog->prompt_label);
-
- /* entry */
- gksuui_dialog->entry = gtk_entry_new();
- g_signal_connect (G_OBJECT(gksuui_dialog->entry), "key-press-event",
- G_CALLBACK(verify_capslock_cb), gksuui_dialog);
- g_signal_connect_swapped (G_OBJECT(gksuui_dialog->entry), "activate",
- G_CALLBACK(gtk_button_clicked),
- gksuui_dialog->ok_button);
- gtk_entry_set_visibility(GTK_ENTRY(gksuui_dialog->entry), FALSE);
- gtk_entry_set_invisible_char(GTK_ENTRY(gksuui_dialog->entry), 0x25cf);
- gtk_box_pack_start (GTK_BOX (hbox), gksuui_dialog->entry,
- TRUE, TRUE, 0);
- gtk_widget_show (gksuui_dialog->entry);
- gtk_widget_grab_focus(gksuui_dialog->entry);
-
- /* label capslock warning */
- gksuui_dialog->label_warn_capslock = gtk_label_new (_("<b>You have capslock on</b>"));
- gtk_label_set_justify (GTK_LABEL(gksuui_dialog->label_warn_capslock),
- GTK_JUSTIFY_CENTER);
- gtk_label_set_use_markup (GTK_LABEL(gksuui_dialog->label_warn_capslock), TRUE);
- gtk_box_pack_start (GTK_BOX(gksuui_dialog->entry_vbox),
- gksuui_dialog->label_warn_capslock, TRUE, TRUE, 0);
-
- /* gnome-keyring stuff */
- gconf_client = gconf_client_get_default ();
-
- vbox = gtk_vbox_new (2, TRUE);
- gtk_box_pack_start (GTK_BOX(GKSUUI_DIALOG(dialog)->entry_vbox), vbox, TRUE, TRUE, 0);
- gtk_widget_show (vbox);
-
- check_button = gtk_check_button_new_with_label (_("Remember password"));
- g_signal_connect (G_OBJECT(check_button), "toggled", G_CALLBACK(cb_toggled_cb), "save-to-keyring");
-
- remember_password = gconf_client_get_bool (gconf_client, BASE_PATH"save-to-keyring", NULL);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(check_button), remember_password);
- gtk_box_pack_start (GTK_BOX(vbox), check_button, TRUE, TRUE, 0);
- gtk_widget_show (check_button);
-
- alignment = gtk_alignment_new (0.5, 0.5, 0.6, 1);
- gtk_box_pack_start (GTK_BOX(vbox), alignment, TRUE, TRUE, 2);
- gtk_widget_show (alignment);
-
- radio_vbox = gtk_vbox_new (2, TRUE);
- gtk_container_add (GTK_CONTAINER(alignment), radio_vbox);
- gtk_widget_set_sensitive (radio_vbox, remember_password);
- gtk_widget_show (radio_vbox);
-
- radio_session = gtk_radio_button_new_with_label (NULL, _("Save for this session"));
- g_signal_connect (G_OBJECT(radio_session), "toggled", G_CALLBACK(cb_toggled_cb), "save-keyring");
- gtk_box_pack_start (GTK_BOX(radio_vbox), radio_session, TRUE, TRUE, 0);
- gtk_widget_show (radio_session);
-
- radio_default = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(radio_session), _("Save in the keyring"));
- gtk_box_pack_start (GTK_BOX(radio_vbox), radio_default, TRUE, TRUE, 0);
- gtk_widget_show (radio_default);
-
- g_signal_connect (G_OBJECT(check_button), "toggled", G_CALLBACK(set_sensitivity_cb), radio_vbox);
-
- tmp = gconf_client_get_string (gconf_client, BASE_PATH"save-keyring", NULL);
- if (tmp && (!strcmp (tmp, "default")))
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio_default), TRUE);
- g_free (tmp);
-
- g_object_unref (gconf_client);
-
- /* expose event */
- g_signal_connect (G_OBJECT(gksuui_dialog), "focus-in-event",
- G_CALLBACK(verify_capslock_cb), gksuui_dialog);
-
-
- gtk_widget_pop_composite_child ();
-}
-
-/**
- * gksuui_dialog_new:
- *
- * Creates a new #GksuuiDialog.
- *
- * Returns: the new #GksuuiDialog
- */
-GtkWidget*
-gksuui_dialog_new (void)
-{
- return GTK_WIDGET (g_object_new (GKSUUI_TYPE_DIALOG, NULL));
-}
-
-/**
- * gksuui_dialog_set_message:
- * @dialog: the dialog on which to set the message
- * @message: the message to be set on the dialog
- *
- * Sets the message that is displayed to the user when
- * requesting a password. You can use Pango markup to
- * modify font attributes.
- *
- */
-void
-gksuui_dialog_set_message (GksuuiDialog *dialog, gchar *message)
-{
- GtkWidget *label = dialog->label;
-
- gtk_label_set_markup (GTK_LABEL(label), message);
-}
-
-/**
- * gksuui_dialog_get_message:
- * @dialog: the dialog from which to get the message
- *
- * Gets the current message that the dialog will use
- * when run.
- *
- * Returns: a pointer to the string containing the
- * message. You need to make a copy of the string to
- * keep it.
- */
-const gchar*
-gksuui_dialog_get_message (GksuuiDialog *dialog)
-{
- GtkWidget *label = dialog->label;
-
- return gtk_label_get_text (GTK_LABEL(label));
-}
-
-/**
- * gksuui_dialog_set_icon:
- * @dialog: the dialog on which the icon will be set
- * @icon: a #GdkPixbuf from which to set the image
- *
- * Sets the icon that will be shown on the dialog. Should
- * probably not be used, as the default icon is the default
- * authorization icon.
- */
-void
-gksuui_dialog_set_icon (GksuuiDialog *dialog, GdkPixbuf *icon)
-{
- GtkWidget *image = dialog->image;
-
- gtk_image_set_from_pixbuf (GTK_IMAGE(image), icon);
-}
-
-/**
- * gksuui_dialog_get_icon:
- * @dialog: the dialog from which the icon should be
- * got
- *
- * Gets the #GtkImage which is currently defined as the
- * icon for the authorization dialog.
- *
- * Returns: a #GtkWidget which is the #GtkImage
- */
-GtkWidget*
-gksuui_dialog_get_icon (GksuuiDialog *dialog)
-{
- return dialog->image;
-}
-
-/**
- * gksuui_dialog_get_password:
- * @dialog: the dialog from which to get the message
- *
- * Gets the password typed by the user on the dialog.
- * This is a convenience function to grab the password
- * easily from the dialog after calling gtk_dialog_run ()
- *
- * Returns: a newly allocated string containing the password
- */
-gchar*
-gksuui_dialog_get_password (GksuuiDialog *dialog)
-{
- GtkEditable *entry = GTK_EDITABLE(dialog->entry);
-
- return gtk_editable_get_chars (entry, 0, -1);
-}
-
-/**
- * gksuui_dialog_set_prompt:
- * @dialog: the dialog on which to set the prompt
- * @prompt: the prompt to be set on the dialog
- *
- * Sets the prompt that is displayed to the user when
- * requesting a password. You can use Pango markup to
- * modify font attributes.
- *
- */
-void
-gksuui_dialog_set_prompt (GksuuiDialog *dialog, gchar *prompt)
-{
- GtkWidget *label = dialog->prompt_label;
-
- gtk_label_set_markup (GTK_LABEL(label), prompt);
-}
-
-/**
- * gksuui_dialog_get_prompt:
- * @dialog: the dialog from which to get the prompt
- *
- * Gets the current prompt that the dialog will use
- * when run.
- *
- * Returns: a pointer to the string containing the
- * prompt. You need to make a copy of the string to
- * keep it.
- */
-const gchar*
-gksuui_dialog_get_prompt (GksuuiDialog *dialog)
-{
- GtkWidget *label = dialog->prompt_label;
-
- return gtk_label_get_text (GTK_LABEL(label));
-}
Copied: libgksu/tags/1.9.5/libgksuui/gksuui-dialog.c (from rev 648, libgksu/trunk/libgksuui/gksuui-dialog.c)
Deleted: libgksu/tags/1.9.5/libgksuui/gksuui-dialog.h
===================================================================
--- libgksu/trunk/libgksuui/gksuui-dialog.h 2006-06-30 01:38:34 UTC (rev 637)
+++ libgksu/tags/1.9.5/libgksuui/gksuui-dialog.h 2006-07-13 00:01:30 UTC (rev 653)
@@ -1,103 +0,0 @@
-/*
- * libgksuui -- Gtk+ widget and convenience functions for requesting passwords
- * Copyright (C) 2004 Gustavo Noronha Silva
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GKSUUI_DIALOG_H__
-#define __GKSUUI_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GKSUUI_TYPE_DIALOG (gksuui_dialog_get_type ())
-#define GKSUUI_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GKSUUI_TYPE_DIALOG, GksuuiDialog))
-#define GKSUUI_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GKSUUI_TYPE_DIALOG, GksuuiDialogClass))
-#define GKSUUI_IS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GKSUUI_TYPE_DIALOG))
-#define GKSUUI_IS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GKSUUI_TYPE_CONTEXT))
-#define GKSUUI_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GKSUUI_TYPE_DIALOG, GksuuiDialogClass))
-
-typedef struct _GksuuiDialogClass GksuuiDialogClass;
-typedef struct _GksuuiDialog GksuuiDialog;
-
-struct _GksuuiDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-/**
- * GksuuiDialog:
- * @dialog: parent widget
- * @main_vbox: GtkDialog's vbox
- * @hbox: box to separate the image of the right-side widgets
- * @image: the authorization image, left-side widget
- * @entry_vbox: right-side widgets container
- * @label: message describing what is required from the user,
- * right-side widget
- * @entry: place to type the password in, right-side widget
- * @ok_button: OK button of the dialog
- * @cancel_button: Cancel button of the dialog
- *
- * Convenience widget based on #GtkDialog to request a password.
- */
-struct _GksuuiDialog
-{
- GtkDialog dialog;
-
- GtkWidget *main_vbox;
- GtkWidget *hbox;
- GtkWidget *image;
- GtkWidget *entry_vbox;
- GtkWidget *label;
- GtkWidget *label_warn_capslock;
- GtkWidget *entry;
- GtkWidget *ok_button;
- GtkWidget *cancel_button;
- GtkWidget *prompt_label;
-};
-
-GType
-gksuui_dialog_get_type (void);
-
-GtkWidget*
-gksuui_dialog_new (void);
-
-void
-gksuui_dialog_set_message (GksuuiDialog *dialog, gchar *message);
-
-const gchar*
-gksuui_dialog_get_message (GksuuiDialog *dialog);
-
-void
-gksuui_dialog_set_icon (GksuuiDialog *dialog, GdkPixbuf *icon);
-
-GtkWidget*
-gksuui_dialog_get_icon (GksuuiDialog *dialog);
-
-gchar*
-gksuui_dialog_get_password (GksuuiDialog *dialog);
-
-void
-gksuui_dialog_set_prompt (GksuuiDialog *dialog, gchar *prompt);
-
-const gchar*
-gksuui_dialog_get_prompt (GksuuiDialog *dialog);
-
-G_END_DECLS
-
-#endif
Copied: libgksu/tags/1.9.5/libgksuui/gksuui-dialog.h (from rev 648, libgksu/trunk/libgksuui/gksuui-dialog.h)
More information about the gksu-commits
mailing list