kov changed gksu/branches/gksu2/ChangeLog,
gksu/branches/gksu2/gksu/gksu.c
Gustavo Noronha
kov at costa.debian.org
Sun Jan 29 20:18:50 UTC 2006
Mensagem de log:
- removed code moved to libgksu, started porting to
libgksu2, misc fixes and cleanup, removed trailing
whitespaces
-----
Modified: gksu/branches/gksu2/ChangeLog
===================================================================
--- gksu/branches/gksu2/ChangeLog 2006-01-26 23:43:46 UTC (rev 508)
+++ gksu/branches/gksu2/ChangeLog 2006-01-29 20:18:49 UTC (rev 509)
@@ -1,3 +1,10 @@
+2006-01-29 Gustavo Noronha Silva <kov at debian.org>
+
+ * gksu/gksu.c:
+ - removed code moved to libgksu, started porting to
+ libgksu2, misc fixes and cleanup, removed trailing
+ whitespaces
+
2006-01-07 Gustavo Noronha Silva <kov at debian.org>
* configure.ac:
Modified: gksu/branches/gksu2/gksu/gksu.c
===================================================================
--- gksu/branches/gksu2/gksu/gksu.c 2006-01-26 23:43:46 UTC (rev 508)
+++ gksu/branches/gksu2/gksu/gksu.c 2006-01-29 20:18:49 UTC (rev 509)
@@ -33,7 +33,6 @@
GConfClient *gconf_client = NULL;
gboolean print_pass = FALSE;
gboolean force_grab = FALSE;
-gboolean grab = TRUE;
gboolean sudo_mode = FALSE;
gboolean message_changed = FALSE;
gboolean prompt = FALSE;
@@ -41,7 +40,7 @@
struct option long_opts[] = {
/*
- * { name has_arg *flag val }
+ * { name has_arg *flag val }
*/
{"help", no_argument, NULL, 'h'},
{"login", no_argument, NULL, 'l'},
@@ -62,328 +61,9 @@
{0, 0, 0, 0}
};
-/*
- * 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 */
-
-
/**
* help:
- * @cmdname: name of the command which was called by the user
+ * @cmdname: name of the command which was called by the user
* (argv[0])
*
* This function is a simple 'usage'-style printing function.
@@ -391,7 +71,7 @@
*/
void
help (gchar *cmdname)
-{
+{
g_print (_(
"GKsu version %s\n\n"
"Usage: %s [-u <user>] [-k] [-l] <command>\n\n"
@@ -432,7 +112,7 @@
" --desktop <file>, -D <file>\n"
" Use a .desktop file to get the name of the application"
" and the icon from.\n"
-"\n"
+"\n"
" --preserve-env, -k\n"
" Preserve the current environments, does not set $HOME\n"
" nor $PATH, for example.\n"
@@ -445,131 +125,6 @@
"\n"), PACKAGE_VERSION, cmdname);
}
-/* copied from gnome-ssh-askpass */
-#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>Could not grab your mouse.</b>\n\n"
- "A malicious client may be eavesdropping\n"
- "on your session or you may have just clicked\n"
- "a menu or some application just decided to get\n"
- "focus.\n\n"
- "Try again."));
-
- break;
- case FAILED_GRAB_KEYBOARD:
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog),
- _("Could not grab your keyboard.\n"
- "A malicious client may be eavesdropping\n"
- "on your session or you may have just clicked\n"
- "a menu or some application just decided to get\n"
- "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 ();
-
-}
-
-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);
-}
-
-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;
-}
-
static void
keyring_create_item_cb (GnomeKeyringResult result,
guint32 id, gpointer keyring_loop)
@@ -605,7 +160,7 @@
attribute.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
attribute.value.string = g_strdup ("gksu");
g_array_append_val (attributes, attribute);
-
+
list = g_list_alloc();
keyring_has_password = FALSE;
@@ -631,12 +186,12 @@
gksu_context_set_command (context, keyring_command);
}
- if (keyring_has_password)
+ if (keyring_has_password)
{
gchar *password;
- password = g_locale_from_utf8 (keyring_password,
- strlen (keyring_password),
+ password = g_locale_from_utf8 (keyring_password,
+ strlen (keyring_password),
NULL, NULL, NULL);
gksu_context_set_password (context, password);
return FALSE; /* we do not need a password */
@@ -646,354 +201,6 @@
}
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);
-}
-
-void
-get_configuration_options (GksuContext *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);
- sudo_mode = gconf_client_get_bool (gconf_client, BASE_PATH "sudo-mode",
- NULL);
- prompt = gconf_client_get_bool (gconf_client, BASE_PATH "prompt",
- NULL);
- always_ask_pass = gconf_client_get_bool (gconf_client,
- BASE_PATH "always-ask-password",
- NULL);
-}
-
-gboolean
-su_ask_password (GksuContext *context, gchar *prompt,
- gpointer data, GError **error)
-{
- GtkWidget *dialog = GTK_WIDGET(data);
-
- int retvalue = 0;
-
- if (prompt)
- gksuui_dialog_set_prompt (GKSUUI_DIALOG(dialog), prompt);
-
- if (!message_changed)
- {
- gchar *msg;
-
- if (sudo_mode)
- msg = g_strdup_printf (_("<b>Please enter your password\n"
- "to run %s as user %s</b>"),
- gksu_context_get_command (context),
- gksu_context_get_user (context));
- else
- msg = g_strdup_printf (_("<b>To run the program \"%s\" you need to "
- "enter the %s password</b>"),
- gksu_context_get_command (context),
- gksu_context_get_user (context));
-
- gksuui_dialog_set_message (GKSUUI_DIALOG(dialog), msg);
- g_free (msg);
- }
-
- int lock = 0;
- if (grab)
- lock = grab_keyboard_and_mouse (dialog);
- retvalue = gtk_dialog_run (GTK_DIALOG(dialog));
- gtk_widget_hide (dialog);
- if (grab)
- ungrab_keyboard_and_mouse (lock);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- if (retvalue != GTK_RESPONSE_OK)
- return 1;
-
- {
- gchar *password, *tmp;
- tmp = gksuui_dialog_get_password (GKSUUI_DIALOG(dialog));
- password = g_locale_from_utf8 (tmp, strlen (tmp), NULL, NULL, NULL);
- g_free (tmp);
- gksu_context_set_password (context, password);
- }
-
- return 0;
-}
-
-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);
-}
-
-void
-cb_toggled_cb (GtkWidget *button, gpointer data)
-{
- gchar *key;
- gboolean toggled;
- gchar *key_name;
-
- g_return_if_fail (data != NULL);
-
- key_name = (gchar*)data;
-
- 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 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_free (key);
-}
-
-void
-no_pass (GksuContext *context, gpointer data)
-{
- GtkWidget *dialog;
- GtkWidget *alignment;
- GtkWidget *check_button;
- gboolean toggled;
-
- toggled = gconf_client_get_bool (gconf_client, BASE_PATH "display-no-pass-info", NULL);
-
- /* configuration tells us to not show this message */
- if (!toggled)
- return;
-
- dialog = gtk_message_dialog_new_with_markup (NULL, 0,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
- _("<b>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.</b>"
- "\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"
- "This is not a problem report; it's "
- "simply a notification to make sure "
- "you are aware of this."),
- gksu_context_get_command (context),
- gksu_context_get_user (context),
- gksu_context_get_user (context));
-
- 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 ();
-}
-
-void
-set_dialog_from_desktop (GksuuiDialog *dialog, GksuContext *context,
- gchar *file_name)
-{
- GKeyFile *desktop;
- GError *error = NULL;
- gchar *buffer = NULL;
-
- desktop = g_key_file_new ();
-
- g_key_file_load_from_file (desktop, file_name, G_KEY_FILE_NONE, &error);
- if (error)
- {
- gchar *error_msg;
-
- error_msg = g_strdup_printf ("Could not load desktop file: %s",
- error->message);
- g_warning (error_msg);
- g_free (error_msg);
- g_error_free (error);
- return;
- }
-
- buffer = g_key_file_get_locale_string (desktop, "Desktop Entry",
- "Name", NULL, NULL);
- if (buffer)
- {
- gchar *msg;
-
- if (sudo_mode)
- msg = g_strdup_printf (_("<b>Authentication required</b>\n\n"
- "You need your password to run:\n\"%s\"."),
- buffer);
- else
- msg = g_strdup_printf (_("<b>Authentication required</b>\n\n"
- "You need to type %s's password to run:\n\"%s\"."),
- gksu_context_get_user (context), buffer);
-
- gksuui_dialog_set_message (dialog, msg);
-
- g_free (buffer);
- g_free (msg);
- message_changed = TRUE;
- }
-
- buffer = g_key_file_get_locale_string (desktop, "Desktop Entry",
- "Icon", NULL, NULL);
- if (buffer)
- {
- GdkPixbuf *pixbuf = NULL;
- gboolean is_absolute = FALSE;
- gchar *icon_path;
-
- is_absolute = !(buffer[0] != '/');
-
- if (is_absolute)
- {
- icon_path = buffer;
- buffer = NULL;
- }
- else
- {
- icon_path = g_strdup_printf (DATA_DIR"/pixmaps/%s", buffer);
- g_free (buffer);
- }
-
- pixbuf = gdk_pixbuf_new_from_file (icon_path, &error);
- if (error)
- {
- gchar *error_msg;
-
- error_msg = g_strdup_printf ("Could not load icon file: %s",
- error->message);
- g_warning (error_msg);
- g_free (error_msg);
- g_error_free (error);
-
- if (!is_absolute)
- g_free (icon_path);
-
- return;
- }
-
- gksuui_dialog_set_icon (dialog, pixbuf);
-
- if (!is_absolute)
- g_free (icon_path);
- }
-}
-
-int
main (int argc, char **argv)
{
GtkWidget *dialog;
@@ -1013,13 +220,13 @@
int c = 0;
setlocale (LC_ALL, "");
- bindtextdomain(PACKAGE_NAME, LOCALEDIR);
+ bindtextdomain(PACKAGE_NAME, LOCALEDIR);
bind_textdomain_codeset (PACKAGE_NAME, "UTF-8");
textdomain(PACKAGE_NAME);
- /*
+ /*
* bad, bad code... adds a second -- right after the first one,
- * because gtk_init will remove one of them...
+ * because gtk_init will remove one of them...
*/
{
/* to check whether a -- was already found when parsing arguments */
@@ -1032,7 +239,7 @@
newargv = g_realloc (newargv, sizeof(char*) * (newargc + 2));
newargv[newargc] = g_strdup (argv[c]);
newargv[newargc + 1] = g_strdup (argv[c]);
-
+
newargc = newargc + 2;
separator_found = TRUE;
}
@@ -1040,7 +247,7 @@
{
newargv = g_realloc (newargv, sizeof(char*) * (newargc + 1));
newargv[newargc] = g_strdup (argv[c]);
-
+
newargc++;
}
}
@@ -1090,13 +297,13 @@
gksu_context_set_keep_env (context, TRUE);
break;
case 'g':
- grab = FALSE;
+ gksu_context_set_grab (context, FALSE);
if (optarg != NULL)
{
if (!strcasecmp (optarg, "yes")); /* ignore, already set */
else if (!strcasecmp (optarg, "no"))
- grab = FALSE;
+ gksu_context_set_grab (context, FALSE);
else
{
fprintf (stderr, _("Option not accepted for --disable-grab: %s\n"),
@@ -1163,12 +370,12 @@
}
if (force_grab)
- grab = TRUE;
+ gksu_context_set_grab (context, TRUE);
if (prompt)
{
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"
@@ -1177,22 +384,16 @@
"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)
- grab = FALSE;
+ gksu_context_set_grab (context, FALSE);
else
- grab = TRUE;
-
+ gksu_context_set_grab (context, TRUE);
+
gtk_widget_destroy (d);
}
- if (grab)
- dialog = g_object_new (GKSUUI_TYPE_DIALOG,
- "type", GTK_WINDOW_POPUP,
- NULL);
- else
- dialog = gksuui_dialog_new ();
-
+#if 0
if (desktop_file_name)
set_dialog_from_desktop (GKSUUI_DIALOG(dialog), context,
desktop_file_name);
@@ -1208,7 +409,7 @@
{
if (!gksuui_dialog_get_message (GKSUUI_DIALOG(dialog)))
{
- gchar *msg =
+ gchar *msg =
g_strdup_printf (_("<b>Please enter %s's password</b>"),
gksu_context_get_user (context));
@@ -1224,9 +425,9 @@
if (grab)
ungrab_keyboard_and_mouse (lock);
- /*
+ /*
the user may have pressed cancel or
- closed the window
+ closed the window
*/
if (retvalue != GTK_RESPONSE_OK)
return 2;
@@ -1242,6 +443,7 @@
printf ("%s\n", password);
return 0;
}
+#endif
/* now we can begin to care about a command */
if (newargc <= optind)
@@ -1299,11 +501,13 @@
if (sudo_mode)
{
- gksu_context_sudo_run_full (context, su_ask_password, (gpointer)dialog,
- no_pass, NULL, &error);
+ gksu_sudo_full (context,
+ NULL, NULL,
+ NULL, NULL,
+ &error);
if (error)
{
- gk_dialog (GTK_MESSAGE_ERROR,
+ gk_dialog (GTK_MESSAGE_ERROR,
_("<b>Failed to run %s as user %s.</b>\n\n%s"),
gksu_context_get_command (context),
gksu_context_get_user (context),
@@ -1313,6 +517,7 @@
}
else
{
+#if 0
if (!always_ask_pass)
{
GtkWidget *vbox;
@@ -1334,7 +539,7 @@
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);
@@ -1363,19 +568,22 @@
if (gksu_context_try_need_password (context))
try_gnome_keyring_password (context);
}
+#endif
+ gksu_su_full (context,
+ NULL, NULL,
+ NULL, NULL,
+ &error);
- gksu_context_run_full (context, su_ask_password, (gpointer)dialog,
- no_pass, NULL, &error);
-
- if (error)
+ if (error)
{
- gk_dialog (GTK_MESSAGE_ERROR,
+ gk_dialog (GTK_MESSAGE_ERROR,
_("Failed to run %s as user %s:\n %s"),
gksu_context_get_command (context),
gksu_context_get_user (context),
error->message);
return 3;
}
+#if 0
else
{
gboolean save_to_keyring;
@@ -1387,17 +595,17 @@
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");
@@ -1407,10 +615,10 @@
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);
@@ -1422,14 +630,15 @@
attributes,
gksu_context_get_password (context),
TRUE,
- keyring_create_item_cb,
+ keyring_create_item_cb,
keyring_loop, NULL);
gnome_keyring_attribute_list_free (attributes);
g_free (keyring_name);
g_main_loop_run (keyring_loop);
}
}
+#endif
}
-
+
return 0;
}
More information about the gksu-commits
mailing list