Add flatstore-users
authorKevin Wasserman <kevin.wasserman@painless-security.com>
Tue, 29 Oct 2013 20:56:35 +0000 (16:56 -0400)
committerKevin Wasserman <kevin.wasserman@painless-security.com>
Tue, 29 Oct 2013 20:56:35 +0000 (16:56 -0400)
The identity manager uses flat file store (i.e. not keyring)
if the current user is in the system's flatstore-users file.

Makefile.am
configure.ac
flatstore-users [new file with mode: 0644]
src/moonshot-futils.c [new file with mode: 0644]
src/moonshot-identity-manager-app.vala
src/moonshot-utils.vala

index 7fcca41..ffa8110 100644 (file)
@@ -2,6 +2,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
  
 SUBDIRS = po
 
+moonshotsysconfdir=${sysconfdir}/moonshot
 
 lib_LTLIBRARIES = libmoonshot/libmoonshot.la
 
@@ -11,6 +12,7 @@ bin_PROGRAMS = \
 pkglibexec_SCRIPTS = moonshot-dbus-launch
 
 dist_pkgdata_DATA = webprovisioning/default-identity.msht
+dist_moonshotsysconf_DATA=flatstore-users
 
 AM_CFLAGS = -g -O0 -Wall
 
@@ -18,6 +20,7 @@ AM_CPPFLAGS =  \
        -include config.h \
        -DLOCALEDIR=\""$(localedir)"\" \
        -DMOONSHOT_LAUNCH_SCRIPT='"$(pkglibexecdir)/moonshot-dbus-launch"' \
+        -DMOONSHOT_FLATSTORE_USERS='"$(moonshotsysconfdir)/flatstore-users"' \
        -I$(top_srcdir)/libmoonshot \
        -I$(top_builddir)/libmoonshot
 
@@ -54,7 +57,8 @@ src_moonshot_SOURCES = \
         src/moonshot-server.vala \
         src/moonshot-password-dialog.vala \
         src/moonshot-provisioning-common.vala \
-        src/moonshot-utils.vala
+        src/moonshot-utils.vala \
+        src/moonshot-futils.c
 
 src_moonshot_webp_SOURCES = \
         src/moonshot-webp-parser.vala \
index 51863c9..92f76c3 100644 (file)
@@ -19,7 +19,7 @@ AM_MAINTAINER_MODE([enable])
 
 LT_PREREQ([2.2])
 LT_INIT([win32-dll])
-AC_CHECK_FUNCS_ONCE(geteuid)
+AC_CHECK_FUNCS_ONCE(geteuid getpwuid)
 
 # Checks for programs.
 PKG_PROG_PKG_CONFIG([0.23])
diff --git a/flatstore-users b/flatstore-users
new file mode 100644 (file)
index 0000000..4e081fe
--- /dev/null
@@ -0,0 +1,2 @@
+root
+gdm
diff --git a/src/moonshot-futils.c b/src/moonshot-futils.c
new file mode 100644 (file)
index 0000000..2a043b4
--- /dev/null
@@ -0,0 +1,20 @@
+#ifdef HAVE_GETPWUID
+#include <stdlib.h>
+#include <sys/types.h>
+#include <pwd.h>
+#endif
+
+const char * GetUserName()
+{
+#ifdef HAVE_GETPWUID
+   struct passwd *pwd = getpwuid(getuid());
+   return pwd ? pwd->pw_name : "unknown";
+#else
+   return "unknown";
+#endif
+}
+
+const char * GetFlatStoreUsersFilePath()
+{
+   return MOONSHOT_FLATSTORE_USERS;
+}
index a5f04c1..03088eb 100644 (file)
@@ -40,8 +40,9 @@ public class IdentityManagerApp {
     }
        
     public IdentityManagerApp (bool headless, bool use_flat_file_store) {
+        use_flat_file_store |= UserForcesFlatFileStore();
 #if GNOME_KEYRING
-        bool keyring_available = GnomeKeyring.is_available();
+        bool keyring_available = (!use_flat_file_store) && GnomeKeyring.is_available();
 #else
         bool keyring_available = false;
 #endif
index 402e6d7..25af1e4 100644 (file)
@@ -49,3 +49,23 @@ public Gdk.Pixbuf? find_icon (string name, int size)
         return null;
     }
 }
+
+public extern unowned string GetUserName();
+public extern unowned string GetFlatStoreUsersFilePath();
+
+public bool UserForcesFlatFileStore()
+{
+    string username = GetUserName();
+    string flatstore_users_filename = GetFlatStoreUsersFilePath();
+    FileStream flatstore_users = FileStream.open(flatstore_users_filename, "r");
+    if (flatstore_users == null) {
+        return false;
+    }
+    string? flatstore_username = null;
+    while ((flatstore_username = flatstore_users.read_line()) != null) {
+        if (username == flatstore_username) {
+            return true;
+        }
+    }
+    return false;
+}