diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2016-08-13 17:39:17 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2016-08-13 17:39:17 +0900 |
commit | 8d780c7fb5ccb04c49c98370c9e4ec7a2440bbb1 (patch) | |
tree | bacc471e5ae2c44cb8c5dfec50036a9895e4636b | |
parent | 3b21839615037b5d0560df065abfd473517684e9 (diff) | |
download | enlightenment-8d780c7fb5ccb04c49c98370c9e4ec7a2440bbb1.tar.gz |
e sudo gui support - add askpass util for sudo askpass support
this gives e by default sudo gui support with an askpass util that
sudo can use as well as setting the env var correctly so it will be
used by sudo.
@feature
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | data/desktop/Makefile.mk | 3 | ||||
-rw-r--r-- | data/desktop/enlightenment_askpass.desktop | 12 | ||||
-rw-r--r-- | data/icons/Makefile.mk | 6 | ||||
-rw-r--r-- | data/icons/enlightenment-askpass.png | bin | 0 -> 696 bytes | |||
-rw-r--r-- | src/bin/.gitignore | 1 | ||||
-rw-r--r-- | src/bin/Makefile.mk | 9 | ||||
-rw-r--r-- | src/bin/e_askpass_main.c | 142 | ||||
-rw-r--r-- | src/bin/e_main.c | 2 |
9 files changed, 177 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index aa18bbe45d..498090a636 100644 --- a/configure.ac +++ b/configure.ac @@ -476,6 +476,10 @@ PKG_CHECK_MODULES(E_IMC, [ eina >= ${efl_version} ]) +PKG_CHECK_MODULES(E_ASKPASS, [ + elementary >= ${efl_version} +]) + PKG_CHECK_MODULES(E_THUMB, [ eina >= ${efl_version} evas >= ${efl_version} diff --git a/data/desktop/Makefile.mk b/data/desktop/Makefile.mk index 07730a208b..7e38ebf4a1 100644 --- a/data/desktop/Makefile.mk +++ b/data/desktop/Makefile.mk @@ -1,5 +1,6 @@ desktopfilesdir = $(datadir)/applications desktopfiles_DATA = \ -data/desktop/enlightenment_filemanager.desktop +data/desktop/enlightenment_filemanager.desktop \ +data/desktop/enlightenment_askpass.desktop EXTRA_DIST += $(desktopfiles_DATA) diff --git a/data/desktop/enlightenment_askpass.desktop b/data/desktop/enlightenment_askpass.desktop new file mode 100644 index 0000000000..5efb992234 --- /dev/null +++ b/data/desktop/enlightenment_askpass.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Application +Name=Enlightenment Askpass +Comment=Enlightenment Password Request +Icon=enlightenment-askpass +OnlyShowIn=Enlightenment; +Exec=enlightenment_askpass +Terminal=false +Categories=System +StartupNotify=false +StartupWMClass=enlighenment_askpass diff --git a/data/icons/Makefile.mk b/data/icons/Makefile.mk index 84951de109..bde02dba72 100644 --- a/data/icons/Makefile.mk +++ b/data/icons/Makefile.mk @@ -10,3 +10,9 @@ data/icons/image_viewer.png \ data/icons/audio_player2.png EXTRA_DIST += $(iconsfiles_DATA) + +pixmapsdir = $(datadir)/pixmaps +pixmaps_DATA = \ +data/icons/enlightenment-askpass.png + +EXTRA_DIST += $(pixmaps_DATA) diff --git a/data/icons/enlightenment-askpass.png b/data/icons/enlightenment-askpass.png Binary files differnew file mode 100644 index 0000000000..09886d5fe6 --- /dev/null +++ b/data/icons/enlightenment-askpass.png diff --git a/src/bin/.gitignore b/src/bin/.gitignore index b7fce7db5f..fe388f12de 100644 --- a/src/bin/.gitignore +++ b/src/bin/.gitignore @@ -14,5 +14,6 @@ /enlightenment_thumb /enlightenment_open /enlightenment_elm_cfgtool +/enlightenment_askpass /e_fm/enlightenment_fm diff --git a/src/bin/Makefile.mk b/src/bin/Makefile.mk index 5fdcb2760a..d39ef158b9 100644 --- a/src/bin/Makefile.mk +++ b/src/bin/Makefile.mk @@ -40,7 +40,8 @@ src/bin/enlightenment \ src/bin/enlightenment_imc \ src/bin/enlightenment_start \ src/bin/enlightenment_filemanager \ -src/bin/enlightenment_open +src/bin/enlightenment_open \ +src/bin/enlightenment_askpass internal_bindir = $(libdir)/enlightenment/utils internal_bin_PROGRAMS = \ @@ -431,6 +432,12 @@ src/bin/e_start_main.c src_bin_enlightenment_start_CPPFLAGS = $(E_CPPFLAGS) @E_START_CFLAGS@ src_bin_enlightenment_start_LDADD = @dlopen_libs@ @E_START_LIBS@ +src_bin_enlightenment_askpass_SOURCES = \ +src/bin/e_askpass_main.c + +src_bin_enlightenment_askpass_LDADD = @E_ASKPASS_LIBS@ +src_bin_enlightenment_askpass_CPPFLAGS = $(E_CPPFLAGS) + src_bin_enlightenment_thumb_SOURCES = \ src/bin/e_sha1.c \ src/bin/e_thumb_main.c \ diff --git a/src/bin/e_askpass_main.c b/src/bin/e_askpass_main.c new file mode 100644 index 0000000000..8cf169e495 --- /dev/null +++ b/src/bin/e_askpass_main.c @@ -0,0 +1,142 @@ +#include <Elementary.h> + +#define TITLE "Enter Your Password" +#define TEXT "Please enter your user password" +#define GUIDE "Password" +#define OK "OK" +#define CANCEL "Cancel" +#define PAD "pad_medium" + +int ret = -1; + +static Evas_Object *entry = NULL; + +static void +password_out(void) +{ + const char *str = elm_object_text_get(entry); + if (str) printf("%s\n", str); +} + +static void +cb_ok(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + password_out(); + ret = 0; + elm_exit(); +} + +static void +cb_cancel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + elm_exit(); +} + +EAPI int +elm_main(int argc, char **argv) +{ + Evas_Object *win, *bx, *fr, *lab, *en, *sep, *bx2, *bt; + + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + + elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR); + elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR); + elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); + elm_app_info_set(elm_main, "enlightenment", "AUTHORS"); + + do { + win = elm_win_util_standard_add("main", TITLE); + elm_win_autodel_set(win, EINA_TRUE); + do { + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_FALSE); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, bx); + do { + fr = elm_frame_add(win); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_style_set(fr, PAD); + elm_box_pack_end(bx, fr); + do { + lab = elm_label_add(win); + evas_object_size_hint_align_set(lab, EVAS_HINT_FILL, 0.5); + elm_object_text_set(lab, TEXT); + elm_object_content_set(fr, lab); + evas_object_show(lab); + } while (0); + evas_object_show(fr); + } while (0); + do { + fr = elm_frame_add(win); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_style_set(fr, PAD); + elm_box_pack_end(bx, fr); + do { + en = elm_entry_add(win); + entry = en; + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_part_text_set(en, "guide", GUIDE); + elm_entry_single_line_set(en, EINA_TRUE); + elm_entry_password_set(en, EINA_TRUE); + evas_object_smart_callback_add(en, "activated", cb_ok, NULL); + evas_object_smart_callback_add(en, "aborted", cb_cancel, NULL); + elm_object_content_set(fr, en); + evas_object_show(en); + elm_object_focus_set(en, EINA_TRUE); + } while (0); + evas_object_show(fr); + } while (0); + do { + sep = elm_separator_add(win); + elm_separator_horizontal_set(sep, EINA_TRUE); + evas_object_size_hint_weight_set(sep, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sep, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, sep); + evas_object_show(sep); + } while (0); + do { + fr = elm_frame_add(win); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_style_set(fr, PAD); + elm_box_pack_end(bx, fr); + do { + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, 0.5, 0.5); + elm_object_content_set(fr, bx2); + do { + bt = elm_button_add(win); + elm_object_text_set(bt, OK); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(bt, "clicked", cb_ok, NULL); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + } while (0); + do { + bt = elm_button_add(win); + elm_object_text_set(bt, CANCEL); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(bt, "clicked", cb_cancel, NULL); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + } while (0); + evas_object_show(bx2); + } while (0); + evas_object_show(fr); + } while (0); + evas_object_show(bx); + } while (0); + elm_win_center(win, EINA_TRUE, EINA_TRUE); + evas_object_show(win); + } while (0); + + elm_win_activate(win); + + elm_run(); + return ret; +} +ELM_MAIN() diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 28ed4bc69e..4c705fcdc0 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -325,6 +325,8 @@ main(int argc, char **argv) e_util_env_set("E_RESTART_OK", NULL); e_util_env_set("PANTS", "ON"); e_util_env_set("DESKTOP", "Enlightenment"); + snprintf(buff, sizeof(buff), "%s/enlightenment_askpass", e_prefix_bin_get()); + e_util_env_set("SUDO_ASKPASS", buff); TS("Environment Variables Done"); /* KDE5 applications don't understand anything other then gnome or kde */ |