Release 0.0.3 90/25290/1 submit/tizen/20140801.113059
authorImran Zaman <imran.zaman@intel.com>
Fri, 1 Aug 2014 11:28:05 +0000 (14:28 +0300)
committerImran Zaman <imran.zaman@intel.com>
Fri, 1 Aug 2014 11:28:19 +0000 (14:28 +0300)
Change-Id: Ib83f9f4355ffab4ba079e58331accf89923ca9b3
Signed-off-by: Imran Zaman <imran.zaman@intel.com>
92 files changed:
aclocal.m4
configure
configure.ac
data/Makefile.am
data/Makefile.in
data/tlm-login.debian [new file with mode: 0644]
data/tlm.conf.in
dists/debian/changelog
dists/debian/control
dists/debian/install
dists/debian/rules
dists/rpm/tizen/packaging/tlm.changes
dists/rpm/tizen/packaging/tlm.spec
dists/rpm/tlm-suse.spec
docs/Makefile.am
docs/Makefile.in
docs/html/TlmAuthPlugin.html
docs/html/TlmConfig.html
docs/html/api-index-full.html
docs/html/ch05.html
docs/html/home.png
docs/html/index.sgml
docs/html/left-insensitive.png
docs/html/left.png
docs/html/right-insensitive.png
docs/html/right.png
docs/html/tlm-Errors.html
docs/html/tlm.devhelp2
docs/html/up-insensitive.png
docs/html/up.png
docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml [new file with mode: 0644]
docs/tlm-sections.txt
examples/Makefile.am
examples/Makefile.in
examples/tlm-ui.c
ltmain.sh
packaging/tlm.changes
packaging/tlm.spec
src/Makefile.am
src/Makefile.in
src/common/Makefile.am
src/common/Makefile.in
src/common/dbus/Makefile.am
src/common/dbus/Makefile.in
src/common/dbus/interfaces/org.tizen.Tlm.Session.xml [new file with mode: 0644]
src/common/dbus/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml [new file with mode: 0644]
src/common/dbus/tlm-dbus-utils.c [moved from src/daemon/dbus/tlm-dbus-utils.c with 93% similarity]
src/common/dbus/tlm-dbus-utils.h [moved from src/daemon/dbus/tlm-dbus-utils.h with 100% similarity]
src/common/dbus/tlm-dbus.h
src/common/tlm-error.c
src/common/tlm-error.h
src/common/tlm-pipe-stream.c [new file with mode: 0644]
src/common/tlm-pipe-stream.h [new file with mode: 0644]
src/common/tlm-utils.c [new file with mode: 0644]
src/common/tlm-utils.h [moved from src/daemon/tlm-utils.h with 96% similarity]
src/daemon/Makefile.am
src/daemon/Makefile.in
src/daemon/dbus/Makefile.am
src/daemon/dbus/Makefile.in
src/daemon/dbus/tlm-dbus-login-adapter.c
src/daemon/dbus/tlm-dbus-login-adapter.h
src/daemon/dbus/tlm-dbus-server-p2p.c
src/daemon/tlm-dbus-observer.c
src/daemon/tlm-manager.c
src/daemon/tlm-seat.c
src/daemon/tlm-seat.h
src/daemon/tlm-session-remote.c [new file with mode: 0644]
src/daemon/tlm-session-remote.h [new file with mode: 0644]
src/daemon/tlm-utils.c [deleted file]
src/plugins/default/Makefile.am
src/plugins/default/Makefile.in
src/plugins/gumd/Makefile.am
src/plugins/gumd/Makefile.in
src/plugins/nfc/Makefile.am
src/plugins/nfc/Makefile.in
src/sessiond/Makefile.am [new file with mode: 0644]
src/sessiond/Makefile.in [new file with mode: 0644]
src/sessiond/main.c [new file with mode: 0644]
src/sessiond/tlm-auth-session.c [moved from src/daemon/tlm-auth-session.c with 85% similarity]
src/sessiond/tlm-auth-session.h [moved from src/daemon/tlm-auth-session.h with 91% similarity]
src/sessiond/tlm-session-daemon.c [new file with mode: 0644]
src/sessiond/tlm-session-daemon.h [new file with mode: 0644]
src/sessiond/tlm-session.c [moved from src/daemon/tlm-session.c with 65% similarity]
src/sessiond/tlm-session.h [moved from src/daemon/tlm-session.h with 88% similarity]
src/utils/Makefile.am [new file with mode: 0644]
src/utils/Makefile.in [new file with mode: 0644]
src/utils/tlm-client.c [new file with mode: 0644]
tests/config/Makefile.am
tests/config/Makefile.in
tests/daemon/Makefile.am
tests/daemon/Makefile.in
tests/daemon/daemon-test.c

index 17d8019..1e811e5 100644 (file)
@@ -733,8 +733,7 @@ to "yes", and re-run configure.
 END
     AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
-fi
-])
+fi])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
index 211d1cb..3cba9a3 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tlm 0.0.2.
+# Generated by GNU Autoconf 2.69 for tlm 0.0.3.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tlm'
 PACKAGE_TARNAME='tlm'
-PACKAGE_VERSION='0.0.2'
-PACKAGE_STRING='tlm 0.0.2'
+PACKAGE_VERSION='0.0.3'
+PACKAGE_STRING='tlm 0.0.3'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1383,7 +1383,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tlm 0.0.2 to adapt to many kinds of systems.
+\`configure' configures tlm 0.0.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1453,7 +1453,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tlm 0.0.2:";;
+     short | recursive ) echo "Configuration of tlm 0.0.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1599,7 +1599,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tlm configure 0.0.2
+tlm configure 0.0.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1964,7 +1964,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tlm $as_me 0.0.2, which was
+It was created by tlm $as_me 0.0.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2832,7 +2832,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='tlm'
- VERSION='0.0.2'
+ VERSION='0.0.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3010,7 +3010,6 @@ END
   fi
 fi
 
-
 #libtool
 
 case `pwd` in
@@ -13660,7 +13659,7 @@ else
 
 fi
 
-ac_config_files="$ac_config_files Makefile docs/Makefile src/Makefile src/common/Makefile src/common/dbus/Makefile src/daemon/Makefile src/daemon/dbus/Makefile src/daemon/tlm.pc src/plugins/Makefile src/plugins/default/Makefile src/plugins/gumd/Makefile src/plugins/nfc/Makefile data/Makefile data/tlm.conf tests/Makefile tests/config/Makefile tests/daemon/Makefile tests/tlm-test.conf examples/Makefile"
+ac_config_files="$ac_config_files Makefile docs/Makefile src/Makefile src/common/Makefile src/common/dbus/Makefile src/daemon/Makefile src/daemon/dbus/Makefile src/daemon/tlm.pc src/sessiond/Makefile src/utils/Makefile src/plugins/Makefile src/plugins/default/Makefile src/plugins/gumd/Makefile src/plugins/nfc/Makefile data/Makefile data/tlm.conf tests/Makefile tests/config/Makefile tests/daemon/Makefile tests/tlm-test.conf examples/Makefile"
 
 
 cat >confcache <<\_ACEOF
@@ -14237,7 +14236,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tlm $as_me 0.0.2, which was
+This file was extended by tlm $as_me 0.0.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14303,7 +14302,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tlm config.status 0.0.2
+tlm config.status 0.0.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -14720,6 +14719,8 @@ do
     "src/daemon/Makefile") CONFIG_FILES="$CONFIG_FILES src/daemon/Makefile" ;;
     "src/daemon/dbus/Makefile") CONFIG_FILES="$CONFIG_FILES src/daemon/dbus/Makefile" ;;
     "src/daemon/tlm.pc") CONFIG_FILES="$CONFIG_FILES src/daemon/tlm.pc" ;;
+    "src/sessiond/Makefile") CONFIG_FILES="$CONFIG_FILES src/sessiond/Makefile" ;;
+    "src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/Makefile" ;;
     "src/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/Makefile" ;;
     "src/plugins/default/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/default/Makefile" ;;
     "src/plugins/gumd/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/gumd/Makefile" ;;
index 4f3c198..e70b357 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.68])
-AC_INIT([tlm], [0.0.2], [])
+AC_INIT([tlm], [0.0.3], [])
 AC_CONFIG_SRCDIR([src/daemon/tlm-main.c])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
@@ -114,6 +114,8 @@ src/common/dbus/Makefile
 src/daemon/Makefile
 src/daemon/dbus/Makefile
 src/daemon/tlm.pc
+src/sessiond/Makefile
+src/utils/Makefile
 src/plugins/Makefile
 src/plugins/default/Makefile
 src/plugins/gumd/Makefile
index 6e7bb50..951ea75 100644 (file)
@@ -1,6 +1,9 @@
 include $(top_srcdir)/common.mk
 
 EXTRA_DIST = \
-      tlm.conf.in
+      tlm.conf.in \
+      tlm.service \
+      tlm-login \
+      tlm-login.debian
 
 sysconf_DATA = tlm.conf
index 5f3cb39..bb8adce 100644 (file)
@@ -286,7 +286,10 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 pluginsdir = $(pkglibdir)/plugins
 EXTRA_DIST = \
-      tlm.conf.in
+      tlm.conf.in \
+      tlm.service \
+      tlm-login \
+      tlm-login.debian
 
 sysconf_DATA = tlm.conf
 all: all-am
diff --git a/data/tlm-login.debian b/data/tlm-login.debian
new file mode 100644 (file)
index 0000000..d03ac21
--- /dev/null
@@ -0,0 +1,16 @@
+auth    required    pam_env.so readenv=1
+auth    required    pam_env.so readenv=1 envfile=/etc/default/locale
+auth    required    pam_permit.so
+#@include common-auth
+account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so nullok
+#@include common-account
+#session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
+#session required    pam_permit.so
+#session required    pam_limits.so
+#session required    pam_loginuid.so
+#session required    pam_unix.so
+#session optional    pam_systemd.so
+#session optional    pam_ck_connector.so nox11
+@include common-session
+#session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
+@include common-password
index 1638c6c..3fc1113 100644 (file)
@@ -25,7 +25,7 @@ PAM_SERVICE=tlm-login
 #  %S - seat number
 #  %I - seat id string
 # Default: "guest"
-#DEFAULT_USER=guest
+DEFAULT_USER=app
 #
 # Session command : The command run after successfull login
 # Default: $SHELL
index 4bcb712..a330f90 100644 (file)
@@ -1,3 +1,9 @@
+tlm (0.0.3-1) unstable; urgency=low
+
+  * Create a new process (tlm-sessiond) for each session
+
+ -- Imran Zaman <imran.zaman@intel.com>  Mon, 21 Jul 2014 17:24:53 +0200
+
 tlm (0.0.2-2) unstable; urgency=low
 
   * Update to 0.0.2
index aa662d7..05387b8 100644 (file)
@@ -16,7 +16,7 @@ Description: tlm daemon and default plugins
 
 Package: tlm-dev
 Architecture: any
-Depends: ${shlibs:Depens}, ${misc:Depends}
+Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: development files for tlm
  Headers and libraries necessary for developing plugins.
 
@@ -25,3 +25,10 @@ Architecture: all
 Description: documentation for tlm
  Developer documentation for developing plugins.
 
+Package: tlm-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: tlm (= ${binary:Version}), ${misc:Depends}
+Description: debugging symbols for tlm
+ Debugging symbols
index cdb3966..bc61868 100644 (file)
@@ -1,4 +1,6 @@
 /usr/bin/tlm
+/usr/bin/tlm-sessiond
 /usr/lib/*.so.*
 /usr/lib/tlm/plugins/*.so*
 /etc/tlm.conf
+/usr/bin/tlm-client
index 82e6610..9db0ec5 100755 (executable)
@@ -10,6 +10,10 @@ export DH_VERBOSE=1
 # This has to be exported to make some magic below work.
 export DH_OPTIONS
 
+.PHONY: override_dh_strip
+override_dh_strip:
+       dh_strip --dbg-package=tlm-dbg
+
 %:
        dh $@ --parallel
 
index 8f765af..fa8ec49 100644 (file)
@@ -1,3 +1,16 @@
+* Mon Jul 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Update to 0.0.3; create a new process (tlm-sessiond) for each session
+
+* Wed Jun 11 2014 Jussi Laako <jussi.laako@linux.intel.com>
+- Depend on gumd on Tizen
+
+* Mon May 5 2014 Jussi Laako <jussi.laako@linux.intel.com>
+- Add PAM configuration file
+- Fix omitted password PAM chatter
+
+* Wed Apr 30 2014 Jussi Laako <jussi.laako@linux.intel.com>
+- Update default configurations
+
 * Thu Mar 13 2014 Jussi Laako <jussi.laako@linux.intel.com>
 - Update to 0.0.2
 
index d3ddb19..ed1b5fd 100644 (file)
@@ -4,15 +4,16 @@
 
 Name: tlm
 Summary: Login manager for Tizen
-Version: 0.0.2
-Release: 2
+Version: 0.0.3
+Release: 1
 Group: System/Service
 License: LGPL-2.1+
 Source: %{name}-%{version}.tar.gz
 URL: https://github.com/01org/tlm
-Source1001:     %{name}.manifest
+Source1001: %{name}.manifest
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
+Requires: gumd
 BuildRequires: pkgconfig(glib-2.0) >= 2.30
 BuildRequires: pkgconfig(gobject-2.0)
 BuildRequires: pkgconfig(gio-2.0)
@@ -48,6 +49,7 @@ Requires:   %{name} = %{version}-%{release}
 
 %prep
 %setup -q -n %{name}-%{version}
+cp %{SOURCE1001} .
 
 
 %build
@@ -62,7 +64,10 @@ make %{?_smp_mflags}
 %install
 rm -rf %{buildroot}
 %make_install
-cp -a %{SOURCE1001} %{buildroot}%{_datadir}/%{name}.manifest
+install -m 755 -d %{buildroot}%{_libdir}/systemd/system
+install -m 644 data/tlm.service %{buildroot}%{_libdir}/systemd/system/
+install -m 755 -d %{buildroot}%{_sysconfdir}/pam.d
+install -m 644 data/tlm-login %{buildroot}%{_sysconfdir}/pam.d/
 
 
 %post
@@ -74,12 +79,16 @@ cp -a %{SOURCE1001} %{buildroot}%{_datadir}/%{name}.manifest
 
 %files
 %defattr(-,root,root,-)
-%manifest %{_datadir}/%{name}.manifest
+%manifest %{name}.manifest
 %doc AUTHORS COPYING INSTALL NEWS README
 %{_bindir}/%{name}
+%{_bindir}/%{name}-sessiond
+%{_bindir}/%{name}-client
 %{_libdir}/lib%{name}*.so.*
 %{_libdir}/%{name}/plugins/*.so*
+%{_libdir}/systemd/system/tlm.service
 %config(noreplace) %{_sysconfdir}/tlm.conf
+%config %{_sysconfdir}/pam.d/tlm-login
 
 
 %files devel
index 571a1c4..276b0da 100644 (file)
@@ -4,7 +4,7 @@
 
 Name: tlm
 Summary: Login manager for Tizen
-Version: 0.0.2
+Version: 0.0.3
 Release: 1
 Group: System/Daemons
 License: LGPL-2.1+
@@ -76,6 +76,8 @@ rm -rf %{buildroot}
 %defattr(-,root,root,-)
 %doc AUTHORS COPYING INSTALL NEWS README
 %{_bindir}/%{name}
+%{_bindir}/%{name}-sessiond
+%{_bindir}/%{name}-client
 %{_libdir}/lib%{name}*.so.*
 %{_libdir}/%{name}/plugins/*.so*
 %exclude %{_libdir}/tlm/plugins/*.la
@@ -97,6 +99,9 @@ rm -rf %{buildroot}
 
 
 %changelog
+* Mon Jul 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Update to 0.0.3; create a new process (tlm-sessiond) for each session
+
 * Thu Mar 13 2014 Jussi Laako <jussi.laako@linux.intel.com>
 - Update to 0.0.2
 
index 746c706..82aa0f8 100644 (file)
@@ -41,7 +41,8 @@ SCAN_OPTIONS=
 # Extra options to supply to gtkdoc-mkdb.
 # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
 MKDB_OPTIONS=--xml-mode --output-format=xml \
---ignore-files="tlm-dbus-login-gen.c"
+--ignore-files="tlm-dbus-login-gen.c tlm-dbus-session-gen.c tlm-dbus-utils.c \
+tlm-pipe-stream.c tlm-utils.c"
 
 # Extra options to supply to gtkdoc-mktmpl
 # e.g. MKTMPL_OPTIONS=--only-section-tmpl
@@ -66,7 +67,8 @@ EXTRA_HFILES=
 
 # Header files or dirs to ignore when scanning. Use base file/dir names
 # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
-IGNORE_HFILES=tlm-dbus-login-gen.h tlm-dbus.h
+IGNORE_HFILES=tlm-dbus-login-gen.h tlm-dbus-session-gen.h tlm-dbus.h \
+tlm-dbus-utils.h tlm-pipe-stream.h tlm-utils.h
 
 # Images to copy into HTML directory.
 # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
@@ -75,7 +77,8 @@ HTML_IMAGES=
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 # e.g. content_files=running.sgml building.sgml changes-2.0.sgml
 content_files=introduction.xml \
-tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
 # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
 # These files must be listed here *and* in content_files
@@ -89,7 +92,7 @@ expand_content_files=
 # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
 GTKDOC_CFLAGS=$(GLIB_CFLAGS)
 GTKDOC_LIBS=$(GLIB_LIBS) \
-            $(top_builddir)/src/common/libtlm-plugin.la \
+            $(top_builddir)/src/common/libtlm-common.la \
             $(top_builddir)/src/plugins/default/libtlm-plugin-default.la
 
 if HAVE_LIBGUM
@@ -115,7 +118,7 @@ EXTRA_DIST +=
 # Comment this out if you want 'make check' to test you doc status
 # and run some sanity checks
 if ENABLE_GTK_DOC
-TESTS_ENVIRONMENT = cd $(srcdir) && \
+TESTS_ENVIRONMENT = \
   DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
   SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
 TESTS = $(GTKDOC_CHECK)
index 4ad37b6..e6a06ad 100644 (file)
@@ -502,7 +502,8 @@ SCAN_OPTIONS =
 # Extra options to supply to gtkdoc-mkdb.
 # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
 MKDB_OPTIONS = --xml-mode --output-format=xml \
---ignore-files="tlm-dbus-login-gen.c"
+--ignore-files="tlm-dbus-login-gen.c tlm-dbus-session-gen.c tlm-dbus-utils.c \
+tlm-pipe-stream.c tlm-utils.c"
 
 
 # Extra options to supply to gtkdoc-mktmpl
@@ -528,7 +529,9 @@ EXTRA_HFILES =
 
 # Header files or dirs to ignore when scanning. Use base file/dir names
 # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
-IGNORE_HFILES = tlm-dbus-login-gen.h tlm-dbus.h
+IGNORE_HFILES = tlm-dbus-login-gen.h tlm-dbus-session-gen.h tlm-dbus.h \
+tlm-dbus-utils.h tlm-pipe-stream.h tlm-utils.h
+
 
 # Images to copy into HTML directory.
 # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
@@ -537,7 +540,8 @@ HTML_IMAGES =
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 # e.g. content_files=running.sgml building.sgml changes-2.0.sgml
 content_files = introduction.xml \
-tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
 
 # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
@@ -551,7 +555,7 @@ expand_content_files =
 # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
 # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
 GTKDOC_CFLAGS = $(GLIB_CFLAGS)
-GTKDOC_LIBS = $(GLIB_LIBS) $(top_builddir)/src/common/libtlm-plugin.la \
+GTKDOC_LIBS = $(GLIB_LIBS) $(top_builddir)/src/common/libtlm-common.la \
        $(top_builddir)/src/plugins/default/libtlm-plugin-default.la \
        $(am__append_3) $(am__append_4)
 @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -641,7 +645,7 @@ GTK_DOC_V_PDF_0 = @echo "  DOC   Building PDF";
 
 # Comment this out if you want 'make check' to test you doc status
 # and run some sanity checks
-@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) && \
+@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = \
 @ENABLE_GTK_DOC_TRUE@  DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
 @ENABLE_GTK_DOC_TRUE@  SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
 
index 804d265..73df050 100644 (file)
@@ -78,7 +78,7 @@
 <tbody><tr>
 <td class="signal_type"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="TlmAuthPlugin.html#TlmAuthPlugin-authenticate" title="The “authenticate” signal">authenticate</a></td>
-<td class="signal_flags"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+<td class="signal_flags">Run Last</td>
 </tr></tbody>
 </table></div>
 </div>
@@ -266,7 +266,7 @@ user_function (<a class="link" href="TlmAuthPlugin.html" title="TlmAuthPlugin"><
 </tbody>
 </table></div>
 </div>
-<p>Flags: <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
+<p>Flags: Run Last</p>
 </div>
 </div>
 </div>
index d772430..a14f31e 100644 (file)
@@ -170,23 +170,14 @@ for where the file is searched for.</p>
 <a name="id-1.2.3.6.6"></a><h2>Usage</h2>
 </div>
 <p>Following code snippet demonstrates how to create and use config object:</p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4</pre></td>
-        <td class="listing_code"><pre class="programlisting">TlmConfig<span class="gtkdoc opt">*</span> config <span class="gtkdoc opt">=</span> <span class="function"><a href="TlmConfig.html#tlm-config-new">tlm_config_new</a></span> <span class="gtkdoc opt">();</span>
-<span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">*</span>str <span class="gtkdoc opt">=</span> <span class="function"><a href="TlmConfig.html#tlm-config-get-string">tlm_config_get_string</a></span> <span class="gtkdoc opt">(</span>config<span class="gtkdoc opt">,</span>
- TLM_CONFIG_GENERAL<span class="gtkdoc opt">,</span> TLM_CONFIG_GENERAL_PAM_SERVICE<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">);</span>
-<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="gtkdoc opt">(</span>config<span class="gtkdoc opt">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+<div class="informalexample"><pre class="programlisting">
+
+TlmConfig* config = tlm_config_new ();
+const gchar *str = tlm_config_get_string (config,
+ TLM_CONFIG_GENERAL, TLM_CONFIG_GENERAL_PAM_SERVICE, 0);
+g_object_unref(config);
 
+</pre></div>
 <p></p>
 <div class="refsect1">
 <a name="id-1.2.3.6.10"></a><h2>Where the configuration file is searched for</h2>
index 34b1814..81c040a 100644 (file)
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="tlm-Errors.html#tlm-error-new-from-variant" title="tlm_error_new_from_variant ()">tlm_error_new_from_variant</a>, function in <a class="link" href="tlm-Errors.html" title="Errors">Errors</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="tlm-Errors.html#tlm-error-quark" title="tlm_error_quark ()">tlm_error_quark</a>, function in <a class="link" href="tlm-Errors.html" title="Errors">Errors</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="tlm-Errors.html#tlm-error-to-variant" title="tlm_error_to_variant ()">tlm_error_to_variant</a>, function in <a class="link" href="tlm-Errors.html" title="Errors">Errors</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="tlm-tlm-log.html#EXPAND-LOG-MSG:CAPS" title="EXPAND_LOG_MSG()">EXPAND_LOG_MSG</a>, macro in <a class="link" href="tlm-tlm-log.html" title="tlm-log">tlm-log</a>
 </dt>
 <dd></dd>
index 82c8a3d..dca846b 100644 (file)
@@ -26,6 +26,8 @@
 <div class="titlepage"><div><div><h2 class="title">
 <a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
 <a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
+<dd class="glossdef"><p>Free data after the code is done.</p></dd>
 <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
 <dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
 </div>
index 9346b33..28c2e27 100644 (file)
Binary files a/docs/html/home.png and b/docs/html/home.png differ
index 12d3ff2..4d65742 100644 (file)
 <ANCHOR id="TLM-ERROR:CAPS" href="tlm/tlm-Errors.html#TLM-ERROR:CAPS">
 <ANCHOR id="TLM-GET-ERROR-FOR-ID:CAPS" href="tlm/tlm-Errors.html#TLM-GET-ERROR-FOR-ID:CAPS">
 <ANCHOR id="tlm-error-quark" href="tlm/tlm-Errors.html#tlm-error-quark">
+<ANCHOR id="tlm-error-new-from-variant" href="tlm/tlm-Errors.html#tlm-error-new-from-variant">
+<ANCHOR id="tlm-error-to-variant" href="tlm/tlm-Errors.html#tlm-error-to-variant">
 <ANCHOR id="tlm-Errors.other_details" href="tlm/tlm-Errors.html#tlm-Errors.other_details">
 <ANCHOR id="TlmError" href="tlm/tlm-Errors.html#TlmError">
+<ANCHOR id="annotation-glossterm-transfer full" href="tlm/ch05.html#annotation-glossterm-transfer full">
 <ANCHOR id="annotation-glossterm-transfer none" href="tlm/ch05.html#annotation-glossterm-transfer none">
index 3269393..9b8005b 100644 (file)
Binary files a/docs/html/left-insensitive.png and b/docs/html/left-insensitive.png differ
index 2abde03..c518641 100644 (file)
Binary files a/docs/html/left.png and b/docs/html/left.png differ
index 4c95785..f999f00 100644 (file)
Binary files a/docs/html/right-insensitive.png and b/docs/html/right-insensitive.png differ
index 76260ec..78f5875 100644 (file)
Binary files a/docs/html/right.png and b/docs/html/right.png differ
index ae6f653..4677828 100644 (file)
 <a class="link" href="tlm-Errors.html#tlm-error-quark" title="tlm_error_quark ()">tlm_error_quark</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="returnvalue">GError</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="tlm-Errors.html#tlm-error-new-from-variant" title="tlm_error_new_from_variant ()">tlm_error_new_from_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="tlm-Errors.html#tlm-error-to-variant" title="tlm_error_to_variant ()">tlm_error_to_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
 <p>This file provides Tlm error definitions and utilities.
 When creating an error, use <a class="link" href="tlm-Errors.html#TLM-ERROR:CAPS" title="TLM_ERROR"><span class="type">TLM_ERROR</span></a> for the error domain and errors
 from <a class="link" href="tlm-Errors.html#TlmError" title="enum TlmError"><span class="type">TlmError</span></a> for the error code.</p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2</pre></td>
-        <td class="listing_code"><pre class="programlisting">GError<span class="gtkdoc opt">*</span> err <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#g-error-new">g_error_new</a></span><span class="gtkdoc opt">(</span>TLM_ERROR<span class="gtkdoc opt">,</span> TLM_ERROR_INVALID_INPUT<span class="gtkdoc opt">,</span>
-<span class="string">&quot;Invalid input&quot;</span><span class="gtkdoc opt">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+    GError* err = g_error_new(TLM_ERROR, TLM_ERROR_INVALID_INPUT,
+    "Invalid input");
+</pre></div>
 <p></p>
 </div>
 <div class="refsect1">
@@ -153,6 +160,60 @@ tlm_error_quark (<em class="parameter"><code><span class="type">void</span></cod
 <p></p>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="tlm-error-new-from-variant"></a><h3>tlm_error_new_from_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="returnvalue">GError</span></a> *
+tlm_error_new_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *var</code></em>);</pre>
+<p>Converts the GVariant to GError.</p>
+<div class="refsect3">
+<a name="id-1.4.3.7.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>var</p></td>
+<td class="parameter_description"><p> instance of <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.3.7.5.6"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> object if successful, NULL otherwise. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="tlm-error-to-variant"></a><h3>tlm_error_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> *
+tlm_error_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>);</pre>
+<p>Converts the GError to GVariant.</p>
+<div class="refsect3">
+<a name="id-1.4.3.7.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p> instance of <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.3.7.6.6"></a><h4>Returns</h4>
+<p> (transfer full) <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> object if successful, NULL otherwise.</p>
+<p></p>
+</div>
+</div>
 </div>
 <div class="refsect1">
 <a name="tlm-Errors.other_details"></a><h2>Types and Values</h2>
@@ -233,6 +294,13 @@ code</p>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="TLM-ERROR-SESSION-TERMINATION-FAILURE:CAPS"></a>TLM_ERROR_SESSION_TERMINATION_FAILURE</p></td>
+<td class="enum_member_description">
+<p>Session termination failed</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="TLM-ERROR-DBUS-SERVER-START-FAILURE:CAPS"></a>TLM_ERROR_DBUS_SERVER_START_FAILURE</p></td>
 <td class="enum_member_description">
 <p>dbus-server startup failed</p>
@@ -240,6 +308,13 @@ code</p>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="TLM-ERROR-PAM-AUTH-FAILURE:CAPS"></a>TLM_ERROR_PAM_AUTH_FAILURE</p></td>
+<td class="enum_member_description">
+<p>PAM authentication failed</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="TLM-ERROR-DBUS-REQ-ABORTED:CAPS"></a>TLM_ERROR_DBUS_REQ_ABORTED</p></td>
 <td class="enum_member_description">
 <p>Dbus request aborted</p>
index dfe8ed3..127ecd8 100644 (file)
@@ -77,6 +77,8 @@
     <keyword type="macro" name="TLM_ERROR" link="tlm-Errors.html#TLM-ERROR:CAPS"/>
     <keyword type="macro" name="TLM_GET_ERROR_FOR_ID()" link="tlm-Errors.html#TLM-GET-ERROR-FOR-ID:CAPS"/>
     <keyword type="function" name="tlm_error_quark ()" link="tlm-Errors.html#tlm-error-quark"/>
+    <keyword type="function" name="tlm_error_new_from_variant ()" link="tlm-Errors.html#tlm-error-new-from-variant"/>
+    <keyword type="function" name="tlm_error_to_variant ()" link="tlm-Errors.html#tlm-error-to-variant"/>
     <keyword type="enum" name="enum TlmError" link="tlm-Errors.html#TlmError"/>
   </functions>
 </book>
index f404986..bda3ce2 100644 (file)
Binary files a/docs/html/up-insensitive.png and b/docs/html/up-insensitive.png differ
index 80b4b37..af46b2a 100644 (file)
Binary files a/docs/html/up.png and b/docs/html/up.png differ
diff --git a/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml b/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
new file mode 100644 (file)
index 0000000..d1eb63e
--- /dev/null
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+]>
+<refentry id="gdbus-org.tizen.Tlm.Session">
+  <refmeta>    <refentrytitle role="top_of_page" id="gdbus-interface-org-tizen-Tlm-Session.top_of_page">org.tizen.Tlm.Session</refentrytitle>
+  <indexterm zone="gdbus-interface-org-tizen-Tlm-Session.top_of_page"><primary sortas="Session">org.tizen.Tlm.Session</primary></indexterm>
+  </refmeta>  <refnamediv>    <refname>org.tizen.Tlm.Session</refname>    <refpurpose></refpurpose>  </refnamediv>  <refsynopsisdiv role="synopsis">
+    <title role="synopsis.title">Methods</title>
+    <synopsis>
+<link linkend="gdbus-method-org-tizen-Tlm-Session.sessionCreate">sessionCreate</link>    (IN  s     password,
+                  IN  a{ss} environment);
+<link linkend="gdbus-method-org-tizen-Tlm-Session.sessionTerminate">sessionTerminate</link> ();
+</synopsis>
+  </refsynopsisdiv>
+  <refsect1 role="signal_proto">
+    <title role="signal_proto.title">Signals</title>
+    <synopsis>
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.sessionCreated">sessionCreated</link>    (s     sessionid);
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated">sessionTerminated</link> ();
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.error">error</link>             ((uis) error);
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.authenticated">authenticated</link>     ();
+</synopsis>
+  </refsect1>
+  <refsect1 role="properties">
+    <title role="properties.title">Properties</title>
+    <synopsis>
+<link linkend="gdbus-property-org-tizen-Tlm-Session.seatid">seatid</link>     readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.username">username</link>   readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.service">service</link>    readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.sessionid">sessionid</link>  readable   s
+</synopsis>
+  </refsect1>
+<refsect1 role="desc" id="gdbus-interface-org-tizen-Tlm-Session">
+  <title role="desc.title">Description</title>
+  <para></para>
+</refsect1>
+<refsect1 role="details" id="gdbus-methods-org.tizen.Tlm.Session">
+  <title role="details.title">Method Details</title>
+<refsect2 role="method" id="gdbus-method-org-tizen-Tlm-Session.sessionCreate">
+  <title>The sessionCreate() method</title>
+  <indexterm zone="gdbus-method-org-tizen-Tlm-Session.sessionCreate"><primary sortas="Session.sessionCreate">org.tizen.Tlm.Session.sessionCreate()</primary></indexterm>
+<programlisting>
+sessionCreate (IN  s     password,
+               IN  a{ss} environment);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>IN s <parameter>password</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+<varlistentry>
+  <term><literal>IN a{ss} <parameter>environment</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="method" id="gdbus-method-org-tizen-Tlm-Session.sessionTerminate">
+  <title>The sessionTerminate() method</title>
+  <indexterm zone="gdbus-method-org-tizen-Tlm-Session.sessionTerminate"><primary sortas="Session.sessionTerminate">org.tizen.Tlm.Session.sessionTerminate()</primary></indexterm>
+<programlisting>
+sessionTerminate ();
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+<refsect1 role="details" id="gdbus-signals-org.tizen.Tlm.Session">
+  <title role="details.title">Signal Details</title>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.sessionCreated">
+  <title>The "sessionCreated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.sessionCreated"><primary sortas="Session::sessionCreated">org.tizen.Tlm.Session::sessionCreated</primary></indexterm>
+<programlisting>
+sessionCreated (s sessionid);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>s <parameter>sessionid</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated">
+  <title>The "sessionTerminated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated"><primary sortas="Session::sessionTerminated">org.tizen.Tlm.Session::sessionTerminated</primary></indexterm>
+<programlisting>
+sessionTerminated ();
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.error">
+  <title>The "error" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.error"><primary sortas="Session::error">org.tizen.Tlm.Session::error</primary></indexterm>
+<programlisting>
+error ((uis) error);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>(uis) <parameter>error</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.authenticated">
+  <title>The "authenticated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.authenticated"><primary sortas="Session::authenticated">org.tizen.Tlm.Session::authenticated</primary></indexterm>
+<programlisting>
+authenticated ();
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+<refsect1 role="details" id="gdbus-properties-org.tizen.Tlm.Session">
+  <title role="details.title">Property Details</title>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.seatid">
+  <title>The "seatid" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.seatid"><primary sortas="Session:seatid">org.tizen.Tlm.Session:seatid</primary></indexterm>
+<programlisting>
+seatid  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.username">
+  <title>The "username" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.username"><primary sortas="Session:username">org.tizen.Tlm.Session:username</primary></indexterm>
+<programlisting>
+username  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.service">
+  <title>The "service" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.service"><primary sortas="Session:service">org.tizen.Tlm.Session:service</primary></indexterm>
+<programlisting>
+service  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.sessionid">
+  <title>The "sessionid" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.sessionid"><primary sortas="Session:sessionid">org.tizen.Tlm.Session:sessionid</primary></indexterm>
+<programlisting>
+sessionid  readable   s
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+</refentry>
+
index 608d7d4..ebfb276 100644 (file)
@@ -108,6 +108,8 @@ TLM_ERROR
 TlmError
 TLM_GET_ERROR_FOR_ID
 tlm_error_quark
+tlm_error_new_from_variant
+tlm_error_to_variant
 </SECTION>
 
 <SECTION>
index 7311a3d..753764c 100644 (file)
@@ -17,7 +17,7 @@ tlm_ui_LDADD = \
     $(GMODULE_LIBS) \
     $(ELEMENTARY_LIBS) \
     $(DEPS_LIBS) \
-    $(top_builddir)/src/daemon/tlm-tlm-utils.o \
+    $(top_builddir)/src/common/.libs/libtlm_common_la-tlm-utils.o \
     $(top_builddir)/src/daemon/dbus/libtlm-dbus.la \
     $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la
 
index 73acb0e..a2a1c3b 100644 (file)
@@ -100,7 +100,7 @@ tlm_ui_OBJECTS = $(am_tlm_ui_OBJECTS)
 am__DEPENDENCIES_1 =
 tlm_ui_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-       $(top_builddir)/src/daemon/tlm-tlm-utils.o \
+       $(top_builddir)/src/common/.libs/libtlm_common_la-tlm-utils.o \
        $(top_builddir)/src/daemon/dbus/libtlm-dbus.la \
        $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -325,7 +325,7 @@ tlm_ui_LDADD = \
     $(GMODULE_LIBS) \
     $(ELEMENTARY_LIBS) \
     $(DEPS_LIBS) \
-    $(top_builddir)/src/daemon/tlm-tlm-utils.o \
+    $(top_builddir)/src/common/.libs/libtlm_common_la-tlm-utils.o \
     $(top_builddir)/src/daemon/dbus/libtlm-dbus.la \
     $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la
 
index 12025d0..34e5e1c 100644 (file)
@@ -33,7 +33,7 @@
 #include "common/tlm-log.h"
 #include "common/dbus/tlm-dbus.h"
 #include "common/dbus/tlm-dbus-login-gen.h"
-#include "daemon/dbus/tlm-dbus-utils.h"
+#include "common/dbus/tlm-dbus-utils.h"
 
 #define BUFLEN 8096
 #define UID_MIN "UID_MIN"
index bb5fa02..a356aca 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
 #         compiler:            $LTCC
 #         compiler flags:              $LTCFLAGS
 #         linker:              $LD (gnu? $with_gnu_ld)
-#         $progname:   (GNU libtool) 2.4.2 Debian-2.4.2-1.7
+#         $progname:   (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
 #         automake:    $automake_version
 #         autoconf:    $autoconf_version
 #
@@ -80,7 +80,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.7"
+VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1"
 TIMESTAMP=""
 package_revision=1.3337
 
index 4c81595..fa8ec49 100644 (file)
@@ -1,3 +1,6 @@
+* Mon Jul 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Update to 0.0.3; create a new process (tlm-sessiond) for each session
+
 * Wed Jun 11 2014 Jussi Laako <jussi.laako@linux.intel.com>
 - Depend on gumd on Tizen
 
index f2f28d7..ed1b5fd 100644 (file)
@@ -4,8 +4,8 @@
 
 Name: tlm
 Summary: Login manager for Tizen
-Version: 0.0.2
-Release: 7
+Version: 0.0.3
+Release: 1
 Group: System/Service
 License: LGPL-2.1+
 Source: %{name}-%{version}.tar.gz
@@ -82,6 +82,8 @@ install -m 644 data/tlm-login %{buildroot}%{_sysconfdir}/pam.d/
 %manifest %{name}.manifest
 %doc AUTHORS COPYING INSTALL NEWS README
 %{_bindir}/%{name}
+%{_bindir}/%{name}-sessiond
+%{_bindir}/%{name}-client
 %{_libdir}/lib%{name}*.so.*
 %{_libdir}/%{name}/plugins/*.so*
 %{_libdir}/systemd/system/tlm.service
index a8d2bae..ff51f5f 100644 (file)
@@ -1,2 +1,2 @@
 NULL=
-SUBDIRS = common plugins daemon
+SUBDIRS = common plugins daemon sessiond utils
index 29d25ec..5d1b01b 100644 (file)
@@ -314,7 +314,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 NULL = 
-SUBDIRS = common plugins daemon
+SUBDIRS = common plugins daemon sessiond utils
 all: all-recursive
 
 .SUFFIXES:
index 1e1b812..b35f3c9 100644 (file)
@@ -1,16 +1,16 @@
 include $(top_srcdir)/common.mk
 SUBDIRS = dbus
 
-lib_LTLIBRARIES = libtlm-plugin.la
+lib_LTLIBRARIES = libtlm-common.la
 BUILT_SOURCES =
 
-libtlm_plugin_la_includedir = $(includedir)/tlm
-libtlm_plugin_la_include_HEADERS = \
+libtlm_common_la_includedir = $(includedir)/tlm
+libtlm_common_la_include_HEADERS = \
        tlm-account-plugin.h \
        tlm-auth-plugin.h \
        $(NULL)
 
-libtlm_plugin_la_SOURCES = \
+libtlm_common_la_SOURCES = \
        $(BUILT_SOURCES) \
        tlm-account-plugin.c \
        tlm-auth-plugin.c \
@@ -21,17 +21,21 @@ libtlm_plugin_la_SOURCES = \
        tlm-config.h \
        tlm-config.c \
        tlm-config-general.h \
+       tlm-pipe-stream.c \
+       tlm-pipe-stream.h \
+       tlm-utils.h \
+       tlm-utils.c \
        $(NULL)
 
-libtlm_plugin_la_CFLAGS = \
+libtlm_common_la_CFLAGS = \
        -I$(abs_top_srcdir)/src \
-       -DG_LOG_DOMAIN=\"TLM_PLUGIN\" \
+       -DG_LOG_DOMAIN=\"TLM_COMMON\" \
        -DTLM_PLUGINS_DIR='"$(pluginsdir)"' \
        -DTLM_SYSCONF_DIR='"$(sysconfdir)"' \
        $(TLM_CFLAGS) \
        $(NULL)
 
-libtlm_plugin_la_LIBADD = \
+libtlm_common_la_LIBADD = \
        $(TLM_LIBS) \
        $(NULL)
 
index 4d5bbfc..7dec8a1 100644 (file)
@@ -81,7 +81,7 @@ build_triplet = @build@
 host_triplet = @host@
 DIST_COMMON = $(top_srcdir)/common.mk $(srcdir)/Makefile.in \
        $(srcdir)/Makefile.am $(top_srcdir)/depcomp \
-       $(libtlm_plugin_la_include_HEADERS)
+       $(libtlm_common_la_include_HEADERS)
 subdir = src/common
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
@@ -122,24 +122,26 @@ am__uninstall_files_from_dir = { \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 am__installdirs = "$(DESTDIR)$(libdir)" \
-       "$(DESTDIR)$(libtlm_plugin_la_includedir)"
+       "$(DESTDIR)$(libtlm_common_la_includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libtlm_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+libtlm_common_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am__objects_1 =
-am_libtlm_plugin_la_OBJECTS = $(am__objects_1) \
-       libtlm_plugin_la-tlm-account-plugin.lo \
-       libtlm_plugin_la-tlm-auth-plugin.lo \
-       libtlm_plugin_la-tlm-log.lo libtlm_plugin_la-tlm-error.lo \
-       libtlm_plugin_la-tlm-config.lo
-libtlm_plugin_la_OBJECTS = $(am_libtlm_plugin_la_OBJECTS)
+am_libtlm_common_la_OBJECTS = $(am__objects_1) \
+       libtlm_common_la-tlm-account-plugin.lo \
+       libtlm_common_la-tlm-auth-plugin.lo \
+       libtlm_common_la-tlm-log.lo libtlm_common_la-tlm-error.lo \
+       libtlm_common_la-tlm-config.lo \
+       libtlm_common_la-tlm-pipe-stream.lo \
+       libtlm_common_la-tlm-utils.lo
+libtlm_common_la_OBJECTS = $(am_libtlm_common_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libtlm_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+libtlm_common_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-       $(libtlm_plugin_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       $(libtlm_common_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
        -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -175,8 +177,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libtlm_plugin_la_SOURCES)
-DIST_SOURCES = $(libtlm_plugin_la_SOURCES)
+SOURCES = $(libtlm_common_la_SOURCES)
+DIST_SOURCES = $(libtlm_common_la_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
        ctags-recursive dvi-recursive html-recursive info-recursive \
        install-data-recursive install-dvi-recursive \
@@ -190,7 +192,7 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(libtlm_plugin_la_include_HEADERS)
+HEADERS = $(libtlm_common_la_include_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
 am__recursive_targets = \
@@ -389,15 +391,15 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 pluginsdir = $(pkglibdir)/plugins
 SUBDIRS = dbus
-lib_LTLIBRARIES = libtlm-plugin.la
+lib_LTLIBRARIES = libtlm-common.la
 BUILT_SOURCES = 
-libtlm_plugin_la_includedir = $(includedir)/tlm
-libtlm_plugin_la_include_HEADERS = \
+libtlm_common_la_includedir = $(includedir)/tlm
+libtlm_common_la_include_HEADERS = \
        tlm-account-plugin.h \
        tlm-auth-plugin.h \
        $(NULL)
 
-libtlm_plugin_la_SOURCES = \
+libtlm_common_la_SOURCES = \
        $(BUILT_SOURCES) \
        tlm-account-plugin.c \
        tlm-auth-plugin.c \
@@ -408,17 +410,21 @@ libtlm_plugin_la_SOURCES = \
        tlm-config.h \
        tlm-config.c \
        tlm-config-general.h \
+       tlm-pipe-stream.c \
+       tlm-pipe-stream.h \
+       tlm-utils.h \
+       tlm-utils.c \
        $(NULL)
 
-libtlm_plugin_la_CFLAGS = \
+libtlm_common_la_CFLAGS = \
        -I$(abs_top_srcdir)/src \
-       -DG_LOG_DOMAIN=\"TLM_PLUGIN\" \
+       -DG_LOG_DOMAIN=\"TLM_COMMON\" \
        -DTLM_PLUGINS_DIR='"$(pluginsdir)"' \
        -DTLM_SYSCONF_DIR='"$(sysconfdir)"' \
        $(TLM_CFLAGS) \
        $(NULL)
 
-libtlm_plugin_la_LIBADD = \
+libtlm_common_la_LIBADD = \
        $(TLM_LIBS) \
        $(NULL)
 
@@ -494,8 +500,8 @@ clean-libLTLIBRARIES:
          rm -f $${locs}; \
        }
 
-libtlm-plugin.la: $(libtlm_plugin_la_OBJECTS) $(libtlm_plugin_la_DEPENDENCIES) $(EXTRA_libtlm_plugin_la_DEPENDENCIES) 
-       $(AM_V_CCLD)$(libtlm_plugin_la_LINK) -rpath $(libdir) $(libtlm_plugin_la_OBJECTS) $(libtlm_plugin_la_LIBADD) $(LIBS)
+libtlm-common.la: $(libtlm_common_la_OBJECTS) $(libtlm_common_la_DEPENDENCIES) $(EXTRA_libtlm_common_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libtlm_common_la_LINK) -rpath $(libdir) $(libtlm_common_la_OBJECTS) $(libtlm_common_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -503,11 +509,13 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_plugin_la-tlm-account-plugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_plugin_la-tlm-auth-plugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_plugin_la-tlm-config.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_plugin_la-tlm-error.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_plugin_la-tlm-log.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-account-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-auth-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-log.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-pipe-stream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_common_la-tlm-utils.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -533,67 +541,81 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libtlm_plugin_la-tlm-account-plugin.lo: tlm-account-plugin.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -MT libtlm_plugin_la-tlm-account-plugin.lo -MD -MP -MF $(DEPDIR)/libtlm_plugin_la-tlm-account-plugin.Tpo -c -o libtlm_plugin_la-tlm-account-plugin.lo `test -f 'tlm-account-plugin.c' || echo '$(srcdir)/'`tlm-account-plugin.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_plugin_la-tlm-account-plugin.Tpo $(DEPDIR)/libtlm_plugin_la-tlm-account-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-account-plugin.c' object='libtlm_plugin_la-tlm-account-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+libtlm_common_la-tlm-account-plugin.lo: tlm-account-plugin.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-account-plugin.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-account-plugin.Tpo -c -o libtlm_common_la-tlm-account-plugin.lo `test -f 'tlm-account-plugin.c' || echo '$(srcdir)/'`tlm-account-plugin.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-account-plugin.Tpo $(DEPDIR)/libtlm_common_la-tlm-account-plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-account-plugin.c' object='libtlm_common_la-tlm-account-plugin.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -c -o libtlm_plugin_la-tlm-account-plugin.lo `test -f 'tlm-account-plugin.c' || echo '$(srcdir)/'`tlm-account-plugin.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-account-plugin.lo `test -f 'tlm-account-plugin.c' || echo '$(srcdir)/'`tlm-account-plugin.c
 
-libtlm_plugin_la-tlm-auth-plugin.lo: tlm-auth-plugin.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -MT libtlm_plugin_la-tlm-auth-plugin.lo -MD -MP -MF $(DEPDIR)/libtlm_plugin_la-tlm-auth-plugin.Tpo -c -o libtlm_plugin_la-tlm-auth-plugin.lo `test -f 'tlm-auth-plugin.c' || echo '$(srcdir)/'`tlm-auth-plugin.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_plugin_la-tlm-auth-plugin.Tpo $(DEPDIR)/libtlm_plugin_la-tlm-auth-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-auth-plugin.c' object='libtlm_plugin_la-tlm-auth-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+libtlm_common_la-tlm-auth-plugin.lo: tlm-auth-plugin.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-auth-plugin.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-auth-plugin.Tpo -c -o libtlm_common_la-tlm-auth-plugin.lo `test -f 'tlm-auth-plugin.c' || echo '$(srcdir)/'`tlm-auth-plugin.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-auth-plugin.Tpo $(DEPDIR)/libtlm_common_la-tlm-auth-plugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-auth-plugin.c' object='libtlm_common_la-tlm-auth-plugin.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -c -o libtlm_plugin_la-tlm-auth-plugin.lo `test -f 'tlm-auth-plugin.c' || echo '$(srcdir)/'`tlm-auth-plugin.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-auth-plugin.lo `test -f 'tlm-auth-plugin.c' || echo '$(srcdir)/'`tlm-auth-plugin.c
 
-libtlm_plugin_la-tlm-log.lo: tlm-log.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -MT libtlm_plugin_la-tlm-log.lo -MD -MP -MF $(DEPDIR)/libtlm_plugin_la-tlm-log.Tpo -c -o libtlm_plugin_la-tlm-log.lo `test -f 'tlm-log.c' || echo '$(srcdir)/'`tlm-log.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_plugin_la-tlm-log.Tpo $(DEPDIR)/libtlm_plugin_la-tlm-log.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-log.c' object='libtlm_plugin_la-tlm-log.lo' libtool=yes @AMDEPBACKSLASH@
+libtlm_common_la-tlm-log.lo: tlm-log.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-log.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-log.Tpo -c -o libtlm_common_la-tlm-log.lo `test -f 'tlm-log.c' || echo '$(srcdir)/'`tlm-log.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-log.Tpo $(DEPDIR)/libtlm_common_la-tlm-log.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-log.c' object='libtlm_common_la-tlm-log.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -c -o libtlm_plugin_la-tlm-log.lo `test -f 'tlm-log.c' || echo '$(srcdir)/'`tlm-log.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-log.lo `test -f 'tlm-log.c' || echo '$(srcdir)/'`tlm-log.c
 
-libtlm_plugin_la-tlm-error.lo: tlm-error.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -MT libtlm_plugin_la-tlm-error.lo -MD -MP -MF $(DEPDIR)/libtlm_plugin_la-tlm-error.Tpo -c -o libtlm_plugin_la-tlm-error.lo `test -f 'tlm-error.c' || echo '$(srcdir)/'`tlm-error.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_plugin_la-tlm-error.Tpo $(DEPDIR)/libtlm_plugin_la-tlm-error.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-error.c' object='libtlm_plugin_la-tlm-error.lo' libtool=yes @AMDEPBACKSLASH@
+libtlm_common_la-tlm-error.lo: tlm-error.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-error.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-error.Tpo -c -o libtlm_common_la-tlm-error.lo `test -f 'tlm-error.c' || echo '$(srcdir)/'`tlm-error.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-error.Tpo $(DEPDIR)/libtlm_common_la-tlm-error.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-error.c' object='libtlm_common_la-tlm-error.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -c -o libtlm_plugin_la-tlm-error.lo `test -f 'tlm-error.c' || echo '$(srcdir)/'`tlm-error.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-error.lo `test -f 'tlm-error.c' || echo '$(srcdir)/'`tlm-error.c
 
-libtlm_plugin_la-tlm-config.lo: tlm-config.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -MT libtlm_plugin_la-tlm-config.lo -MD -MP -MF $(DEPDIR)/libtlm_plugin_la-tlm-config.Tpo -c -o libtlm_plugin_la-tlm-config.lo `test -f 'tlm-config.c' || echo '$(srcdir)/'`tlm-config.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_plugin_la-tlm-config.Tpo $(DEPDIR)/libtlm_plugin_la-tlm-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-config.c' object='libtlm_plugin_la-tlm-config.lo' libtool=yes @AMDEPBACKSLASH@
+libtlm_common_la-tlm-config.lo: tlm-config.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-config.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-config.Tpo -c -o libtlm_common_la-tlm-config.lo `test -f 'tlm-config.c' || echo '$(srcdir)/'`tlm-config.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-config.Tpo $(DEPDIR)/libtlm_common_la-tlm-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-config.c' object='libtlm_common_la-tlm-config.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_plugin_la_CFLAGS) $(CFLAGS) -c -o libtlm_plugin_la-tlm-config.lo `test -f 'tlm-config.c' || echo '$(srcdir)/'`tlm-config.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-config.lo `test -f 'tlm-config.c' || echo '$(srcdir)/'`tlm-config.c
+
+libtlm_common_la-tlm-pipe-stream.lo: tlm-pipe-stream.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-pipe-stream.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-pipe-stream.Tpo -c -o libtlm_common_la-tlm-pipe-stream.lo `test -f 'tlm-pipe-stream.c' || echo '$(srcdir)/'`tlm-pipe-stream.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-pipe-stream.Tpo $(DEPDIR)/libtlm_common_la-tlm-pipe-stream.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-pipe-stream.c' object='libtlm_common_la-tlm-pipe-stream.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-pipe-stream.lo `test -f 'tlm-pipe-stream.c' || echo '$(srcdir)/'`tlm-pipe-stream.c
+
+libtlm_common_la-tlm-utils.lo: tlm-utils.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -MT libtlm_common_la-tlm-utils.lo -MD -MP -MF $(DEPDIR)/libtlm_common_la-tlm-utils.Tpo -c -o libtlm_common_la-tlm-utils.lo `test -f 'tlm-utils.c' || echo '$(srcdir)/'`tlm-utils.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_common_la-tlm-utils.Tpo $(DEPDIR)/libtlm_common_la-tlm-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-utils.c' object='libtlm_common_la-tlm-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtlm_common_la_CFLAGS) $(CFLAGS) -c -o libtlm_common_la-tlm-utils.lo `test -f 'tlm-utils.c' || echo '$(srcdir)/'`tlm-utils.c
 
 mostlyclean-libtool:
        -rm -f *.lo
 
 clean-libtool:
        -rm -rf .libs _libs
-install-libtlm_plugin_la_includeHEADERS: $(libtlm_plugin_la_include_HEADERS)
+install-libtlm_common_la_includeHEADERS: $(libtlm_common_la_include_HEADERS)
        @$(NORMAL_INSTALL)
-       @list='$(libtlm_plugin_la_include_HEADERS)'; test -n "$(libtlm_plugin_la_includedir)" || list=; \
+       @list='$(libtlm_common_la_include_HEADERS)'; test -n "$(libtlm_common_la_includedir)" || list=; \
        if test -n "$$list"; then \
-         echo " $(MKDIR_P) '$(DESTDIR)$(libtlm_plugin_la_includedir)'"; \
-         $(MKDIR_P) "$(DESTDIR)$(libtlm_plugin_la_includedir)" || exit 1; \
+         echo " $(MKDIR_P) '$(DESTDIR)$(libtlm_common_la_includedir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(libtlm_common_la_includedir)" || exit 1; \
        fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
        done | $(am__base_list) | \
        while read files; do \
-         echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libtlm_plugin_la_includedir)'"; \
-         $(INSTALL_HEADER) $$files "$(DESTDIR)$(libtlm_plugin_la_includedir)" || exit $$?; \
+         echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libtlm_common_la_includedir)'"; \
+         $(INSTALL_HEADER) $$files "$(DESTDIR)$(libtlm_common_la_includedir)" || exit $$?; \
        done
 
-uninstall-libtlm_plugin_la_includeHEADERS:
+uninstall-libtlm_common_la_includeHEADERS:
        @$(NORMAL_UNINSTALL)
-       @list='$(libtlm_plugin_la_include_HEADERS)'; test -n "$(libtlm_plugin_la_includedir)" || list=; \
+       @list='$(libtlm_common_la_include_HEADERS)'; test -n "$(libtlm_common_la_includedir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       dir='$(DESTDIR)$(libtlm_plugin_la_includedir)'; $(am__uninstall_files_from_dir)
+       dir='$(DESTDIR)$(libtlm_common_la_includedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run 'make' without going through this Makefile.
@@ -755,7 +777,7 @@ check: $(BUILT_SOURCES)
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtlm_plugin_la_includedir)"; do \
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libtlm_common_la_includedir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: $(BUILT_SOURCES)
@@ -813,7 +835,7 @@ info: info-recursive
 
 info-am:
 
-install-data-am: install-libtlm_plugin_la_includeHEADERS
+install-data-am: install-libtlm_common_la_includeHEADERS
 
 install-dvi: install-dvi-recursive
 
@@ -860,7 +882,7 @@ ps: ps-recursive
 ps-am:
 
 uninstall-am: uninstall-libLTLIBRARIES \
-       uninstall-libtlm_plugin_la_includeHEADERS
+       uninstall-libtlm_common_la_includeHEADERS
 
 .MAKE: $(am__recursive_targets) all check install install-am \
        install-strip
@@ -873,14 +895,14 @@ uninstall-am: uninstall-libLTLIBRARIES \
        install install-am install-data install-data-am install-dvi \
        install-dvi-am install-exec install-exec-am install-html \
        install-html-am install-info install-info-am \
-       install-libLTLIBRARIES install-libtlm_plugin_la_includeHEADERS \
+       install-libLTLIBRARIES install-libtlm_common_la_includeHEADERS \
        install-man install-pdf install-pdf-am install-ps \
        install-ps-am install-strip installcheck installcheck-am \
        installdirs installdirs-am maintainer-clean \
        maintainer-clean-generic mostlyclean mostlyclean-compile \
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \
-       uninstall-libtlm_plugin_la_includeHEADERS
+       uninstall-libtlm_common_la_includeHEADERS
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 099ffa0..d98b000 100644 (file)
@@ -3,10 +3,13 @@ INTERFACES_DIR = $(top_builddir)/src/common/dbus/interfaces
 DBUS_BUILT_SOURCES = \
     tlm-dbus-login-gen.c \
     tlm-dbus-login-gen.h \
+    tlm-dbus-session-gen.c \
+    tlm-dbus-session-gen.h \
     $(NULL)
 
 DBUS_BUILT_DOCS = \
     tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+    tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml \
     $(NULL)
 
 DBUS_INTERFACE_PREFIX="org.tizen.Tlm."
@@ -18,6 +21,14 @@ tlm-dbus-login-gen.c tlm-dbus-login-gen.h : $(INTERFACES_DIR)/org.tizen.Tlm.Logi
        --generate-docbook tlm-dbus-login-doc-gen \
        $<
 
+tlm-dbus-session-gen.c tlm-dbus-session-gen.h : $(INTERFACES_DIR)/org.tizen.Tlm.Session.xml
+       gdbus-codegen                                       \
+       --interface-prefix $(DBUS_INTERFACE_PREFIX)      \
+       --c-namespace TlmDbus                       \
+       --generate-c-code  tlm-dbus-session-gen     \
+       --generate-docbook tlm-dbus-session-doc-gen \
+       $<
+
 noinst_LTLIBRARIES = libtlm-dbus-glue.la
 
 libtlm_dbus_glue_la_CPPFLAGS = \
@@ -34,19 +45,24 @@ nodist_libtlm_dbus_glue_la_SOURCES =  \
 
 libtlm_dbus_glue_la_SOURCES =  \
    tlm-dbus.h \
+   tlm-dbus-utils.c \
+   tlm-dbus-utils.h \
    $(NULL)
 
-EXTRA_DIST = interfaces tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+EXTRA_DIST = interfaces tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+  tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
-all-local: login_xml_doc
+all-local: copy_xml_doc
 
 mostlyclean-local:
        rm -rf $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+       rm -rf $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
-login_xml_doc: tlm-dbus-login-gen.c
+copy_xml_doc: tlm-dbus-login-gen.c tlm-dbus-session-gen.c
        cp -f $(abs_top_srcdir)/src/common/dbus/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
        chmod +w $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+       cp -f $(abs_top_srcdir)/src/common/dbus/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
+       chmod +w $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
 clean-local:
        rm -f *~ $(DBUS_BUILT_SOURCES) $(DBUS_BUILT_DOCS)
-
index 60f43ea..bf85a4f 100644 (file)
@@ -97,9 +97,10 @@ am__DEPENDENCIES_1 =
 libtlm_dbus_glue_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1)
 am__objects_1 =
-am_libtlm_dbus_glue_la_OBJECTS = $(am__objects_1)
+am_libtlm_dbus_glue_la_OBJECTS =  \
+       libtlm_dbus_glue_la-tlm-dbus-utils.lo $(am__objects_1)
 am__objects_2 = libtlm_dbus_glue_la-tlm-dbus-login-gen.lo \
-       $(am__objects_1)
+       libtlm_dbus_glue_la-tlm-dbus-session-gen.lo $(am__objects_1)
 nodist_libtlm_dbus_glue_la_OBJECTS = $(am__objects_2) $(am__objects_1)
 libtlm_dbus_glue_la_OBJECTS = $(am_libtlm_dbus_glue_la_OBJECTS) \
        $(nodist_libtlm_dbus_glue_la_OBJECTS)
@@ -316,10 +317,13 @@ INTERFACES_DIR = $(top_builddir)/src/common/dbus/interfaces
 DBUS_BUILT_SOURCES = \
     tlm-dbus-login-gen.c \
     tlm-dbus-login-gen.h \
+    tlm-dbus-session-gen.c \
+    tlm-dbus-session-gen.h \
     $(NULL)
 
 DBUS_BUILT_DOCS = \
     tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+    tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml \
     $(NULL)
 
 DBUS_INTERFACE_PREFIX = "org.tizen.Tlm."
@@ -338,9 +342,13 @@ nodist_libtlm_dbus_glue_la_SOURCES = \
 
 libtlm_dbus_glue_la_SOURCES = \
    tlm-dbus.h \
+   tlm-dbus-utils.c \
+   tlm-dbus-utils.h \
    $(NULL)
 
-EXTRA_DIST = interfaces tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+EXTRA_DIST = interfaces tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml \
+  tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
+
 all: all-am
 
 .SUFFIXES:
@@ -397,6 +405,8 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-login-gen.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-session-gen.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-utils.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -422,6 +432,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libtlm_dbus_glue_la-tlm-dbus-utils.lo: tlm-dbus-utils.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_dbus_glue_la-tlm-dbus-utils.lo -MD -MP -MF $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-utils.Tpo -c -o libtlm_dbus_glue_la-tlm-dbus-utils.lo `test -f 'tlm-dbus-utils.c' || echo '$(srcdir)/'`tlm-dbus-utils.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-utils.Tpo $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-dbus-utils.c' object='libtlm_dbus_glue_la-tlm-dbus-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_dbus_glue_la-tlm-dbus-utils.lo `test -f 'tlm-dbus-utils.c' || echo '$(srcdir)/'`tlm-dbus-utils.c
+
 libtlm_dbus_glue_la-tlm-dbus-login-gen.lo: tlm-dbus-login-gen.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_dbus_glue_la-tlm-dbus-login-gen.lo -MD -MP -MF $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-login-gen.Tpo -c -o libtlm_dbus_glue_la-tlm-dbus-login-gen.lo `test -f 'tlm-dbus-login-gen.c' || echo '$(srcdir)/'`tlm-dbus-login-gen.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-login-gen.Tpo $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-login-gen.Plo
@@ -429,6 +446,13 @@ libtlm_dbus_glue_la-tlm-dbus-login-gen.lo: tlm-dbus-login-gen.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_dbus_glue_la-tlm-dbus-login-gen.lo `test -f 'tlm-dbus-login-gen.c' || echo '$(srcdir)/'`tlm-dbus-login-gen.c
 
+libtlm_dbus_glue_la-tlm-dbus-session-gen.lo: tlm-dbus-session-gen.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_dbus_glue_la-tlm-dbus-session-gen.lo -MD -MP -MF $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-session-gen.Tpo -c -o libtlm_dbus_glue_la-tlm-dbus-session-gen.lo `test -f 'tlm-dbus-session-gen.c' || echo '$(srcdir)/'`tlm-dbus-session-gen.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-session-gen.Tpo $(DEPDIR)/libtlm_dbus_glue_la-tlm-dbus-session-gen.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-dbus-session-gen.c' object='libtlm_dbus_glue_la-tlm-dbus-session-gen.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_glue_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_dbus_glue_la-tlm-dbus-session-gen.lo `test -f 'tlm-dbus-session-gen.c' || echo '$(srcdir)/'`tlm-dbus-session-gen.c
+
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -647,14 +671,25 @@ tlm-dbus-login-gen.c tlm-dbus-login-gen.h : $(INTERFACES_DIR)/org.tizen.Tlm.Logi
        --generate-docbook tlm-dbus-login-doc-gen \
        $<
 
-all-local: login_xml_doc
+tlm-dbus-session-gen.c tlm-dbus-session-gen.h : $(INTERFACES_DIR)/org.tizen.Tlm.Session.xml
+       gdbus-codegen                                       \
+       --interface-prefix $(DBUS_INTERFACE_PREFIX)      \
+       --c-namespace TlmDbus                       \
+       --generate-c-code  tlm-dbus-session-gen     \
+       --generate-docbook tlm-dbus-session-doc-gen \
+       $<
+
+all-local: copy_xml_doc
 
 mostlyclean-local:
        rm -rf $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+       rm -rf $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
-login_xml_doc: tlm-dbus-login-gen.c
+copy_xml_doc: tlm-dbus-login-gen.c tlm-dbus-session-gen.c
        cp -f $(abs_top_srcdir)/src/common/dbus/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
        chmod +w $(abs_top_builddir)/docs/tlm-dbus-login-doc-gen-org.tizen.Tlm.Login.xml
+       cp -f $(abs_top_srcdir)/src/common/dbus/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
+       chmod +w $(abs_top_builddir)/docs/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
 
 clean-local:
        rm -f *~ $(DBUS_BUILT_SOURCES) $(DBUS_BUILT_DOCS)
diff --git a/src/common/dbus/interfaces/org.tizen.Tlm.Session.xml b/src/common/dbus/interfaces/org.tizen.Tlm.Session.xml
new file mode 100644 (file)
index 0000000..642dd62
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+  <interface name="org.tizen.Tlm.Session">
+    <property type='s' name='seatid' access='readwrite'/>
+    <property type='s' name='username' access='readwrite'/>
+    <property type='s' name='service' access='readwrite'/>
+    <property type='s' name='sessionid' access='read'/>
+
+    <method name="sessionCreate">
+      <arg name="password" type="s" direction="in"/>
+      <arg name="environment" type="a{ss}" direction="in"/>
+    </method>
+    <method name="sessionTerminate">
+    </method>
+
+    <signal name="sessionCreated">
+      <arg name="sessionid" type="s" direction="out"/>
+    </signal>
+    <signal name="sessionTerminated">
+    </signal>
+    <signal name="error">
+      <arg name="error" type="(uis)" direction="out"/>
+    </signal>
+    <signal name="authenticated">
+    </signal>
+
+  </interface>
+</node>
diff --git a/src/common/dbus/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml b/src/common/dbus/tlm-dbus-session-doc-gen-org.tizen.Tlm.Session.xml
new file mode 100644 (file)
index 0000000..d1eb63e
--- /dev/null
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+]>
+<refentry id="gdbus-org.tizen.Tlm.Session">
+  <refmeta>    <refentrytitle role="top_of_page" id="gdbus-interface-org-tizen-Tlm-Session.top_of_page">org.tizen.Tlm.Session</refentrytitle>
+  <indexterm zone="gdbus-interface-org-tizen-Tlm-Session.top_of_page"><primary sortas="Session">org.tizen.Tlm.Session</primary></indexterm>
+  </refmeta>  <refnamediv>    <refname>org.tizen.Tlm.Session</refname>    <refpurpose></refpurpose>  </refnamediv>  <refsynopsisdiv role="synopsis">
+    <title role="synopsis.title">Methods</title>
+    <synopsis>
+<link linkend="gdbus-method-org-tizen-Tlm-Session.sessionCreate">sessionCreate</link>    (IN  s     password,
+                  IN  a{ss} environment);
+<link linkend="gdbus-method-org-tizen-Tlm-Session.sessionTerminate">sessionTerminate</link> ();
+</synopsis>
+  </refsynopsisdiv>
+  <refsect1 role="signal_proto">
+    <title role="signal_proto.title">Signals</title>
+    <synopsis>
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.sessionCreated">sessionCreated</link>    (s     sessionid);
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated">sessionTerminated</link> ();
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.error">error</link>             ((uis) error);
+<link linkend="gdbus-signal-org-tizen-Tlm-Session.authenticated">authenticated</link>     ();
+</synopsis>
+  </refsect1>
+  <refsect1 role="properties">
+    <title role="properties.title">Properties</title>
+    <synopsis>
+<link linkend="gdbus-property-org-tizen-Tlm-Session.seatid">seatid</link>     readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.username">username</link>   readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.service">service</link>    readwrite  s
+<link linkend="gdbus-property-org-tizen-Tlm-Session.sessionid">sessionid</link>  readable   s
+</synopsis>
+  </refsect1>
+<refsect1 role="desc" id="gdbus-interface-org-tizen-Tlm-Session">
+  <title role="desc.title">Description</title>
+  <para></para>
+</refsect1>
+<refsect1 role="details" id="gdbus-methods-org.tizen.Tlm.Session">
+  <title role="details.title">Method Details</title>
+<refsect2 role="method" id="gdbus-method-org-tizen-Tlm-Session.sessionCreate">
+  <title>The sessionCreate() method</title>
+  <indexterm zone="gdbus-method-org-tizen-Tlm-Session.sessionCreate"><primary sortas="Session.sessionCreate">org.tizen.Tlm.Session.sessionCreate()</primary></indexterm>
+<programlisting>
+sessionCreate (IN  s     password,
+               IN  a{ss} environment);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>IN s <parameter>password</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+<varlistentry>
+  <term><literal>IN a{ss} <parameter>environment</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="method" id="gdbus-method-org-tizen-Tlm-Session.sessionTerminate">
+  <title>The sessionTerminate() method</title>
+  <indexterm zone="gdbus-method-org-tizen-Tlm-Session.sessionTerminate"><primary sortas="Session.sessionTerminate">org.tizen.Tlm.Session.sessionTerminate()</primary></indexterm>
+<programlisting>
+sessionTerminate ();
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+<refsect1 role="details" id="gdbus-signals-org.tizen.Tlm.Session">
+  <title role="details.title">Signal Details</title>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.sessionCreated">
+  <title>The "sessionCreated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.sessionCreated"><primary sortas="Session::sessionCreated">org.tizen.Tlm.Session::sessionCreated</primary></indexterm>
+<programlisting>
+sessionCreated (s sessionid);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>s <parameter>sessionid</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated">
+  <title>The "sessionTerminated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.sessionTerminated"><primary sortas="Session::sessionTerminated">org.tizen.Tlm.Session::sessionTerminated</primary></indexterm>
+<programlisting>
+sessionTerminated ();
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.error">
+  <title>The "error" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.error"><primary sortas="Session::error">org.tizen.Tlm.Session::error</primary></indexterm>
+<programlisting>
+error ((uis) error);
+</programlisting>
+<para></para>
+<variablelist role="params">
+<varlistentry>
+  <term><literal>(uis) <parameter>error</parameter></literal>:</term>
+  <listitem><para></para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+<refsect2 role="signal" id="gdbus-signal-org-tizen-Tlm-Session.authenticated">
+  <title>The "authenticated" signal</title>
+  <indexterm zone="gdbus-signal-org-tizen-Tlm-Session.authenticated"><primary sortas="Session::authenticated">org.tizen.Tlm.Session::authenticated</primary></indexterm>
+<programlisting>
+authenticated ();
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+<refsect1 role="details" id="gdbus-properties-org.tizen.Tlm.Session">
+  <title role="details.title">Property Details</title>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.seatid">
+  <title>The "seatid" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.seatid"><primary sortas="Session:seatid">org.tizen.Tlm.Session:seatid</primary></indexterm>
+<programlisting>
+seatid  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.username">
+  <title>The "username" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.username"><primary sortas="Session:username">org.tizen.Tlm.Session:username</primary></indexterm>
+<programlisting>
+username  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.service">
+  <title>The "service" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.service"><primary sortas="Session:service">org.tizen.Tlm.Session:service</primary></indexterm>
+<programlisting>
+service  readwrite  s
+</programlisting>
+<para></para>
+</refsect2>
+<refsect2 role="property" id="gdbus-property-org-tizen-Tlm-Session.sessionid">
+  <title>The "sessionid" property</title>
+  <indexterm zone="gdbus-property-org-tizen-Tlm-Session.sessionid"><primary sortas="Session:sessionid">org.tizen.Tlm.Session:sessionid</primary></indexterm>
+<programlisting>
+sessionid  readable   s
+</programlisting>
+<para></para>
+</refsect2>
+</refsect1>
+</refentry>
+
similarity index 93%
rename from src/daemon/dbus/tlm-dbus-utils.c
rename to src/common/dbus/tlm-dbus-utils.c
index 32747a5..a59e2b2 100644 (file)
@@ -39,15 +39,14 @@ tlm_dbus_utils_create_request (
     if (!request) return NULL;
 
     request->type = type;
-    request->dbus_adapter = g_object_ref (object);
-    request->invocation = g_object_ref (invocation);
+    if (invocation) request->invocation = g_object_ref (invocation);
+    if (object) request->dbus_adapter = g_object_ref (object);
     if (seat_id) request->seat_id = g_strdup (seat_id);
     if (username) request->username = g_strdup (username);
     if (password) request->password = g_strdup (password);
-    if (environment) {
-        request->environment =
-                tlm_dbus_utils_hash_table_from_variant (environment);
-    }
+    if (environment)
+        request->environment = tlm_dbus_utils_hash_table_from_variant (
+                environment);
     return request;
 }
 
index 2dfae46..e78a3ed 100644 (file)
@@ -34,6 +34,7 @@
 #define TLM_SERVICE_PREFIX       "org.tizen.Tlm"
 #define TLM_SERVICE              TLM_SERVICE_PREFIX
 #define TLM_LOGIN_OBJECTPATH     "/org/tizen/Tlm/Login"
+#define TLM_SESSION_OBJECTPATH   "/org/tizen/Tlm/Session"
 
 #define TLM_DBUS_FREEDESKTOP_SERVICE    "org.freedesktop.DBus"
 #define TLM_DBUS_FREEDESKTOP_PATH       "/org/freedesktop/DBus"
index 93ad282..4f790b5 100644 (file)
@@ -62,7 +62,9 @@
  * @TLM_ERROR_SESSION_CREATION_FAILURE: Session creation failed
  * @TLM_ERROR_SESSION_ALREADY_EXISTS: Session already exists
  * @TLM_ERROR_SESSION_NOT_VALID: session is not valid anymore
+ * @TLM_ERROR_SESSION_TERMINATION_FAILURE: Session termination failed
  * @TLM_ERROR_DBUS_SERVER_START_FAILURE: dbus-server startup failed
+ * @TLM_ERROR_PAM_AUTH_FAILURE: PAM authentication failed
  * @TLM_ERROR_DBUS_REQ_ABORTED: Dbus request aborted
  * @TLM_ERROR_DBUS_REQ_NOT_SUPPORTED: Dbus request not supported
  * @TLM_ERROR_DBUS_REQ_UNKNOWN: Dbus request failed with unknown error
@@ -99,10 +101,14 @@ GDBusErrorEntry _tlm_errors[] =
     {TLM_ERROR_SEAT_NOT_FOUND, _ERROR_PREFIX".SeatNotFound"},
     {TLM_ERROR_SESSION_CREATION_FAILURE,
             _ERROR_PREFIX".SessionCreationFailure"},
+            {TLM_ERROR_SESSION_TERMINATION_FAILURE,
+                    _ERROR_PREFIX".SessionTerminationFailure"},
     {TLM_ERROR_SESSION_ALREADY_EXISTS, _ERROR_PREFIX".SessionAlreadyExists"},
     {TLM_ERROR_SESSION_NOT_VALID, _ERROR_PREFIX".SessionNotValid"},
     {TLM_ERROR_DBUS_SERVER_START_FAILURE,
             _ERROR_PREFIX".DBusServerStartFailure"},
+    {TLM_ERROR_PAM_AUTH_FAILURE,
+            _ERROR_PREFIX".PamAuthFailure"},
     {TLM_ERROR_DBUS_REQ_ABORTED, _ERROR_PREFIX".DBusRequestAborted"},
     {TLM_ERROR_DBUS_REQ_NOT_SUPPORTED, _ERROR_PREFIX".DBusRequestNotSupported"},
     {TLM_ERROR_DBUS_REQ_UNKNOWN, _ERROR_PREFIX".DBusRequestUknown"},
@@ -127,3 +133,49 @@ tlm_error_quark (void)
 
     return (GQuark) quark_volatile;
 }
+
+/**
+ * tlm_error_new_from_variant:
+ * @var: (transfer none): instance of #GVariant
+ *
+ * Converts the GVariant to GError.
+ *
+ * Returns: (transfer full): #GError object if successful, NULL otherwise.
+ */
+GError *
+tlm_error_new_from_variant (
+        GVariant *var)
+{
+    GError *error = NULL;
+    gchar *message;
+    GQuark domain;
+    gint code;
+
+    if (!var) {
+        return NULL;
+    }
+
+    g_variant_get (var, "(uis)", &domain, &code, &message);
+    error = g_error_new_literal (domain, code, message);
+    g_free (message);
+    return error;
+}
+
+/**
+ * tlm_error_to_variant:
+ * @error: (transfer none): instance of #GError
+ *
+ * Converts the GError to GVariant.
+ *
+ * Returns: (transfer full) #GVariant object if successful, NULL otherwise.
+ */
+GVariant *
+tlm_error_to_variant (
+        GError *error)
+{
+    if (!error) {
+        return NULL;
+    }
+
+    return g_variant_new ("(uis)", error->domain, error->code, error->message);
+}
index 0c63a10..0e67720 100644 (file)
@@ -45,9 +45,11 @@ typedef enum {
     TLM_ERROR_SESSION_CREATION_FAILURE,
     TLM_ERROR_SESSION_ALREADY_EXISTS,
     TLM_ERROR_SESSION_NOT_VALID,
+    TLM_ERROR_SESSION_TERMINATION_FAILURE,
     TLM_ERROR_DBUS_SERVER_START_FAILURE,
+    TLM_ERROR_PAM_AUTH_FAILURE,
 
-    TLM_ERROR_DBUS_REQ_ABORTED = 40,
+    TLM_ERROR_DBUS_REQ_ABORTED = 50,
     TLM_ERROR_DBUS_REQ_NOT_SUPPORTED,
     TLM_ERROR_DBUS_REQ_UNKNOWN,
 
@@ -61,6 +63,15 @@ typedef enum {
 GQuark
 tlm_error_quark (void);
 
+GError *
+tlm_error_new_from_variant (
+        GVariant *var);
+
+GVariant *
+tlm_error_to_variant (
+        GError *error);
+
+
 G_END_DECLS
 
 #endif /* __TLM_ERROR_H__ */
diff --git a/src/common/tlm-pipe-stream.c b/src/common/tlm-pipe-stream.c
new file mode 100644 (file)
index 0000000..bed8a7e
--- /dev/null
@@ -0,0 +1,125 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@linux.intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include <gio/gunixinputstream.h>
+#include <gio/gunixoutputstream.h>
+
+#include "tlm-pipe-stream.h"
+#include "tlm-log.h"
+
+#define TLM_PIPE_STREAM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj),\
+    TLM_TYPE_PIPE_STREAM, TlmPipeStreamPrivate))
+
+struct _TlmPipeStreamPrivate
+{
+    GInputStream  *input_stream;
+    GOutputStream *output_stream;
+};
+
+G_DEFINE_TYPE (TlmPipeStream, tlm_pipe_stream, G_TYPE_IO_STREAM);
+
+static GInputStream *
+_tlm_pipe_stream_get_input_stream (GIOStream *io_stream)
+{
+    return TLM_PIPE_STREAM (io_stream)->priv->input_stream;
+}
+
+static GOutputStream *
+_tlm_pipe_stream_get_output_stream (GIOStream *io_stream)
+{
+    return TLM_PIPE_STREAM (io_stream)->priv->output_stream;
+}
+
+static void
+_tlm_pipe_stream_dispose (GObject *gobject)
+{
+    g_return_if_fail (TLM_IS_PIPE_STREAM (gobject));
+
+    DBG ("%p", gobject);
+    /* Chain up to the parent class */
+    G_OBJECT_CLASS (tlm_pipe_stream_parent_class)->dispose (gobject);
+
+}
+
+static void
+_tlm_pipe_stream_finalize (GObject *gobject)
+{
+    TlmPipeStream *stream = TLM_PIPE_STREAM (gobject);
+
+    /* g_io_stream needs streams to be valid in its dispose still
+     */
+    if (stream->priv->input_stream) {
+        g_clear_object (&stream->priv->input_stream);
+    }
+
+    if (stream->priv->output_stream) {
+        g_clear_object (&stream->priv->output_stream);
+    }
+
+    G_OBJECT_CLASS (tlm_pipe_stream_parent_class)->finalize (gobject);
+}
+
+static void
+tlm_pipe_stream_class_init (TlmPipeStreamClass *klass)
+{
+    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+    GIOStreamClass *stream_class = G_IO_STREAM_CLASS (klass);
+
+    gobject_class->finalize = _tlm_pipe_stream_finalize;
+    gobject_class->dispose = _tlm_pipe_stream_dispose;
+
+    /* virtual methods */
+    stream_class->get_input_stream = _tlm_pipe_stream_get_input_stream;
+    stream_class->get_output_stream = _tlm_pipe_stream_get_output_stream;
+
+    g_type_class_add_private (klass, sizeof (TlmPipeStreamPrivate));
+}
+
+static void
+tlm_pipe_stream_init (TlmPipeStream *self)
+{
+    self->priv = TLM_PIPE_STREAM_GET_PRIVATE (self);
+    self->priv->input_stream = NULL;
+    self->priv->output_stream = NULL;
+}
+
+TlmPipeStream *
+tlm_pipe_stream_new (
+        gint in_fd,
+        gint out_fd,
+        gboolean close_fds)
+{
+    TlmPipeStream *stream = TLM_PIPE_STREAM (g_object_new (
+            TLM_TYPE_PIPE_STREAM, NULL));
+    if (stream) {
+        stream->priv->input_stream = G_INPUT_STREAM (
+                g_unix_input_stream_new (in_fd, close_fds));
+        stream->priv->output_stream = G_OUTPUT_STREAM (
+                g_unix_output_stream_new (out_fd, close_fds));
+    }
+    DBG ("%p", stream);
+    return stream;
+}
+
+
diff --git a/src/common/tlm-pipe-stream.h b/src/common/tlm-pipe-stream.h
new file mode 100644 (file)
index 0000000..2254ec6
--- /dev/null
@@ -0,0 +1,79 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef __TLM_PIPE_STREAM_H__
+#define __TLM_PIPE_STREAM_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+/*
+ * Type macros.
+ */
+#define TLM_TYPE_PIPE_STREAM   (tlm_pipe_stream_get_type ())
+#define TLM_PIPE_STREAM(obj)   (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+                                           TLM_TYPE_PIPE_STREAM, \
+                                           TlmPipeStream))
+#define TLM_IS_PIPE_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+                                           TLM_TYPE_PIPE_STREAM))
+#define TLM_PIPE_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
+                                             TLM_TYPE_PIPE_STREAM, \
+                                             TlmPipeStreamClass))
+#define TLM_IS_PIPE_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),\
+                                             TLM_TYPE_PIPE_STREAM))
+#define TLM_PIPE_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+                                             TLM_TYPE_PIPE_STREAM, \
+                                             TlmPipeStreamClass))
+
+typedef struct _TlmPipeStreamPrivate TlmPipeStreamPrivate;
+
+typedef struct {
+    GIOStream parent_instance;
+
+    /*< private >*/
+    TlmPipeStreamPrivate *priv;
+} TlmPipeStream;
+
+typedef struct {
+    GIOStreamClass parent_class;
+
+} TlmPipeStreamClass;
+
+/* used by TLM_TYPE_PIPE_STREAM */
+GType
+tlm_pipe_stream_get_type (void);
+
+TlmPipeStream *
+tlm_pipe_stream_new (
+        gint in_fd,
+        gint out_fd,
+        gboolean close_fds);
+
+G_END_DECLS
+
+#endif /* __TLM_PIPE_STREAM_H__ */
diff --git a/src/common/tlm-utils.c b/src/common/tlm-utils.c
new file mode 100644 (file)
index 0000000..cfe8ac8
--- /dev/null
@@ -0,0 +1,311 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm (Tizen Login Manager)
+ *
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * Contact: Amarnath Valluri <amarnath.valluri@linux.intel.com>
+ *          Jussi Laako <jussi.laako@linux.intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <sys/stat.h>
+#include <glib/gstdio.h>
+#include <utmp.h>
+#include <paths.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "tlm-utils.h"
+#include "tlm-log.h"
+
+#define HOST_NAME_SIZE 256
+
+void
+g_clear_string (gchar **str)
+{
+    if (str && *str) {
+        g_free (*str);
+        *str = NULL;
+    }
+}
+
+const gchar *
+tlm_user_get_name (uid_t user_id)
+{
+    struct passwd *pwent;
+
+    pwent = getpwuid (user_id);
+    if (!pwent)
+        return NULL;
+
+    return pwent->pw_name;
+}
+
+uid_t
+tlm_user_get_uid (const gchar *username)
+{
+    struct passwd *pwent;
+
+    pwent = getpwnam (username);
+    if (!pwent)
+        return -1;
+
+    return pwent->pw_uid;
+}
+
+gid_t
+tlm_user_get_gid (const gchar *username)
+{
+    struct passwd *pwent;
+
+    pwent = getpwnam (username);
+    if (!pwent)
+        return -1;
+
+    return pwent->pw_gid;
+}
+
+const gchar *
+tlm_user_get_home_dir (const gchar *username)
+{
+    struct passwd *pwent;
+
+    pwent = getpwnam (username);
+    if (!pwent)
+        return NULL;
+
+    return pwent->pw_dir;
+}
+
+const gchar *
+tlm_user_get_shell (const gchar *username)
+{
+    struct passwd *pwent;
+
+    pwent = getpwnam (username);
+    if (!pwent)
+        return NULL;
+
+    return pwent->pw_shell;
+}
+
+gboolean
+tlm_utils_delete_dir (
+        const gchar *dir)
+{
+    GDir* gdir = NULL;
+    struct stat sent;
+
+    if (!dir || !(gdir = g_dir_open(dir, 0, NULL))) {
+        return FALSE;
+    }
+
+    const gchar *fname = NULL;
+    gint retval = 0;
+    gchar *filepath = NULL;
+    while ((fname = g_dir_read_name (gdir)) != NULL) {
+        if (g_strcmp0 (fname, ".") == 0 ||
+            g_strcmp0 (fname, "..") == 0) {
+            continue;
+        }
+        retval = -1;
+        filepath = g_build_filename (dir, fname, NULL);
+        if (filepath) {
+            retval = lstat(filepath, &sent);
+            if (retval == 0) {
+                /* recurse the directory */
+                if (S_ISDIR (sent.st_mode)) {
+                    retval = (gint)!tlm_utils_delete_dir (filepath);
+                } else {
+                    retval = g_remove (filepath);
+                }
+            }
+            g_free (filepath);
+        }
+        if (retval != 0) {
+            g_dir_close (gdir);
+            return FALSE;
+        }
+    }
+    g_dir_close (gdir);
+
+    if (g_remove (dir) != 0) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+static gchar *
+_get_tty_id (
+        const gchar *tty_name)
+{
+    gchar *id = NULL;
+    const gchar *tmp = tty_name;
+
+    while (tmp) {
+        if (isdigit (*tmp)) {
+            id = g_strdup (tmp);
+            break;
+        }
+        tmp++;
+    }
+    return id;
+}
+
+static gchar *
+_get_host_address (
+        const gchar *hostname)
+{
+    gchar *hostaddress = NULL;
+    struct addrinfo hints, *info = NULL;
+
+    if (!hostname) return NULL;
+
+    memset (&hints, 0, sizeof (hints));
+    hints.ai_flags = AI_ADDRCONFIG;
+
+    if (getaddrinfo (hostname, NULL, &hints, &info) == 0) {
+        if (info) {
+            if (info->ai_family == AF_INET) {
+                struct sockaddr_in *sa = (struct sockaddr_in *) info->ai_addr;
+                hostaddress = g_malloc0 (sizeof(struct in_addr));
+                memcpy (hostaddress, &(sa->sin_addr), sizeof (struct in_addr));
+            } else if (info->ai_family == AF_INET6) {
+                struct sockaddr_in6 *sa = (struct sockaddr_in6 *) info->ai_addr;
+                hostaddress = g_malloc0 (sizeof(struct in6_addr));
+                memcpy (hostaddress, &(sa->sin6_addr),
+                        sizeof (struct in6_addr));
+            }
+            freeaddrinfo (info);
+        }
+    }
+    return hostaddress;
+}
+
+static gboolean
+_is_tty_same (
+        const gchar *tty1_name,
+        const gchar *tty2_name)
+{
+    gchar *tty1 = NULL, *tty2 = NULL;
+    gboolean res = FALSE;
+
+    if (tty1_name == tty2_name) return TRUE;
+    if (!tty1_name || !tty2_name) return FALSE;
+
+    if (*tty1_name == '/') tty1 = g_strdup (tty1_name);
+    else tty1 = g_strdup_printf ("/dev/%s", tty1_name);
+    if (*tty2_name == '/') tty2 = g_strdup (tty2_name);
+    else tty2 = g_strdup_printf ("/dev/%s", tty2_name);
+
+    res = (g_strcmp0 (tty1_name, tty2_name) == 0);
+
+    g_free (tty1);
+    g_free (tty2);
+    return res;
+}
+
+static gchar *
+_get_host_name ()
+{
+    gchar *name = g_malloc0 (HOST_NAME_SIZE);
+    if (gethostname (name, HOST_NAME_SIZE) != 0) {
+        g_free (name);
+        return NULL;
+    }
+    return name;
+}
+
+void
+tlm_utils_log_utmp_entry (const gchar *username)
+{
+    struct timeval tv;
+    pid_t pid;
+    struct utmp ut_ent;
+    struct utmp *ut_tmp = NULL;
+    gchar *hostname = NULL, *hostaddress = NULL;
+    const gchar *tty_name = NULL;
+    gchar *tty_no_dev_name = NULL, *tty_id = NULL;
+
+    DBG ("Log session entry to utmp/wtmp");
+
+    hostname = _get_host_name ();
+    hostaddress = _get_host_address (hostname);
+    tty_name = ttyname (0);
+    if (tty_name) {
+        tty_no_dev_name = g_strdup (strncmp(tty_name, "/dev/", 5) == 0 ?
+            tty_name + 5 : tty_name);
+    }
+    tty_id = _get_tty_id (tty_no_dev_name);
+    pid = getpid ();
+    utmpname (_PATH_UTMP);
+
+    setutent ();
+    while ((ut_tmp = getutent())) {
+        if ( (ut_tmp->ut_pid == pid) &&
+             (ut_tmp->ut_id[0] != '\0') &&
+             (ut_tmp->ut_type == LOGIN_PROCESS ||
+                     ut_tmp->ut_type == USER_PROCESS) &&
+             (_is_tty_same (ut_tmp->ut_line, tty_name))) {
+            break;
+        }
+    }
+
+    if (ut_tmp) memcpy (&ut_ent, ut_tmp, sizeof (ut_ent));
+    else        memset (&ut_ent, 0, sizeof (ut_ent));
+
+    ut_ent.ut_type = USER_PROCESS;
+    ut_ent.ut_pid = pid;
+    if (tty_id)
+        strncpy (ut_ent.ut_id, tty_id, sizeof (ut_ent.ut_id));
+    if (username)
+        strncpy (ut_ent.ut_user, username, sizeof (ut_ent.ut_user));
+    if (tty_no_dev_name)
+        strncpy (ut_ent.ut_line, tty_no_dev_name, sizeof (ut_ent.ut_line));
+    if (hostname)
+        strncpy (ut_ent.ut_host, hostname, sizeof (ut_ent.ut_host));
+    if (hostaddress)
+        memcpy (&ut_ent.ut_addr_v6, hostaddress, sizeof (ut_ent.ut_addr_v6));
+
+    ut_ent.ut_session = getsid (0);
+    gettimeofday (&tv, NULL);
+#ifdef _HAVE_UT_TV
+    ut_ent.ut_tv.tv_sec = tv.tv_sec;
+    ut_ent.ut_tv.tv_usec = tv.tv_usec;
+#else
+    ut_ent.ut_time = tv.tv_sec;
+#endif
+
+    pututline (&ut_ent);
+    endutent ();
+
+    updwtmp (_PATH_WTMP, &ut_ent);
+
+    g_free (hostaddress);
+    g_free (hostname);
+    g_free (tty_no_dev_name);
+    g_free (tty_id);
+}
similarity index 96%
rename from src/daemon/tlm-utils.h
rename to src/common/tlm-utils.h
index acbc151..7f64ba5 100644 (file)
@@ -53,6 +53,9 @@ tlm_user_get_shell (const gchar *username);
 gboolean
 tlm_utils_delete_dir (const gchar *dir);
 
+void
+tlm_utils_log_utmp_entry (const gchar *username);
+
 G_END_DECLS
 
 #endif /* _TLM_UTILS_H */
index 36a885f..3ebbc30 100644 (file)
@@ -6,12 +6,8 @@ BUILT_SOURCES =
 
 tlm_SOURCES = \
        tlm-types.h \
-       tlm-utils.h \
-       tlm-utils.c \
-       tlm-auth-session.h \
-       tlm-auth-session.c \
-       tlm-session.h \
-       tlm-session.c \
+       tlm-session-remote.h \
+       tlm-session-remote.c \
        tlm-seat.h \
        tlm-seat.c \
        tlm-dbus-observer.h \
@@ -23,9 +19,11 @@ tlm_SOURCES = \
 
 tlm_CFLAGS = \
        -I$(abs_top_builddir) \
+       -I$(abs_top_builddir)/src \
        -I$(abs_top_srcdir)/src \
        -I$(abs_top_srcdir)/src/common \
        -DG_LOG_DOMAIN=\"TLM\" \
+       -DTLM_BIN_DIR='"$(bindir)"' \
        -DTLM_PLUGINS_DIR='"$(pluginsdir)"' \
        $(TLM_CFLAGS) \
        $(NULL)
@@ -33,9 +31,8 @@ tlm_CFLAGS = \
 
 tlm_LDADD = \
        $(TLM_LIBS) \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
-    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
-       -lpam \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
+  $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
        $(NULL)
 
 EXTRA_DIST = \
index a0b6da4..c4ede12 100644 (file)
@@ -97,14 +97,13 @@ CONFIG_CLEAN_FILES = tlm.pc
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_tlm_OBJECTS = tlm-tlm-utils.$(OBJEXT) \
-       tlm-tlm-auth-session.$(OBJEXT) tlm-tlm-session.$(OBJEXT) \
+am_tlm_OBJECTS = tlm-tlm-session-remote.$(OBJEXT) \
        tlm-tlm-seat.$(OBJEXT) tlm-tlm-dbus-observer.$(OBJEXT) \
        tlm-tlm-manager.$(OBJEXT) tlm-tlm-main.$(OBJEXT)
 tlm_OBJECTS = $(am_tlm_OBJECTS)
 am__DEPENDENCIES_1 =
 tlm_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -391,12 +390,8 @@ SUBDIRS = dbus
 BUILT_SOURCES = 
 tlm_SOURCES = \
        tlm-types.h \
-       tlm-utils.h \
-       tlm-utils.c \
-       tlm-auth-session.h \
-       tlm-auth-session.c \
-       tlm-session.h \
-       tlm-session.c \
+       tlm-session-remote.h \
+       tlm-session-remote.c \
        tlm-seat.h \
        tlm-seat.c \
        tlm-dbus-observer.h \
@@ -408,18 +403,19 @@ tlm_SOURCES = \
 
 tlm_CFLAGS = \
        -I$(abs_top_builddir) \
+       -I$(abs_top_builddir)/src \
        -I$(abs_top_srcdir)/src \
        -I$(abs_top_srcdir)/src/common \
        -DG_LOG_DOMAIN=\"TLM\" \
+       -DTLM_BIN_DIR='"$(bindir)"' \
        -DTLM_PLUGINS_DIR='"$(pluginsdir)"' \
        $(TLM_CFLAGS) \
        $(NULL)
 
 tlm_LDADD = \
        $(TLM_LIBS) \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
-    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
-       -lpam \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
+  $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
        $(NULL)
 
 EXTRA_DIST = \
@@ -526,13 +522,11 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-auth-session.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-dbus-observer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-manager.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-seat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-session.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm-tlm-session-remote.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -558,47 +552,19 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-tlm-tlm-utils.o: tlm-utils.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-utils.o -MD -MP -MF $(DEPDIR)/tlm-tlm-utils.Tpo -c -o tlm-tlm-utils.o `test -f 'tlm-utils.c' || echo '$(srcdir)/'`tlm-utils.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-utils.Tpo $(DEPDIR)/tlm-tlm-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-utils.c' object='tlm-tlm-utils.o' libtool=no @AMDEPBACKSLASH@
+tlm-tlm-session-remote.o: tlm-session-remote.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-session-remote.o -MD -MP -MF $(DEPDIR)/tlm-tlm-session-remote.Tpo -c -o tlm-tlm-session-remote.o `test -f 'tlm-session-remote.c' || echo '$(srcdir)/'`tlm-session-remote.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-session-remote.Tpo $(DEPDIR)/tlm-tlm-session-remote.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session-remote.c' object='tlm-tlm-session-remote.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-utils.o `test -f 'tlm-utils.c' || echo '$(srcdir)/'`tlm-utils.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-session-remote.o `test -f 'tlm-session-remote.c' || echo '$(srcdir)/'`tlm-session-remote.c
 
-tlm-tlm-utils.obj: tlm-utils.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-utils.obj -MD -MP -MF $(DEPDIR)/tlm-tlm-utils.Tpo -c -o tlm-tlm-utils.obj `if test -f 'tlm-utils.c'; then $(CYGPATH_W) 'tlm-utils.c'; else $(CYGPATH_W) '$(srcdir)/tlm-utils.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-utils.Tpo $(DEPDIR)/tlm-tlm-utils.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-utils.c' object='tlm-tlm-utils.obj' libtool=no @AMDEPBACKSLASH@
+tlm-tlm-session-remote.obj: tlm-session-remote.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-session-remote.obj -MD -MP -MF $(DEPDIR)/tlm-tlm-session-remote.Tpo -c -o tlm-tlm-session-remote.obj `if test -f 'tlm-session-remote.c'; then $(CYGPATH_W) 'tlm-session-remote.c'; else $(CYGPATH_W) '$(srcdir)/tlm-session-remote.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-session-remote.Tpo $(DEPDIR)/tlm-tlm-session-remote.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session-remote.c' object='tlm-tlm-session-remote.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-utils.obj `if test -f 'tlm-utils.c'; then $(CYGPATH_W) 'tlm-utils.c'; else $(CYGPATH_W) '$(srcdir)/tlm-utils.c'; fi`
-
-tlm-tlm-auth-session.o: tlm-auth-session.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-auth-session.o -MD -MP -MF $(DEPDIR)/tlm-tlm-auth-session.Tpo -c -o tlm-tlm-auth-session.o `test -f 'tlm-auth-session.c' || echo '$(srcdir)/'`tlm-auth-session.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-auth-session.Tpo $(DEPDIR)/tlm-tlm-auth-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-auth-session.c' object='tlm-tlm-auth-session.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-auth-session.o `test -f 'tlm-auth-session.c' || echo '$(srcdir)/'`tlm-auth-session.c
-
-tlm-tlm-auth-session.obj: tlm-auth-session.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-auth-session.obj -MD -MP -MF $(DEPDIR)/tlm-tlm-auth-session.Tpo -c -o tlm-tlm-auth-session.obj `if test -f 'tlm-auth-session.c'; then $(CYGPATH_W) 'tlm-auth-session.c'; else $(CYGPATH_W) '$(srcdir)/tlm-auth-session.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-auth-session.Tpo $(DEPDIR)/tlm-tlm-auth-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-auth-session.c' object='tlm-tlm-auth-session.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-auth-session.obj `if test -f 'tlm-auth-session.c'; then $(CYGPATH_W) 'tlm-auth-session.c'; else $(CYGPATH_W) '$(srcdir)/tlm-auth-session.c'; fi`
-
-tlm-tlm-session.o: tlm-session.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-session.o -MD -MP -MF $(DEPDIR)/tlm-tlm-session.Tpo -c -o tlm-tlm-session.o `test -f 'tlm-session.c' || echo '$(srcdir)/'`tlm-session.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-session.Tpo $(DEPDIR)/tlm-tlm-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session.c' object='tlm-tlm-session.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-session.o `test -f 'tlm-session.c' || echo '$(srcdir)/'`tlm-session.c
-
-tlm-tlm-session.obj: tlm-session.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-session.obj -MD -MP -MF $(DEPDIR)/tlm-tlm-session.Tpo -c -o tlm-tlm-session.obj `if test -f 'tlm-session.c'; then $(CYGPATH_W) 'tlm-session.c'; else $(CYGPATH_W) '$(srcdir)/tlm-session.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm-tlm-session.Tpo $(DEPDIR)/tlm-tlm-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session.c' object='tlm-tlm-session.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-session.obj `if test -f 'tlm-session.c'; then $(CYGPATH_W) 'tlm-session.c'; else $(CYGPATH_W) '$(srcdir)/tlm-session.c'; fi`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -c -o tlm-tlm-session-remote.obj `if test -f 'tlm-session-remote.c'; then $(CYGPATH_W) 'tlm-session-remote.c'; else $(CYGPATH_W) '$(srcdir)/tlm-session-remote.c'; fi`
 
 tlm-tlm-seat.o: tlm-seat.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_CFLAGS) $(CFLAGS) -MT tlm-tlm-seat.o -MD -MP -MF $(DEPDIR)/tlm-tlm-seat.Tpo -c -o tlm-tlm-seat.o `test -f 'tlm-seat.c' || echo '$(srcdir)/'`tlm-seat.c
index fc43e4d..3bb16c8 100644 (file)
@@ -4,6 +4,7 @@ noinst_LTLIBRARIES = libtlm-dbus.la
 
 libtlm_dbus_la_CPPFLAGS = \
     -I$(top_srcdir)/src \
+    -I$(top_builddir)/src \
     $(TLM_CFLAGS) \
     -DG_LOG_DOMAIN=\"TLM\" \
     $(NULL)
@@ -20,8 +21,6 @@ libtlm_dbus_la_SOURCES = \
    tlm-dbus-server-p2p.h \
    tlm-dbus-login-adapter.c \
    tlm-dbus-login-adapter.h \
-   tlm-dbus-utils.c \
-   tlm-dbus-utils.h \
    $(NULL)
 
 clean-local :
index 80011d8..87e6f98 100644 (file)
@@ -101,8 +101,7 @@ am__objects_1 =
 am_libtlm_dbus_la_OBJECTS =  \
        libtlm_dbus_la-tlm-dbus-server-interface.lo \
        libtlm_dbus_la-tlm-dbus-server-p2p.lo \
-       libtlm_dbus_la-tlm-dbus-login-adapter.lo \
-       libtlm_dbus_la-tlm-dbus-utils.lo $(am__objects_1)
+       libtlm_dbus_la-tlm-dbus-login-adapter.lo $(am__objects_1)
 libtlm_dbus_la_OBJECTS = $(am_libtlm_dbus_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -315,6 +314,7 @@ NULL =
 noinst_LTLIBRARIES = libtlm-dbus.la
 libtlm_dbus_la_CPPFLAGS = \
     -I$(top_srcdir)/src \
+    -I$(top_builddir)/src \
     $(TLM_CFLAGS) \
     -DG_LOG_DOMAIN=\"TLM\" \
     $(NULL)
@@ -331,8 +331,6 @@ libtlm_dbus_la_SOURCES = \
    tlm-dbus-server-p2p.h \
    tlm-dbus-login-adapter.c \
    tlm-dbus-login-adapter.h \
-   tlm-dbus-utils.c \
-   tlm-dbus-utils.h \
    $(NULL)
 
 all: all-am
@@ -393,7 +391,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_la-tlm-dbus-login-adapter.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_la-tlm-dbus-server-interface.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_la-tlm-dbus-server-p2p.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_dbus_la-tlm-dbus-utils.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -440,13 +437,6 @@ libtlm_dbus_la-tlm-dbus-login-adapter.lo: tlm-dbus-login-adapter.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_dbus_la-tlm-dbus-login-adapter.lo `test -f 'tlm-dbus-login-adapter.c' || echo '$(srcdir)/'`tlm-dbus-login-adapter.c
 
-libtlm_dbus_la-tlm-dbus-utils.lo: tlm-dbus-utils.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_dbus_la-tlm-dbus-utils.lo -MD -MP -MF $(DEPDIR)/libtlm_dbus_la-tlm-dbus-utils.Tpo -c -o libtlm_dbus_la-tlm-dbus-utils.lo `test -f 'tlm-dbus-utils.c' || echo '$(srcdir)/'`tlm-dbus-utils.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_dbus_la-tlm-dbus-utils.Tpo $(DEPDIR)/libtlm_dbus_la-tlm-dbus-utils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-dbus-utils.c' object='libtlm_dbus_la-tlm-dbus-utils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_dbus_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_dbus_la-tlm-dbus-utils.lo `test -f 'tlm-dbus-utils.c' || echo '$(srcdir)/'`tlm-dbus-utils.c
-
 mostlyclean-libtool:
        -rm -f *.lo
 
index e207aec..b74e022 100644 (file)
  */
 
 #include "config.h"
+
 #include "common/tlm-log.h"
 #include "common/tlm-error.h"
 #include "common/dbus/tlm-dbus.h"
 
 #include "tlm-dbus-login-adapter.h"
-#include "tlm-dbus-utils.h"
 
 enum
 {
@@ -102,7 +102,7 @@ _set_property (
 
     switch (property_id) {
         case PROP_CONNECTION:
-            self->priv->connection = g_value_get_object(value);
+            self->priv->connection = g_value_dup_object (value);
             break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -133,7 +133,7 @@ _dispose (
 {
     TlmDbusLoginAdapter *self = TLM_DBUS_LOGIN_ADAPTER (object);
 
-    DBG("- unregistering dbus login adaptor.");
+    DBG("- unregistering dbus login adaptor %p.", self);
 
     if (self->priv->dbus_obj) {
         g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (
@@ -142,6 +142,20 @@ _dispose (
         self->priv->dbus_obj = NULL;
     }
 
+    if (self->priv->connection) {
+        /* NOTE: There seems to be some bug in glib's dbus connection's
+         * worker thread such that it does not closes the stream. The problem
+         * is hard to be tracked exactly as it is more of timing issue.
+         * Following code snippet at least closes the stream to avoid any
+         * descriptors leak.
+         * */
+        GIOStream *stream = g_dbus_connection_get_stream (
+                self->priv->connection);
+        if (stream) g_io_stream_close (stream, NULL, NULL);
+        g_object_unref (self->priv->connection);
+        self->priv->connection = NULL;
+    }
+
     G_OBJECT_CLASS (tlm_dbus_login_adapter_parent_class)->dispose (
             object);
 }
@@ -242,7 +256,6 @@ _handle_login_user (
 {
     GError *error = NULL;
 
-    DBG ("");
     g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self), FALSE);
 
     if (!seat_id || !username || !password) {
@@ -252,6 +265,7 @@ _handle_login_user (
         g_error_free (error);
         return TRUE;
     }
+    DBG ("seat_id %s username %s", seat_id, username);
 
     g_signal_emit (self, signals[SIG_LOGIN_USER], 0, seat_id, username,
             password, environment, invocation);
@@ -268,7 +282,6 @@ _handle_logout_user (
 {
     GError *error = NULL;
 
-    DBG ("");
     g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self),
             FALSE);
 
@@ -279,6 +292,7 @@ _handle_logout_user (
         g_error_free (error);
         return TRUE;
     }
+    DBG ("seat_id %s", seat_id);
 
     g_signal_emit (self, signals[SIG_LOGOUT_USER], 0, seat_id, invocation);
 
@@ -297,7 +311,6 @@ _handle_switch_user (
 {
     GError *error = NULL;
 
-    DBG ("");
     g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self),
             FALSE);
 
@@ -308,6 +321,7 @@ _handle_switch_user (
         g_error_free (error);
         return TRUE;
     }
+    DBG ("seat_id %s username %s", seat_id, username);
 
     g_signal_emit (self, signals[SIG_SWITCH_USER], 0, seat_id, username,
             password, environment, invocation);
index 69c7d9c..1b63375 100644 (file)
@@ -29,7 +29,7 @@
 #include <config.h>
 #include <glib.h>
 #include "common/dbus/tlm-dbus-login-gen.h"
-#include "tlm-dbus-utils.h"
+#include "common/dbus/tlm-dbus-utils.h"
 
 G_BEGIN_DECLS
 
index c64919d..5a4c08a 100644 (file)
@@ -296,8 +296,7 @@ _tlm_dbus_server_p2p_add_login_obj (
 
     DBG("export interfaces on connection %p", connection);
 
-    login_object = tlm_dbus_login_adapter_new_with_connection (
-            g_object_ref (connection));
+    login_object = tlm_dbus_login_adapter_new_with_connection (connection);
 
     _add_login_object_watchers (connection, login_object, server);
     g_signal_emit (server, signals[SIG_CLIENT_ADDED], 0, login_object);
@@ -367,6 +366,7 @@ _tlm_dbus_server_p2p_stop (
         TlmDbusServer *self)
 {
     g_return_val_if_fail (TLM_IS_DBUS_SERVER_P2P (self), FALSE);
+    DBG ("self %p", self);
 
     TlmDbusServerP2P *server = TLM_DBUS_SERVER_P2P (self);
 
@@ -380,6 +380,8 @@ _tlm_dbus_server_p2p_stop (
 
     if (server->priv->bus_server) {
         DBG("stop P2P DBus Server");
+        g_signal_handlers_disconnect_by_func (server->priv->bus_server,
+                _on_client_request, server);
         if (g_dbus_server_is_active (server->priv->bus_server))
             g_dbus_server_stop (server->priv->bus_server);
         g_object_unref (server->priv->bus_server);
@@ -431,11 +433,10 @@ tlm_dbus_server_p2p_new (
         const gchar *address,
         uid_t uid)
 {
-    DBG("create P2P DBus Server");
-
     TlmDbusServerP2P *server = TLM_DBUS_SERVER_P2P (
         g_object_new (TLM_TYPE_DBUS_SERVER_P2P, "address", address, NULL));
 
+    DBG("create P2P DBus Server: %p", server);
     if (!server) {
         return NULL;
     }
index 88ae728..49c0c9f 100644 (file)
@@ -49,6 +49,12 @@ G_DEFINE_TYPE (TlmDbusObserver, tlm_dbus_observer, G_TYPE_OBJECT);
 #define TLM_DBUS_OBSERVER_PRIV(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
             TLM_TYPE_DBUS_OBSERVER, TlmDbusObserverPrivate)
 
+typedef struct
+{
+    TlmDbusRequest *dbus_request;
+    TlmSeat *seat;
+} TlmRequest;
+
 struct _TlmDbusObserverPrivate
 {
     TlmManager *manager;
@@ -56,7 +62,7 @@ struct _TlmDbusObserverPrivate
     TlmDbusServer *dbus_server;
     GQueue *request_queue;
     guint request_id;
-    TlmDbusRequest *active_request;
+    TlmRequest *active_request;
     DbusObserverEnableFlags enable_flags;
 };
 
@@ -128,6 +134,11 @@ _disconnect_seat (
         TlmSeat *seat);
 
 static void
+_connect_seat (
+        TlmDbusObserver *self,
+        TlmSeat *seat);
+
+static void
 _process_next_request_in_idle (
         TlmDbusObserver *self);
 
@@ -138,8 +149,65 @@ _on_seat_dispose (
 {
     g_return_if_fail (self && TLM_IS_DBUS_OBSERVER(self) && dead &&
                 TLM_IS_SEAT(dead));
-    _disconnect_seat (self, TLM_SEAT(dead));
     g_object_weak_unref (dead, (GWeakNotify)_on_seat_dispose, self);
+    _disconnect_seat (self, TLM_SEAT (dead));
+    if (self->priv->active_request &&
+        G_OBJECT(self->priv->active_request->seat) == dead) {
+       self->priv->active_request->seat = NULL;
+    }
+    if (G_OBJECT(self->priv->seat) == dead)
+       self->priv->seat = NULL;
+}
+
+static void
+_on_manager_dispose (
+        TlmDbusObserver *self,
+        GObject *dead)
+{
+    g_return_if_fail (self && TLM_IS_DBUS_OBSERVER(self) && dead &&
+                TLM_IS_MANAGER(dead));
+    g_object_weak_unref (dead, (GWeakNotify)_on_manager_dispose, self);
+    self->priv->manager = NULL;
+}
+
+static TlmRequest *
+_create_request (
+        TlmDbusObserver *self,
+        TlmDbusRequest *dbus_req,
+        TlmSeat *seat)
+{
+    TlmRequest *request = g_malloc0 (sizeof (TlmRequest));
+    if (!request) return NULL;
+
+    request->dbus_request = dbus_req;
+    request->seat = seat;
+    if (request->seat) {
+       _connect_seat (self, request->seat);
+       g_object_weak_ref (G_OBJECT (request->seat),
+                       (GWeakNotify)_on_seat_dispose, self);
+    }
+    return request;
+}
+
+static void
+_dispose_request (
+        TlmDbusObserver *self,
+        TlmRequest *request)
+{
+    if (!request) return;
+
+    if (request->dbus_request) {
+        tlm_dbus_login_adapter_request_completed (request->dbus_request, NULL);
+        tlm_dbus_utils_dispose_request (request->dbus_request);
+       request->dbus_request = NULL;
+    }
+    if (request->seat) {
+       _disconnect_seat (self, request->seat);
+       g_object_weak_unref (G_OBJECT (request->seat),
+                       (GWeakNotify)_on_seat_dispose, self);
+       request->seat = NULL;
+    }
+    g_free (request);
 }
 
 static void
@@ -148,6 +216,8 @@ _disconnect_seat (
         TlmSeat *seat)
 {
     DBG ("self %p seat %p", self, seat);
+    if (!seat) return;
+
     g_signal_handlers_disconnect_by_func (G_OBJECT (seat),
             _handle_seat_session_created, self);
     g_signal_handlers_disconnect_by_func (G_OBJECT (seat),
@@ -162,6 +232,8 @@ _connect_seat (
         TlmSeat *seat)
 {
     DBG ("self %p seat %p", self, seat);
+    if (!seat) return;
+
     g_signal_connect_swapped (G_OBJECT (seat), "session-created",
             G_CALLBACK(_handle_seat_session_created), self);
     g_signal_connect_swapped (G_OBJECT (seat), "session-terminated",
@@ -184,21 +256,23 @@ _on_dbus_adapter_dispose (
     if (self->priv->request_queue)
         head = elem = g_queue_peek_head_link (self->priv->request_queue);
     while (elem) {
-        TlmDbusRequest *request = elem->data;
+        TlmRequest *request = elem->data;
+        TlmDbusRequest *dbus_req = request->dbus_request;
         next = g_list_next (elem);
-        if (request && G_OBJECT (request->dbus_adapter) == dead) {
+        if (dbus_req && G_OBJECT (dbus_req->dbus_adapter) == dead) {
             DBG ("removing the request for dead dbus adapter");
             head = g_list_delete_link (head, elem);
-            tlm_dbus_utils_dispose_request (request);
+            _dispose_request (self, request);
         }
         elem = next;
     }
 
     /* check for active request */
     if (self->priv->active_request &&
-        G_OBJECT (self->priv->active_request->dbus_adapter) == dead) {
+        G_OBJECT (self->priv->active_request->dbus_request->dbus_adapter) ==
+                       dead) {
         DBG ("removing the request for dead dbus adapter");
-        tlm_dbus_utils_dispose_request (self->priv->active_request);
+        _dispose_request (self, self->priv->active_request);
         self->priv->active_request = NULL;
         if (self->priv->request_id) {
             g_source_remove (self->priv->request_id);
@@ -213,7 +287,6 @@ _connect_dbus_adapter (
         TlmDbusObserver *self,
         TlmDbusLoginAdapter *adapter)
 {
-    DBG ("");
     if (self->priv->enable_flags & DBUS_OBSERVER_ENABLE_LOGIN_USER)
         g_signal_connect_swapped (G_OBJECT (adapter),
                 "login-user", G_CALLBACK(_handle_dbus_login_user), self);
@@ -230,8 +303,6 @@ _disconnect_dbus_adapter (
         TlmDbusObserver *self,
         TlmDbusLoginAdapter *adapter)
 {
-    DBG ("");
-
     if (self->priv->enable_flags & DBUS_OBSERVER_ENABLE_LOGIN_USER)
         g_signal_handlers_disconnect_by_func (G_OBJECT(adapter),
                 _handle_dbus_login_user, self);
@@ -249,7 +320,6 @@ _handle_dbus_client_added (
         GObject *dbus_adapter,
         GObject *dbus_server)
 {
-    DBG ("");
     g_return_if_fail (self && TLM_IS_DBUS_OBSERVER(self) && dbus_adapter &&
             TLM_IS_DBUS_LOGIN_ADAPTER(dbus_adapter));
     _connect_dbus_adapter (self, TLM_DBUS_LOGIN_ADAPTER(dbus_adapter));
@@ -263,7 +333,6 @@ _handle_dbus_client_removed (
         GObject *dbus_adapter,
         GObject *dbus_server)
 {
-    DBG ("");
     g_return_if_fail (self && TLM_IS_DBUS_OBSERVER(self) && dbus_adapter &&
             TLM_IS_DBUS_LOGIN_ADAPTER(dbus_adapter));
     _disconnect_dbus_adapter (self, TLM_DBUS_LOGIN_ADAPTER(dbus_adapter));
@@ -287,11 +356,36 @@ static void
 _abort_dbus_request (
         TlmDbusRequest *request)
 {
-    GError *error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_DBUS_REQ_ABORTED,
+       if (!request) return;
+
+       GError *error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_DBUS_REQ_ABORTED,
             "Dbus request aborted");
     _complete_dbus_request (request, error);
 }
 
+static void
+_complete_request (
+               TlmDbusObserver *self,
+        TlmRequest *request,
+        GError *error)
+{
+    _complete_dbus_request (request->dbus_request, error);
+       request->dbus_request = NULL;
+    _dispose_request (self, request);
+}
+
+static void
+_clear_request (
+        TlmRequest *request,
+        TlmDbusObserver *self)
+{
+       if (!request) return;
+
+       _abort_dbus_request (request->dbus_request);
+       request->dbus_request = NULL;
+       _dispose_request (self, request);
+}
+
 static gboolean
 _is_request_supported (
         TlmDbusObserver *self,
@@ -314,7 +408,8 @@ _process_request (
 {
     g_return_val_if_fail (self && TLM_IS_DBUS_OBSERVER(self), FALSE);
     GError *err = NULL;
-    TlmDbusRequest* req = NULL;
+    TlmRequest* req = NULL;
+    TlmDbusRequest* dbus_req = NULL;
     TlmSeat *seat = NULL;
 
     self->priv->request_id = 0;
@@ -327,18 +422,28 @@ _process_request (
             DBG ("request queue is empty");
             goto _finished;
         }
-
-        if (!_is_request_supported (self, req->type)) {
-            WARN ("Request not supported -- req-type %d flags %d", req->type,
-                    self->priv->enable_flags);
+        dbus_req = req->dbus_request;
+        if (!_is_request_supported (self, dbus_req->type)) {
+            WARN ("Request not supported -- req-type %d flags %d",
+                       dbus_req->type, self->priv->enable_flags);
             err = TLM_GET_ERROR_FOR_ID (TLM_ERROR_DBUS_REQ_NOT_SUPPORTED,
                     "Dbus request not supported");
             goto _finished;
         }
 
         seat = self->priv->seat;
-        if (!seat) {
-            seat = tlm_manager_get_seat (self->priv->manager, req->seat_id);
+        if (!seat && self->priv->manager) {
+            seat = tlm_manager_get_seat (self->priv->manager,
+                       dbus_req->seat_id);
+            req->seat = seat;
+            /* NOTE: When no seat is set at dbus object creation time,
+             * seat is connected on per dbus request basis and then
+             * disconnected when the dbus request is completed or aborted */
+            if (seat) {
+               _connect_seat (self, seat);
+               g_object_weak_ref (G_OBJECT (seat),
+                               (GWeakNotify)_on_seat_dispose, self);
+            }
         }
 
         if (!seat) {
@@ -349,28 +454,21 @@ _process_request (
         }
 
         self->priv->active_request = req;
-        _connect_seat (self, seat);
-        g_object_weak_ref (G_OBJECT (seat), (GWeakNotify)_on_seat_dispose,
-                self);
-
-        switch(req->type) {
+        switch(dbus_req->type) {
         case TLM_DBUS_REQUEST_TYPE_LOGIN_USER:
-            //request is completed when the function returns
-            ret = tlm_seat_create_session (seat, NULL, req->username,
-                    req->password, req->environment);
+            ret = tlm_seat_create_session (seat, NULL, dbus_req->username,
+                       dbus_req->password, dbus_req->environment);
             break;
         case TLM_DBUS_REQUEST_TYPE_LOGOUT_USER:
             ret = tlm_seat_terminate_session (seat);
             break;
         case TLM_DBUS_REQUEST_TYPE_SWITCH_USER:
-            ret = tlm_seat_switch_user (seat, NULL, req->username,
-                    req->password, req->environment);
+            ret = tlm_seat_switch_user (seat, NULL, dbus_req->username,
+                       dbus_req->password, dbus_req->environment);
             break;
         }
         if (!ret) {
-            g_object_weak_unref (G_OBJECT (seat), (GWeakNotify)_on_seat_dispose,
-                    self);
-            _disconnect_seat (self, seat);
+            _dispose_request (self, self->priv->active_request);
             self->priv->active_request = NULL;
         }
     }
@@ -378,12 +476,13 @@ _process_request (
 _finished:
     if (err) {
         if (req) {
-            _complete_dbus_request (req, err);
+            _complete_request (self, req, err);
         } else {
             g_error_free (err);
         }
-        _process_next_request_in_idle (self);
     }
+    if (!self->priv->active_request)
+       _process_next_request_in_idle (self);
 
     return FALSE;
 }
@@ -401,9 +500,9 @@ _process_next_request_in_idle (
 }
 
 static void
-_add_dbus_request (
+_add_request (
         TlmDbusObserver *self,
-        TlmDbusRequest *request)
+        TlmRequest *request)
 {
     g_queue_push_tail (self->priv->request_queue, request);
     _process_next_request_in_idle (self);
@@ -420,18 +519,17 @@ _handle_seat_session_created (
     g_return_if_fail (self && TLM_IS_DBUS_OBSERVER(self));
     g_return_if_fail (seat && TLM_IS_SEAT(seat));
 
-    /* Login/switch request should only be completed on session terminated
+    /* Login/switch request should only be completed on session created
      * signal from seat */
     if (!self->priv->active_request ||
-        self->priv->active_request->type == TLM_DBUS_REQUEST_TYPE_LOGOUT_USER)
+       !self->priv->active_request->dbus_request ||
+        self->priv->active_request->dbus_request->type ==
+                       TLM_DBUS_REQUEST_TYPE_LOGOUT_USER)
         return;
 
-    _complete_dbus_request (self->priv->active_request, NULL);
-
+    _complete_request (self, self->priv->active_request, NULL);
     self->priv->active_request = NULL;
 
-    _disconnect_seat (self, TLM_SEAT (seat));
-
     _process_next_request_in_idle (self);
 }
 
@@ -449,18 +547,17 @@ _handle_seat_session_terminated (
     /* Logout request should only be completed on session terminated signal
      * from seat */
     if (!self->priv->active_request ||
-        self->priv->active_request->type != TLM_DBUS_REQUEST_TYPE_LOGOUT_USER)
+        !self->priv->active_request->dbus_request ||
+        self->priv->active_request->dbus_request->type !=
+                       TLM_DBUS_REQUEST_TYPE_LOGOUT_USER)
         return FALSE;
 
-    _disconnect_dbus_adapter (self,
-            TLM_DBUS_LOGIN_ADAPTER (self->priv->active_request->dbus_adapter));
-
-    _complete_dbus_request (self->priv->active_request, NULL);
+    _disconnect_dbus_adapter (self, TLM_DBUS_LOGIN_ADAPTER (
+               self->priv->active_request->dbus_request->dbus_adapter));
 
+    _complete_request (self, self->priv->active_request, NULL);
     self->priv->active_request = NULL;
 
-    _disconnect_seat (self, TLM_SEAT (seat));
-
     _process_next_request_in_idle (self);
 
     return FALSE;
@@ -482,11 +579,9 @@ _handle_seat_session_error (
         return;
 
     error = TLM_GET_ERROR_FOR_ID (error_code, "Dbus request failed");
-    _complete_dbus_request (self->priv->active_request, error);
+    _complete_request (self, self->priv->active_request, error);
     self->priv->active_request = NULL;
 
-    _disconnect_seat (self, TLM_SEAT (seat));
-
     _process_next_request_in_idle (self);
 }
 
@@ -508,7 +603,7 @@ _handle_dbus_login_user (
     request = tlm_dbus_utils_create_request (dbus_adapter, invocation,
             TLM_DBUS_REQUEST_TYPE_LOGIN_USER, seat_id, username, password,
             environment);
-    _add_dbus_request (self, request);
+    _add_request (self, _create_request (self, request, NULL));
 }
 
 static void
@@ -525,7 +620,7 @@ _handle_dbus_logout_user (
 
     request = tlm_dbus_utils_create_request (dbus_adapter, invocation,
             TLM_DBUS_REQUEST_TYPE_LOGOUT_USER, seat_id, NULL, NULL, NULL);
-    _add_dbus_request (self, request);
+    _add_request (self, _create_request (self, request, NULL));
 }
 
 static void
@@ -546,18 +641,20 @@ _handle_dbus_switch_user (
     request = tlm_dbus_utils_create_request (dbus_adapter, invocation,
             TLM_DBUS_REQUEST_TYPE_SWITCH_USER, seat_id, username, password,
             environment);
-    _add_dbus_request (self, request);
+    _add_request (self, _create_request (self, request, NULL));
 }
 
 static void
 _stop_dbus_server (TlmDbusObserver *self)
 {
-    _abort_dbus_request (self->priv->active_request);
+    DBG("self %p", self);
+    _clear_request (self->priv->active_request, self);
     self->priv->active_request = NULL;
 
     if (self->priv->request_queue) {
-        g_queue_free_full (self->priv->request_queue,
-                           (GDestroyNotify) _abort_dbus_request);
+       g_queue_foreach (self->priv->request_queue,
+                           (GFunc) _clear_request, self);
+       g_queue_free (self->priv->request_queue);
         self->priv->request_queue = NULL;
     }
 
@@ -574,9 +671,9 @@ _start_dbus_server (
         const gchar *address,
         uid_t uid)
 {
+    DBG("self %p address %s uid %d", self, address, uid);
     self->priv->dbus_server = TLM_DBUS_SERVER (tlm_dbus_server_p2p_new (address,
             uid));
-
     return tlm_dbus_server_start (self->priv->dbus_server);
 }
 
@@ -592,14 +689,15 @@ tlm_dbus_observer_dispose (GObject *object)
     }
 
     _stop_dbus_server (self);
-
     if (self->priv->manager) {
-        g_object_unref (self->priv->manager);
+       g_object_weak_unref (G_OBJECT (self->priv->manager),
+                       (GWeakNotify)_on_manager_dispose, self);
         self->priv->manager = NULL;
     }
 
     if (self->priv->seat) {
-        g_object_unref (self->priv->seat);
+       g_object_weak_unref (G_OBJECT (self->priv->seat),
+                               (GWeakNotify)_on_seat_dispose, self);
         self->priv->seat = NULL;
     }
     DBG("disposing dbus_observer DONE: %p", self);
@@ -648,12 +746,23 @@ tlm_dbus_observer_new (
         uid_t uid,
         DbusObserverEnableFlags enable_flags)
 {
-    DBG ("");
-
     TlmDbusObserver *dbus_observer =
         g_object_new (TLM_TYPE_DBUS_OBSERVER,  NULL);
-    dbus_observer->priv->manager = g_object_ref (manager);
-    if (seat) dbus_observer->priv->seat = g_object_ref (seat);
+    DBG ("%p", dbus_observer);
+
+    if (manager) {
+       dbus_observer->priv->manager = manager;
+       g_object_weak_ref (G_OBJECT (manager), (GWeakNotify)_on_manager_dispose,
+                       dbus_observer);
+    }
+    /* NOTE: When no seat is set at dbus object creation time,
+     * seat is connected on per dbus request basis and then
+     * disconnected when the dbus request is completed or aborted */
+    if (seat) {
+        dbus_observer->priv->seat = seat;
+        g_object_weak_ref (G_OBJECT (seat), (GWeakNotify)_on_seat_dispose,
+                       dbus_observer);
+    }
     dbus_observer->priv->enable_flags = enable_flags;
 
     if (!_start_dbus_server (dbus_observer, address, uid)) {
index 4689bd5..9f05c33 100644 (file)
@@ -454,7 +454,6 @@ _add_seat (TlmManager *manager, const gchar *seat_id, const gchar *seat_path)
     TlmManagerPrivate *priv = TLM_MANAGER_PRIV (manager);
 
     TlmSeat *seat = tlm_seat_new (priv->config,
-                                  manager,
                                   seat_id,
                                   seat_path);
     g_signal_connect (seat,
@@ -652,10 +651,13 @@ _session_terminated_cb (GObject *emitter, const gchar *seat_id,
         TlmManager *manager)
 {
     g_return_val_if_fail (manager && TLM_IS_MANAGER (manager), TRUE);
+    DBG("seatid %s", seat_id);
 
     g_hash_table_remove (manager->priv->seats, seat_id);
-    if (g_hash_table_size (manager->priv->seats) == 0)
+    if (g_hash_table_size (manager->priv->seats) == 0) {
+       DBG ("signalling stopped");
         g_signal_emit (manager, signals[SIG_MANAGER_STOPPED], 0);
+    }
 
     return TRUE;
 }
@@ -687,7 +689,7 @@ tlm_manager_stop (TlmManager *manager)
     }
     if (!delayed)
         g_signal_emit (manager, signals[SIG_MANAGER_STOPPED], 0);
-    
+
     manager->priv->is_started = FALSE;
 
     return TRUE;
index 66c00e7..c209f82 100644 (file)
@@ -32,7 +32,7 @@
 #include "config.h"
 
 #include "tlm-seat.h"
-#include "tlm-session.h"
+#include "tlm-session-remote.h"
 #include "tlm-log.h"
 #include "tlm-error.h"
 #include "tlm-utils.h"
@@ -65,7 +65,6 @@ static guint signals[SIG_MAX];
 struct _TlmSeatPrivate
 {
     TlmConfig *config;
-    TlmManager *manager;
     gchar *id;
     gchar *path;
     gchar *next_service;
@@ -74,12 +73,10 @@ struct _TlmSeatPrivate
     GHashTable *next_environment;
     gint64 prev_time;
     gint32 prev_count;
-    TlmSession *session;
+    TlmSessionRemote *session;
     TlmDbusObserver *dbus_observer; /* dbus server accessed only by user who has
     active session */
-    gint notify_fd[2];
-    GIOChannel *notify_channel;
-    guint logout_id;      /* logout source id */
+    TlmDbusObserver *prev_dbus_observer;
 };
 
 typedef struct _DelayClosure
@@ -92,9 +89,154 @@ typedef struct _DelayClosure
 } DelayClosure;
 
 static void
+_disconnect_session_signals (
+        TlmSeat *seat);
+static void
+_destroy_dbus_observer (
+        TlmDbusObserver **dbus_observer);
+
+static void
+_reset_next (TlmSeatPrivate *priv)
+{
+    g_clear_string (&priv->next_service);
+    g_clear_string (&priv->next_user);
+    g_clear_string (&priv->next_password);
+    if (priv->next_environment) {
+        g_hash_table_unref (priv->next_environment);
+        priv->next_environment = NULL;
+    }
+}
+
+static void
+_handle_session_created (
+        TlmSeat *self,
+        const gchar *sessionid,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SEAT (self));
+
+    DBG ("sessionid: %s", sessionid);
+
+    g_signal_emit (self, signals[SIG_SESSION_CREATED], 0, self->priv->id);
+
+    _destroy_dbus_observer (&self->priv->prev_dbus_observer);
+}
+
+static void
+_close_active_session (TlmSeat *self)
+{
+    TlmSeatPrivate *priv = TLM_SEAT_PRIV (self);
+    _disconnect_session_signals (self);
+    if (priv->session)
+        g_clear_object (&priv->session);
+}
+
+static void
+_handle_session_terminated (
+        TlmSeat *self,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SEAT (self));
+
+    TlmSeat *seat = TLM_SEAT(self);
+    TlmSeatPrivate *priv = TLM_SEAT_PRIV(seat);
+    gboolean stop = FALSE;
+
+    DBG ("seat %p session %p", self, priv->session);
+    _close_active_session (seat);
+
+    g_signal_emit (seat,
+            signals[SIG_SESSION_TERMINATED],
+            0,
+            priv->id,
+            &stop);
+    if (stop) {
+        DBG ("no relogin or switch user");
+        return;
+    }
+    _destroy_dbus_observer (&priv->dbus_observer);
+
+    if (tlm_config_get_boolean (priv->config,
+                                TLM_CONFIG_GENERAL,
+                                TLM_CONFIG_GENERAL_X11_SESSION,
+                                FALSE)) {
+        DBG ("X11 session termination");
+        if (kill (0, SIGTERM))
+            WARN ("Failed to send TERM signal to process tree");
+        return;
+    }
+
+    if (tlm_config_get_boolean (priv->config,
+                                TLM_CONFIG_GENERAL,
+                                TLM_CONFIG_GENERAL_AUTO_LOGIN,
+                                TRUE) ||
+                                seat->priv->next_user) {
+        DBG ("auto re-login with '%s'", seat->priv->next_user);
+        tlm_seat_create_session (seat,
+                seat->priv->next_service,
+                seat->priv->next_user,
+                seat->priv->next_password,
+                seat->priv->next_environment);
+        _reset_next (priv);
+    }
+}
+
+static void
+_handle_error (
+        TlmSeat *self,
+        GError *error,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SEAT (self));
+
+    DBG ("Error : %d:%s", error->code, error->message);
+    g_signal_emit (self, signals[SIG_SESSION_ERROR],  0, error->code);
+
+    if (error->code == TLM_ERROR_PAM_AUTH_FAILURE ||
+        error->code == TLM_ERROR_SESSION_CREATION_FAILURE ||
+        error->code == TLM_ERROR_SESSION_TERMINATION_FAILURE) {
+        DBG ("Destroy the session in case of creation/termination failure");
+        _close_active_session (self);
+        _destroy_dbus_observer (&self->priv->dbus_observer);
+    }
+}
+
+static void
+_disconnect_session_signals (
+        TlmSeat *seat)
+{
+    TlmSeatPrivate *priv = TLM_SEAT_PRIV (seat);
+    if (!priv->session) return;
+    DBG ("seat %p session %p", seat, priv->session);
+
+    g_signal_handlers_disconnect_by_func (G_OBJECT (priv->session),
+            _handle_session_created, seat);
+    g_signal_handlers_disconnect_by_func (G_OBJECT (priv->session),
+            _handle_session_terminated, seat);
+    g_signal_handlers_disconnect_by_func (G_OBJECT (priv->session),
+            _handle_error, seat);
+}
+
+static void
+_connect_session_signals (
+        TlmSeat *seat)
+{
+    TlmSeatPrivate *priv = TLM_SEAT_PRIV (seat);
+    DBG ("seat %p", seat);
+    /* Connect session signals to handlers */
+    g_signal_connect_swapped (priv->session, "session-created",
+            G_CALLBACK (_handle_session_created), seat);
+    g_signal_connect_swapped (priv->session, "session-terminated",
+            G_CALLBACK(_handle_session_terminated), seat);
+    g_signal_connect_swapped (priv->session, "session-error",
+            G_CALLBACK(_handle_error), seat);
+}
+
+static void
 _destroy_dbus_observer (
         TlmDbusObserver **dbus_observer)
 {
+    DBG ("destroy dbus obs: %p", *dbus_observer);
     if (*dbus_observer) {
         g_object_unref (*dbus_observer);
         *dbus_observer = NULL;
@@ -111,17 +253,17 @@ _create_dbus_observer (
 
     if (!username) return FALSE;
 
-    _destroy_dbus_observer (&seat->priv->dbus_observer);
-
     uid = tlm_user_get_uid (username);
+    if (uid == -1) return FALSE;
+
     address = g_strdup_printf ("unix:path=%s/%s-%d", TLM_DBUS_SOCKET_PATH,
             seat->priv->id, uid);
     seat->priv->dbus_observer = TLM_DBUS_OBSERVER (tlm_dbus_observer_new (
-            seat->priv->manager, seat, address, uid,
+            NULL, seat, address, uid,
             DBUS_OBSERVER_ENABLE_LOGOUT_USER |
             DBUS_OBSERVER_ENABLE_SWITCH_USER));
     g_free (address);
-
+    DBG ("created dbus obs: %p", seat->priv->dbus_observer);
     return (seat->priv->dbus_observer != NULL);
 }
 
@@ -132,41 +274,21 @@ tlm_seat_dispose (GObject *self)
 
     DBG("disposing seat: %s", seat->priv->id);
 
-    if (seat->priv->logout_id) {
-        g_source_remove (seat->priv->logout_id);
-        seat->priv->logout_id = 0;
-    }
-
     _destroy_dbus_observer (&seat->priv->dbus_observer);
+    _destroy_dbus_observer (&seat->priv->prev_dbus_observer);
 
-    g_clear_object (&seat->priv->session);
-
+    _disconnect_session_signals (seat);
+    if (seat->priv->session)
+        g_clear_object (&seat->priv->session);
     if (seat->priv->config) {
         g_object_unref (seat->priv->config);
         seat->priv->config = NULL;
     }
 
-    if (seat->priv->manager) {
-        g_object_unref (seat->priv->manager);
-        seat->priv->manager = NULL;
-    }
-
     G_OBJECT_CLASS (tlm_seat_parent_class)->dispose (self);
 }
 
 static void
-_reset_next (TlmSeatPrivate *priv)
-{
-    g_clear_string (&priv->next_service);
-    g_clear_string (&priv->next_user);
-    g_clear_string (&priv->next_password);
-    if (priv->next_environment) {
-        g_hash_table_unref (priv->next_environment);
-        priv->next_environment = NULL;
-    }
-}
-
-static void
 tlm_seat_finalize (GObject *self)
 {
     TlmSeat *seat = TLM_SEAT(self);
@@ -177,10 +299,6 @@ tlm_seat_finalize (GObject *self)
 
     _reset_next (priv);
 
-    g_io_channel_unref (priv->notify_channel);
-    close (priv->notify_fd[0]);
-    close (priv->notify_fd[1]);
-
     G_OBJECT_CLASS (tlm_seat_parent_class)->finalize (self);
 }
 
@@ -249,19 +367,22 @@ tlm_seat_class_init (TlmSeatClass *klass)
                              "config object",
                              "Configuration object",
                              TLM_TYPE_CONFIG,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|
+                             G_PARAM_STATIC_STRINGS);
     pspecs[PROP_ID] =
         g_param_spec_string ("id",
                              "seat id",
                              "Seat Id",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|
+                             G_PARAM_STATIC_STRINGS);
     pspecs[PROP_PATH] =
         g_param_spec_string ("path",
                              "object path",
                              "Seat Object path at logind",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|
+                             G_PARAM_STATIC_STRINGS);
     g_object_class_install_properties (g_klass, N_PROPERTIES, pspecs);
 
     signals[SIG_PREPARE_USER] = g_signal_new ("prepare-user",
@@ -306,79 +427,14 @@ tlm_seat_class_init (TlmSeatClass *klass)
                                                     G_TYPE_UINT);
 }
 
-static gboolean
-_notify_handler (GIOChannel *channel,
-                 GIOCondition condition,
-                 gpointer user_data)
-{
-    TlmSeat *seat = TLM_SEAT(user_data);
-    TlmSeatPrivate *priv = TLM_SEAT_PRIV(seat);
-    pid_t notify_pid = 0;
-    gboolean stop = FALSE;
-
-    if (read (priv->notify_fd[0],
-              &notify_pid, sizeof (notify_pid)) < (ssize_t) sizeof (notify_pid))
-        WARN ("Failed to read child pid for seat %p", seat);
-
-    DBG ("handling session termination for pid %u", notify_pid);
-    tlm_session_reset_tty (priv->session);
-    g_clear_object (&priv->session);
-
-    g_signal_emit (seat,
-                   signals[SIG_SESSION_TERMINATED],
-                   0,
-                   priv->id,
-                   &stop);
-    if (stop) {
-        DBG ("no relogin or switch user");
-        return TRUE;
-    }
-
-    if (tlm_config_get_boolean (priv->config,
-                                TLM_CONFIG_GENERAL,
-                                TLM_CONFIG_GENERAL_X11_SESSION,
-                                FALSE)) {
-        DBG ("X11 session termination");
-        if (kill (0, SIGTERM))
-            WARN ("Failed to send TERM signal to process tree");
-        return TRUE;
-    }
-
-    if (tlm_config_get_boolean (priv->config,
-                                TLM_CONFIG_GENERAL,
-                                TLM_CONFIG_GENERAL_AUTO_LOGIN,
-                                TRUE) ||
-        seat->priv->next_user) {
-        DBG ("auto re-login with '%s'", seat->priv->next_user);
-        tlm_seat_create_session (seat,
-                                 seat->priv->next_service,
-                                 seat->priv->next_user,
-                                 seat->priv->next_password,
-                                 seat->priv->next_environment);
-        _reset_next (priv);
-    }
-
-    return TRUE;
-}
-
 static void
 tlm_seat_init (TlmSeat *seat)
 {
     TlmSeatPrivate *priv = TLM_SEAT_PRIV (seat);
     
     priv->id = priv->path = NULL;
-
+    priv->dbus_observer = priv->prev_dbus_observer = NULL;
     seat->priv = priv;
-
-    if (pipe2 (priv->notify_fd, O_NONBLOCK | O_CLOEXEC))
-        ERR ("pipe2() failed");
-    priv->notify_channel = g_io_channel_unix_new (priv->notify_fd[0]);
-    g_io_add_watch (priv->notify_channel,
-                    G_IO_IN,
-                    _notify_handler,
-                    seat);
-    priv->logout_id = 0;
-    priv->manager = NULL;
 }
 
 const gchar *
@@ -537,31 +593,29 @@ tlm_seat_create_session (TlmSeat *seat,
                            default_user);
     }
 
-    priv->session = tlm_session_new (priv->config,
+    priv->session = tlm_session_remote_new (priv->config,
             priv->id,
             service,
-            default_user ? default_user : username,
-            password,
-            environment,
-            priv->notify_fd[1]);
+            default_user ? default_user : username);
     if (!priv->session) {
         g_signal_emit (seat, signals[SIG_SESSION_ERROR], 0,
                 TLM_ERROR_SESSION_CREATION_FAILURE);
         return FALSE;
     }
 
-    TlmDbusObserver *old_observer = seat->priv->dbus_observer;
+    /*It is needed to handle switch user case which completes after new session
+     *is created */
+    seat->priv->prev_dbus_observer = seat->priv->dbus_observer;
     seat->priv->dbus_observer = NULL;
     if (!_create_dbus_observer (seat, default_user ? default_user : username)) {
-        if (tlm_seat_terminate_session (seat)) {
-            g_signal_emit (seat, signals[SIG_SESSION_ERROR],  0,
-                    TLM_ERROR_DBUS_SERVER_START_FAILURE);
-        }
+        g_object_unref (priv->session);
+        g_signal_emit (seat, signals[SIG_SESSION_ERROR],  0,
+                TLM_ERROR_DBUS_SERVER_START_FAILURE);
         return FALSE;
     }
 
-    g_signal_emit (seat, signals[SIG_SESSION_CREATED], 0, priv->id);
-    _destroy_dbus_observer (&old_observer);
+    _connect_session_signals (seat);
+    tlm_session_remote_create (priv->session, password, environment);
     return TRUE;
 }
 
@@ -571,21 +625,19 @@ tlm_seat_terminate_session (TlmSeat *seat)
     g_return_val_if_fail (seat && TLM_IS_SEAT(seat), FALSE);
     g_return_val_if_fail (seat->priv, FALSE);
 
-    if (!seat->priv->session) {
+    if (!seat->priv->session ||
+        !tlm_session_remote_terminate (seat->priv->session)) {
         WARN ("No active session to terminate");
         g_signal_emit (seat, signals[SIG_SESSION_ERROR], 0,
                 TLM_ERROR_SESSION_NOT_VALID);
         return FALSE;
     }
 
-    tlm_session_terminate (seat->priv->session);
-
     return TRUE;
 }
 
 TlmSeat *
 tlm_seat_new (TlmConfig *config,
-              TlmManager *manager,
               const gchar *id,
               const gchar *path)
 {
@@ -594,7 +646,6 @@ tlm_seat_new (TlmConfig *config,
                          "id", id,
                          "path", path,
                          NULL);
-    if (seat) seat->priv->manager = g_object_ref (manager);
     return seat;
 }
 
index 99299da..eba6311 100644 (file)
@@ -61,7 +61,6 @@ GType tlm_seat_get_type(void);
 
 TlmSeat *
 tlm_seat_new (TlmConfig *config,
-              TlmManager *manager,
               const gchar *id,
               const gchar *path);
 
diff --git a/src/daemon/tlm-session-remote.c b/src/daemon/tlm-session-remote.c
new file mode 100644 (file)
index 0000000..731cdf5
--- /dev/null
@@ -0,0 +1,563 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <errno.h>
+
+#include "common/tlm-log.h"
+#include "common/tlm-error.h"
+#include "common/tlm-config.h"
+#include "common/tlm-config-general.h"
+#include "common/tlm-pipe-stream.h"
+#include "common/dbus/tlm-dbus.h"
+#include "common/dbus/tlm-dbus-utils.h"
+#include "common/dbus/tlm-dbus-session-gen.h"
+#include "tlm-session-remote.h"
+
+#define TLM_SESSIOND_NAME "tlm-sessiond"
+
+enum
+{
+    PROP_0,
+    PROP_CONFIG,
+    PROP_SEATID,
+    PROP_SERVICE,
+    PROP_USERNAME,
+    PROP_SESSIONID,
+    N_PROPERTIES
+};
+
+static GParamSpec *properties[N_PROPERTIES];
+
+struct _TlmSessionRemotePrivate
+{
+       TlmConfig *config;
+    GDBusConnection *connection;
+    TlmDbusSession *dbus_session_proxy;
+    GPid cpid;
+    guint child_watch_id;
+    gboolean is_sessiond_up;
+    int last_sig;
+    guint timer_id;
+    gboolean can_emit_signal;
+
+    /* Signals */
+    gulong signal_session_created;
+    gulong signal_session_terminated;
+    gulong signal_authenticated;
+    gulong signal_error;
+};
+
+G_DEFINE_TYPE (TlmSessionRemote, tlm_session_remote, G_TYPE_OBJECT);
+
+#define TLM_SESSION_REMOTE_PRIV(obj) \
+    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TLM_TYPE_SESSION_REMOTE, \
+            TlmSessionRemotePrivate))
+enum {
+    SIG_SESSION_CREATED,
+    SIG_SESSION_TERMINATED,
+    SIG_AUTHENTICATED,
+    SIG_SESSION_ERROR,
+    SIG_MAX
+};
+
+static guint signals[SIG_MAX];
+
+static void
+_on_child_down_cb (
+        GPid  pid,
+        gint  status,
+        gpointer data)
+{
+    g_spawn_close_pid (pid);
+
+    TlmSessionRemote *session = TLM_SESSION_REMOTE (data);
+
+    DBG ("Sessiond(%p) with pid (%d) closed with status %d", session, pid,
+            status);
+
+    session->priv->is_sessiond_up = FALSE;
+    session->priv->child_watch_id = 0;
+    if (session->priv->timer_id) {
+        g_source_remove (session->priv->timer_id);
+        session->priv->timer_id = 0;
+    }
+    if (session->priv->can_emit_signal)
+        g_signal_emit (session, signals[SIG_SESSION_TERMINATED], 0);
+}
+
+static void
+tlm_session_remote_set_property (
+        GObject *object,
+        guint property_id,
+        const GValue *value,
+        GParamSpec *pspec)
+{
+    TlmSessionRemote *self = TLM_SESSION_REMOTE (object);
+    switch (property_id) {
+       case PROP_CONFIG:
+           self->priv->config = g_value_dup_object (value);
+           break;
+               case PROP_SEATID:
+               case PROP_USERNAME:
+               case PROP_SERVICE: {
+                       if (self->priv->dbus_session_proxy) {
+                               g_object_set_property (G_OBJECT(self->priv->dbus_session_proxy),
+                                               pspec->name, value);
+                       }
+                       break;
+               }
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
+}
+
+static void
+tlm_session_remote_get_property (
+        GObject *object,
+        guint property_id,
+        GValue *value,
+        GParamSpec *pspec)
+{
+    TlmSessionRemote *self = TLM_SESSION_REMOTE (object);
+
+    switch (property_id) {
+       case PROP_CONFIG:
+               g_value_set_object (value, self->priv->config);
+               break;
+               case PROP_SEATID:
+               case PROP_USERNAME:
+               case PROP_SERVICE:
+               case PROP_SESSIONID: {
+                       if (self->priv->dbus_session_proxy) {
+                               g_object_get_property (G_OBJECT(self->priv->dbus_session_proxy),
+                                               pspec->name, value);
+                       }
+                       break;
+               }
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
+
+}
+
+static gboolean
+_terminate_timeout (gpointer user_data)
+{
+    TlmSessionRemote *self = TLM_SESSION_REMOTE(user_data);
+    TlmSessionRemotePrivate *priv = TLM_SESSION_REMOTE_PRIV(self);
+
+    switch (priv->last_sig)
+    {
+        case SIGHUP:
+            DBG ("child %u didn't respond to SIGHUP, sending SIGTERM",
+                 priv->cpid);
+            if (kill (priv->cpid, SIGTERM))
+                WARN ("kill(%u, SIGTERM): %s",
+                      priv->cpid,
+                      strerror(errno));
+            priv->last_sig = SIGTERM;
+            return G_SOURCE_CONTINUE;
+        case SIGTERM:
+            DBG ("child %u didn't respond to SIGTERM, sending SIGKILL",
+                 priv->cpid);
+            if (kill (priv->cpid, SIGKILL))
+                WARN ("kill(%u, SIGKILL): %s",
+                      priv->cpid,
+                      strerror(errno));
+            priv->last_sig = SIGKILL;
+            return G_SOURCE_CONTINUE;
+        case SIGKILL:
+            DBG ("child %u didn't respond to SIGKILL, "
+                       "process is stuck in kernel",  priv->cpid);
+            priv->timer_id = 0;
+            if (self->priv->can_emit_signal) {
+                GError *error = TLM_GET_ERROR_FOR_ID (
+                        TLM_ERROR_SESSION_TERMINATION_FAILURE,
+                        "Unable to terminate session - process is stuck"
+                        " in kernel");
+                g_signal_emit (self, signals[SIG_SESSION_ERROR], 0, error);
+                g_error_free (error);
+            }
+            return G_SOURCE_REMOVE;
+        default:
+            WARN ("%d has unknown signaling state %d",
+                  priv->cpid,
+                  priv->last_sig);
+    }
+    return G_SOURCE_REMOVE;
+}
+
+static void
+tlm_session_remote_dispose (GObject *object)
+{
+    TlmSessionRemote *self = TLM_SESSION_REMOTE (object);
+    self->priv->can_emit_signal = FALSE;
+
+    DBG("self %p", self);
+    if (self->priv->is_sessiond_up) {
+        tlm_session_remote_terminate (self);
+        while (self->priv->is_sessiond_up)
+            g_main_context_iteration(NULL, TRUE);
+        DBG ("Sessiond DESTROYED");
+    }
+
+    if (self->priv->timer_id) {
+        g_source_remove (self->priv->timer_id);
+        self->priv->timer_id = 0;
+    }
+
+    self->priv->cpid = 0;
+    self->priv->last_sig = 0;
+
+    if (self->priv->child_watch_id > 0) {
+        g_source_remove (self->priv->child_watch_id);
+        self->priv->child_watch_id = 0;
+    }
+
+    g_clear_object (&self->priv->config);
+
+    if (self->priv->dbus_session_proxy) {
+        g_signal_handler_disconnect (self->priv->dbus_session_proxy,
+                self->priv->signal_session_created);
+        g_signal_handler_disconnect (self->priv->dbus_session_proxy,
+                self->priv->signal_session_terminated);
+        g_signal_handler_disconnect (self->priv->dbus_session_proxy,
+                self->priv->signal_error);
+        g_signal_handler_disconnect (self->priv->dbus_session_proxy,
+                self->priv->signal_authenticated);
+        g_object_unref (self->priv->dbus_session_proxy);
+        self->priv->dbus_session_proxy = NULL;
+    }
+
+    if (self->priv->connection) {
+        /* NOTE: There seems to be some bug in glib's dbus connection's
+         * worker thread such that it does not closes the stream. The problem
+         * is hard to be tracked exactly as it is more of timing issue.
+         * Following code snippet at least closes the stream to avoid any
+         * descriptors leak.
+         * */
+       GIOStream *stream = g_dbus_connection_get_stream (
+                self->priv->connection);
+        if (stream) g_io_stream_close (stream, NULL, NULL);
+        g_object_unref (self->priv->connection);
+        self->priv->connection = NULL;
+    }
+
+    DBG("done");
+    G_OBJECT_CLASS (tlm_session_remote_parent_class)->dispose (object);
+}
+
+static void
+tlm_session_remote_finalize (GObject *object)
+{
+    //TlmSessionRemote *self = TLM_SESSION_REMOTE (object);
+
+    G_OBJECT_CLASS (tlm_session_remote_parent_class)->finalize (object);
+}
+
+static void
+tlm_session_remote_class_init (TlmSessionRemoteClass *klass)
+{
+    GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+    g_type_class_add_private (object_class,
+            sizeof (TlmSessionRemotePrivate));
+
+    object_class->get_property = tlm_session_remote_get_property;
+    object_class->set_property = tlm_session_remote_set_property;
+    object_class->dispose = tlm_session_remote_dispose;
+    object_class->finalize = tlm_session_remote_finalize;
+
+    properties[PROP_CONFIG] = g_param_spec_object ("config",
+                             "config object",
+                             "Configuration object",
+                             TLM_TYPE_CONFIG,
+                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|
+                             G_PARAM_STATIC_STRINGS);
+    properties[PROP_SEATID] = g_param_spec_string ("seatid",
+            "SeatId",
+            "Id of the seat",
+            "seat0" /* default value */,
+            G_PARAM_READWRITE |
+            G_PARAM_STATIC_STRINGS);
+    properties[PROP_SERVICE] = g_param_spec_string ("service",
+            "Service",
+            "Service",
+            "" /* default value */,
+            G_PARAM_READWRITE |
+            G_PARAM_STATIC_STRINGS);
+    properties[PROP_USERNAME] = g_param_spec_string ("username",
+            "Username",
+            "Username",
+            "" /* default value */,
+            G_PARAM_READWRITE |
+            G_PARAM_STATIC_STRINGS);
+    properties[PROP_SESSIONID] = g_param_spec_string ("sessionid",
+            "SessionId",
+            "Id of the session",
+            "" /* default value */,
+            G_PARAM_READABLE |
+            G_PARAM_STATIC_STRINGS);
+
+    g_object_class_install_properties (object_class, N_PROPERTIES, properties);
+
+    signals[SIG_SESSION_CREATED] = g_signal_new ("session-created",
+                                TLM_TYPE_SESSION_REMOTE, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                1, G_TYPE_STRING);
+
+    signals[SIG_SESSION_TERMINATED] = g_signal_new ("session-terminated",
+                                TLM_TYPE_SESSION_REMOTE, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                0, G_TYPE_NONE);
+
+    signals[SIG_AUTHENTICATED] = g_signal_new ("authenticated",
+                                TLM_TYPE_SESSION_REMOTE, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                0, G_TYPE_NONE);
+
+    signals[SIG_SESSION_ERROR] = g_signal_new ("session-error",
+                                TLM_TYPE_SESSION_REMOTE, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                1, G_TYPE_ERROR);
+}
+
+static void
+tlm_session_remote_init (TlmSessionRemote *self)
+{
+    self->priv = TLM_SESSION_REMOTE_PRIV(self);
+
+    self->priv->connection = NULL;
+    self->priv->dbus_session_proxy = NULL;
+    self->priv->cpid = 0;
+    self->priv->child_watch_id = 0;
+    self->priv->is_sessiond_up = FALSE;
+    self->priv->last_sig = 0;
+    self->priv->timer_id = 0;
+}
+
+static void
+_session_created_async_cb (
+        GObject *object,
+        GAsyncResult *res,
+        gpointer user_data)
+{
+    GError *error = NULL;
+    TlmDbusSession *proxy = TLM_DBUS_SESSION (object);
+    TlmSessionRemote *self = TLM_SESSION_REMOTE (user_data);
+
+    tlm_dbus_session_call_session_create_finish (proxy,
+            res, &error);
+    if (error) {
+        WARN("session creation request failed");
+        g_signal_emit (self, signals[SIG_SESSION_ERROR],  0, error);
+        g_error_free (error);
+    }
+}
+
+void
+tlm_session_remote_create (
+    TlmSessionRemote *session,
+    const gchar *password,
+    GHashTable *environment)
+{
+    GVariant *data = tlm_dbus_utils_hash_table_to_variant (environment);
+    tlm_dbus_session_call_session_create (
+            session->priv->dbus_session_proxy, password, data, NULL,
+            _session_created_async_cb, session);
+}
+
+/* signals */
+static void
+_on_session_created_cb (
+        TlmSessionRemote *self,
+        const gchar *sessionid,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_REMOTE (self));
+    DBG("sessionid: %s", sessionid ? sessionid : "NULL");
+    g_signal_emit (self, signals[SIG_SESSION_CREATED], 0, sessionid);
+}
+
+static void
+_on_session_terminated_cb (
+        TlmSessionRemote *self,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_REMOTE (self));
+    if (self->priv->can_emit_signal)
+        g_signal_emit (self, signals[SIG_SESSION_TERMINATED], 0);
+}
+
+static void
+_on_authenticated_cb (
+        TlmSessionRemote *self,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_REMOTE (self));
+    g_signal_emit (self, signals[SIG_AUTHENTICATED], 0);
+}
+
+static void
+_on_error_cb (
+        TlmSessionRemote *self,
+        GVariant *error,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_REMOTE (self));
+
+    GError *gerror = tlm_error_new_from_variant (error);
+    WARN("error %d:%s", gerror->code, gerror->message);
+    if (self->priv->can_emit_signal)
+        g_signal_emit (self, signals[SIG_SESSION_ERROR],  0, gerror);
+    g_error_free (gerror);
+}
+
+TlmSessionRemote *
+tlm_session_remote_new (
+        TlmConfig *config,
+        const gchar *seat_id,
+        const gchar *service,
+        const gchar *username)
+{
+    GError *error = NULL;
+    GPid cpid = 0;
+    gchar **argv;
+    gint cin_fd, cout_fd;
+    TlmSessionRemote *session = NULL;
+    TlmPipeStream *stream = NULL;
+    gboolean ret = FALSE;
+    const gchar *bin_path = TLM_BIN_DIR;
+
+#   ifdef ENABLE_DEBUG
+    const gchar *env_val = g_getenv("TLM_BIN_DIR");
+    if (env_val)
+        bin_path = env_val;
+#   endif
+
+    if (!bin_path || strlen(bin_path) == 0) {
+        WARN ("Invalid tlm binary path %s", bin_path?bin_path:"null");
+        return NULL;
+    }
+
+    /* This guarantees that writes to a pipe will never cause
+     * a process termination via SIGPIPE, and instead a proper
+     * error will be returned */
+    signal(SIGPIPE, SIG_IGN);
+
+    /* Spawn child process */
+    argv = g_new0 (gchar *, 1 + 1);
+    argv[0] = g_build_filename (bin_path, TLM_SESSIOND_NAME, NULL);
+    ret = g_spawn_async_with_pipes (NULL, argv, NULL,
+            G_SPAWN_DO_NOT_REAP_CHILD, NULL,
+            NULL, &cpid, &cin_fd, &cout_fd, NULL, &error);
+    g_strfreev (argv);
+    if (ret == FALSE || (kill(cpid, 0) != 0)) {
+        DBG ("failed to start sessiond: error %s(%d)",
+            error ? error->message : "(null)", ret);
+        if (error) g_error_free (error);
+        return NULL;
+    }
+
+    /* Create dbus session object */
+    session = TLM_SESSION_REMOTE (g_object_new (TLM_TYPE_SESSION_REMOTE,
+            "config", config, NULL));
+
+    session->priv->child_watch_id = g_child_watch_add (cpid,
+            (GChildWatchFunc)_on_child_down_cb, session);
+    session->priv->cpid = cpid;
+    session->priv->is_sessiond_up = TRUE;
+
+    /* Create dbus connection */
+    stream = tlm_pipe_stream_new (cout_fd, cin_fd, TRUE);
+    session->priv->connection = g_dbus_connection_new_sync (
+            G_IO_STREAM (stream), NULL, G_DBUS_CONNECTION_FLAGS_NONE, NULL,
+            NULL, NULL);
+    g_object_unref (stream);
+
+    /* Create dbus proxy */
+    session->priv->dbus_session_proxy =
+            tlm_dbus_session_proxy_new_sync (
+                    session->priv->connection,
+                    G_DBUS_PROXY_FLAGS_NONE,
+                    NULL,
+                    TLM_SESSION_OBJECTPATH,
+                    NULL,
+                    &error);
+    if (error) {
+        DBG ("Failed to register object: %s", error->message);
+        g_error_free (error);
+        g_object_unref (session);
+        return NULL;
+    }
+    DBG("'%s' object exported(%p)", TLM_SESSION_OBJECTPATH, session);
+
+    session->priv->signal_session_created = g_signal_connect_swapped (
+            session->priv->dbus_session_proxy, "session-created",
+            G_CALLBACK (_on_session_created_cb), session);
+    session->priv->signal_session_terminated = g_signal_connect_swapped (
+            session->priv->dbus_session_proxy, "session-terminated",
+            G_CALLBACK(_on_session_terminated_cb), session);
+    session->priv->signal_authenticated = g_signal_connect_swapped (
+            session->priv->dbus_session_proxy, "authenticated",
+            G_CALLBACK(_on_authenticated_cb), session);
+    session->priv->signal_error = g_signal_connect_swapped (
+            session->priv->dbus_session_proxy, "error",
+            G_CALLBACK(_on_error_cb), session);
+
+    g_object_set (G_OBJECT (session), "seatid", seat_id, "service", service,
+            "username", username, NULL);
+
+    session->priv->can_emit_signal = TRUE;
+    return session;
+}
+
+gboolean
+tlm_session_remote_terminate (
+        TlmSessionRemote *self)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_REMOTE(self));
+    TlmSessionRemotePrivate *priv = TLM_SESSION_REMOTE_PRIV(self);
+
+    if (!priv->is_sessiond_up) {
+        WARN ("sessiond is not running");
+        return FALSE;
+    }
+
+    DBG ("Terminate child session process");
+    if (kill (priv->cpid, SIGHUP) < 0)
+        WARN ("kill(%u, SIGHUP): %s", priv->cpid, strerror(errno));
+    priv->last_sig = SIGHUP;
+    priv->timer_id = g_timeout_add_seconds (
+            tlm_config_get_uint (priv->config, TLM_CONFIG_GENERAL,
+                    TLM_CONFIG_GENERAL_TERMINATE_TIMEOUT, 3),
+            _terminate_timeout, self);
+    return TRUE;
+}
+
+
diff --git a/src/daemon/tlm-session-remote.h b/src/daemon/tlm-session-remote.h
new file mode 100644 (file)
index 0000000..7706900
--- /dev/null
@@ -0,0 +1,87 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef __TLM_SESSION_REMOTE_H_
+#define __TLM_SESSION_REMOTE_H_
+
+#include <glib.h>
+#include "common/tlm-config.h"
+
+G_BEGIN_DECLS
+
+#define TLM_TYPE_SESSION_REMOTE (tlm_session_remote_get_type())
+#define TLM_SESSION_REMOTE(obj)  (G_TYPE_CHECK_INSTANCE_CAST((obj),\
+    TLM_TYPE_SESSION_REMOTE, TlmSessionRemote))
+#define TLM_SESSION_REMOTE_CLASS(klass)\
+    (G_TYPE_CHECK_CLASS_CAST((klass), TLM_TYPE_SESSION_REMOTE, \
+    TlmSessionRemoteClass))
+#define TLM_IS_SESSION_REMOTE(obj)         \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), TLM_TYPE_SESSION_REMOTE))
+#define TLM_IS_SESSION_REMOTE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_TYPE((klass), TLM_TYPE_SESSION_REMOTE))
+#define TLM_SESSION_REMOTE_GET_CLASS(obj)  \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), TLM_TYPE_SESSION_REMOTE, \
+    TlmSessionRemoteClass))
+
+typedef struct _TlmSessionRemote TlmSessionRemote;
+typedef struct _TlmSessionRemoteClass TlmSessionRemoteClass;
+typedef struct _TlmSessionRemotePrivate TlmSessionRemotePrivate;
+
+struct _TlmSessionRemote
+{
+    GObject parent;
+
+    /* priv */
+    TlmSessionRemotePrivate *priv;
+};
+
+struct _TlmSessionRemoteClass
+{
+    GObjectClass parent_class;
+};
+
+GType
+tlm_session_remote_get_type (void) G_GNUC_CONST;
+
+TlmSessionRemote *
+tlm_session_remote_new (
+        TlmConfig *config,
+        const gchar *seat_id,
+        const gchar *service,
+        const gchar *username);
+
+void
+tlm_session_remote_create (
+    TlmSessionRemote *session,
+    const gchar *password,
+    GHashTable *environment);
+
+gboolean
+tlm_session_remote_terminate (
+        TlmSessionRemote *session);
+
+G_END_DECLS
+
+#endif /* __TLM_SESSION_REMOTE_H_ */
diff --git a/src/daemon/tlm-utils.c b/src/daemon/tlm-utils.c
deleted file mode 100644 (file)
index 8c883e3..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/* vi: set et sw=4 ts=4 cino=t0,(0: */
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of tlm (Tizen Login Manager)
- *
- * Copyright (C) 2013 Intel Corporation.
- *
- * Contact: Amarnath Valluri <amarnath.valluri@linux.intel.com>
- *          Jussi Laako <jussi.laako@linux.intel.com>
- *
- * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#include <sys/types.h>
-#include <pwd.h>
-#include <sys/stat.h>
-#include <glib/gstdio.h>
-
-#include "tlm-utils.h"
-
-void
-g_clear_string (gchar **str)
-{
-    if (str && *str) {
-        g_free (*str);
-        *str = NULL;
-    }
-}
-
-const gchar *
-tlm_user_get_name (uid_t user_id)
-{
-    struct passwd *pwent;
-
-    pwent = getpwuid (user_id);
-    if (!pwent)
-        return NULL;
-
-    return pwent->pw_name;
-}
-
-uid_t
-tlm_user_get_uid (const gchar *username)
-{
-    struct passwd *pwent;
-
-    pwent = getpwnam (username);
-    if (!pwent)
-        return -1;
-
-    return pwent->pw_uid;
-}
-
-gid_t
-tlm_user_get_gid (const gchar *username)
-{
-    struct passwd *pwent;
-
-    pwent = getpwnam (username);
-    if (!pwent)
-        return -1;
-
-    return pwent->pw_gid;
-}
-
-const gchar *
-tlm_user_get_home_dir (const gchar *username)
-{
-    struct passwd *pwent;
-
-    pwent = getpwnam (username);
-    if (!pwent)
-        return NULL;
-
-    return pwent->pw_dir;
-}
-
-const gchar *
-tlm_user_get_shell (const gchar *username)
-{
-    struct passwd *pwent;
-
-    pwent = getpwnam (username);
-    if (!pwent)
-        return NULL;
-
-    return pwent->pw_shell;
-}
-
-gboolean
-tlm_utils_delete_dir (
-        const gchar *dir)
-{
-    GDir* gdir = NULL;
-    struct stat sent;
-
-    if (!dir || !(gdir = g_dir_open(dir, 0, NULL))) {
-        return FALSE;
-    }
-
-    const gchar *fname = NULL;
-    gint retval = 0;
-    gchar *filepath = NULL;
-    while ((fname = g_dir_read_name (gdir)) != NULL) {
-        if (g_strcmp0 (fname, ".") == 0 ||
-            g_strcmp0 (fname, "..") == 0) {
-            continue;
-        }
-        retval = -1;
-        filepath = g_build_filename (dir, fname, NULL);
-        if (filepath) {
-            retval = lstat(filepath, &sent);
-            if (retval == 0) {
-                /* recurse the directory */
-                if (S_ISDIR (sent.st_mode)) {
-                    retval = (gint)!tlm_utils_delete_dir (filepath);
-                } else {
-                    retval = g_remove (filepath);
-                }
-            }
-            g_free (filepath);
-        }
-        if (retval != 0) {
-            g_dir_close (gdir);
-            return FALSE;
-        }
-    }
-    g_dir_close (gdir);
-
-    if (g_remove (dir) != 0) {
-        return FALSE;
-    }
-
-    return TRUE;
-}
index c00b06d..d04f5f4 100644 (file)
@@ -15,7 +15,7 @@ libtlm_plugin_default_la_CFLAGS = \
 libtlm_plugin_default_la_LDFLAGS = -avoid-version
 
 libtlm_plugin_default_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(GLIB_LIBS)
 
 all-local: slink
index 636dd88..caaecf3 100644 (file)
@@ -123,7 +123,7 @@ am__installdirs = "$(DESTDIR)$(pluginsdir)"
 LTLIBRARIES = $(plugins_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libtlm_plugin_default_la_DEPENDENCIES =  \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(am__DEPENDENCIES_1)
 am_libtlm_plugin_default_la_OBJECTS =  \
        libtlm_plugin_default_la-tlm-account-plugin-default.lo \
@@ -356,7 +356,7 @@ libtlm_plugin_default_la_CFLAGS = \
 
 libtlm_plugin_default_la_LDFLAGS = -avoid-version
 libtlm_plugin_default_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(GLIB_LIBS)
 
 all: all-am
index cef1808..59ac783 100644 (file)
@@ -13,8 +13,8 @@ libtlm_plugin_gumd_la_CFLAGS = \
 libtlm_plugin_gumd_la_LDFLAGS = -avoid-version
 
 libtlm_plugin_gumd_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
-    $(LIBGUM_LIBS)
+       $(abs_top_builddir)/src/common/libtlm-common.la \
+       $(LIBGUM_LIBS)
 
 all-local: slink
 
index 784149c..a05b7ff 100644 (file)
@@ -123,7 +123,7 @@ am__installdirs = "$(DESTDIR)$(pluginsdir)"
 LTLIBRARIES = $(plugins_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libtlm_plugin_gumd_la_DEPENDENCIES =  \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(am__DEPENDENCIES_1)
 am_libtlm_plugin_gumd_la_OBJECTS =  \
        libtlm_plugin_gumd_la-tlm-plugin-gumd.lo
@@ -352,8 +352,8 @@ libtlm_plugin_gumd_la_CFLAGS = \
 
 libtlm_plugin_gumd_la_LDFLAGS = -avoid-version
 libtlm_plugin_gumd_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
-    $(LIBGUM_LIBS)
+       $(abs_top_builddir)/src/common/libtlm-common.la \
+       $(LIBGUM_LIBS)
 
 all: all-am
 
index 664e77b..eedd7ef 100644 (file)
@@ -14,7 +14,7 @@ libtlm_plugin_nfc_la_CFLAGS = \
 libtlm_plugin_nfc_la_LDFLAGS = -avoid-version
 
 libtlm_plugin_nfc_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(LIBTLM_NFC_LIBS) \
        $(GLIB_LIBS)
 
index 015692b..b3c02a9 100644 (file)
@@ -123,7 +123,7 @@ am__installdirs = "$(DESTDIR)$(pluginsdir)"
 LTLIBRARIES = $(plugins_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libtlm_plugin_nfc_la_DEPENDENCIES =  \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libtlm_plugin_nfc_la_OBJECTS =  \
        libtlm_plugin_nfc_la-tlm-auth-plugin-nfc.lo
@@ -353,7 +353,7 @@ libtlm_plugin_nfc_la_CFLAGS = \
 
 libtlm_plugin_nfc_la_LDFLAGS = -avoid-version
 libtlm_plugin_nfc_la_LIBADD = \
-       $(abs_top_builddir)/src/common/libtlm-plugin.la \
+       $(abs_top_builddir)/src/common/libtlm-common.la \
        $(LIBTLM_NFC_LIBS) \
        $(GLIB_LIBS)
 
diff --git a/src/sessiond/Makefile.am b/src/sessiond/Makefile.am
new file mode 100644 (file)
index 0000000..09647a2
--- /dev/null
@@ -0,0 +1,47 @@
+include $(top_srcdir)/common.mk
+
+SUBDIRS=
+NULL=
+
+noinst_LTLIBRARIES = libtlm-session-daemon.la
+
+libtlm_session_daemon_la_CPPFLAGS = \
+    -I$(top_builddir) \
+    -I$(top_srcdir)/src \
+    -I$(top_srcdir)/include \
+    -I$(top_builddir)/src \
+    -DG_LOG_DOMAIN=\"TLM_SESSIOND\" \
+    $(TLM_CFLAGS)
+
+libtlm_session_daemon_la_LIBADD =    \
+        $(top_builddir)/src/common/libtlm-common.la \
+        $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+        -lpam \
+        $(TLM_LIBS)
+
+libtlm_session_daemon_la_SOURCES = \
+   tlm-auth-session.h \
+   tlm-auth-session.c \
+   tlm-session.h \
+   tlm-session.c \
+   tlm-session-daemon.h \
+   tlm-session-daemon.c
+
+bin_PROGRAMS = tlm-sessiond
+
+tlm_sessiond_SOURCES = \
+    main.c \
+    $(NULL)
+
+tlm_sessiond_CFLAGS = \
+    -I$(top_builddir) \
+    -I$(top_srcdir)/include/ \
+    -I$(top_srcdir)/src/ \
+    $(TLM_CFLAGS) \
+    -DG_LOG_DOMAIN=\"TLM_SESSIOND\" \
+    $(NULL)
+
+tlm_sessiond_LDADD = \
+    libtlm-session-daemon.la \
+    $(TLM_LIBS) \
+    $(NULL)
diff --git a/src/sessiond/Makefile.in b/src/sessiond/Makefile.in
new file mode 100644 (file)
index 0000000..b2db726
--- /dev/null
@@ -0,0 +1,874 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(top_srcdir)/common.mk $(srcdir)/Makefile.in \
+       $(srcdir)/Makefile.am $(top_srcdir)/depcomp
+bin_PROGRAMS = tlm-sessiond$(EXEEXT)
+subdir = src/sessiond
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libtlm_session_daemon_la_DEPENDENCIES =  \
+       $(top_builddir)/src/common/libtlm-common.la \
+       $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+       $(am__DEPENDENCIES_1)
+am_libtlm_session_daemon_la_OBJECTS =  \
+       libtlm_session_daemon_la-tlm-auth-session.lo \
+       libtlm_session_daemon_la-tlm-session.lo \
+       libtlm_session_daemon_la-tlm-session-daemon.lo
+libtlm_session_daemon_la_OBJECTS =  \
+       $(am_libtlm_session_daemon_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__objects_1 =
+am_tlm_sessiond_OBJECTS = tlm_sessiond-main.$(OBJEXT) $(am__objects_1)
+tlm_sessiond_OBJECTS = $(am_tlm_sessiond_OBJECTS)
+tlm_sessiond_DEPENDENCIES = libtlm-session-daemon.la \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+tlm_sessiond_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tlm_sessiond_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libtlm_session_daemon_la_SOURCES) $(tlm_sessiond_SOURCES)
+DIST_SOURCES = $(libtlm_session_daemon_la_SOURCES) \
+       $(tlm_sessiond_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACCOUNT_PLUGIN_NAME = @ACCOUNT_PLUGIN_NAME@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELEMENTARY_CFLAGS = @ELEMENTARY_CFLAGS@
+ELEMENTARY_LIBS = @ELEMENTARY_LIBS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBGUM_CFLAGS = @LIBGUM_CFLAGS@
+LIBGUM_LIBS = @LIBGUM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTLM_NFC_CFLAGS = @LIBTLM_NFC_CFLAGS@
+LIBTLM_NFC_LIBS = @LIBTLM_NFC_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TLM_CFLAGS = @TLM_CFLAGS@
+TLM_LIBS = @TLM_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pluginsdir = $(pkglibdir)/plugins
+SUBDIRS = 
+NULL = 
+noinst_LTLIBRARIES = libtlm-session-daemon.la
+libtlm_session_daemon_la_CPPFLAGS = \
+    -I$(top_builddir) \
+    -I$(top_srcdir)/src \
+    -I$(top_srcdir)/include \
+    -I$(top_builddir)/src \
+    -DG_LOG_DOMAIN=\"TLM_SESSIOND\" \
+    $(TLM_CFLAGS)
+
+libtlm_session_daemon_la_LIBADD = \
+        $(top_builddir)/src/common/libtlm-common.la \
+        $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+        -lpam \
+        $(TLM_LIBS)
+
+libtlm_session_daemon_la_SOURCES = \
+   tlm-auth-session.h \
+   tlm-auth-session.c \
+   tlm-session.h \
+   tlm-session.c \
+   tlm-session-daemon.h \
+   tlm-session-daemon.c
+
+tlm_sessiond_SOURCES = \
+    main.c \
+    $(NULL)
+
+tlm_sessiond_CFLAGS = \
+    -I$(top_builddir) \
+    -I$(top_srcdir)/include/ \
+    -I$(top_srcdir)/src/ \
+    $(TLM_CFLAGS) \
+    -DG_LOG_DOMAIN=\"TLM_SESSIOND\" \
+    $(NULL)
+
+tlm_sessiond_LDADD = \
+    libtlm-session-daemon.la \
+    $(TLM_LIBS) \
+    $(NULL)
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/common.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sessiond/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/sessiond/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+$(top_srcdir)/common.mk:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libtlm-session-daemon.la: $(libtlm_session_daemon_la_OBJECTS) $(libtlm_session_daemon_la_DEPENDENCIES) $(EXTRA_libtlm_session_daemon_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libtlm_session_daemon_la_OBJECTS) $(libtlm_session_daemon_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+tlm-sessiond$(EXEEXT): $(tlm_sessiond_OBJECTS) $(tlm_sessiond_DEPENDENCIES) $(EXTRA_tlm_sessiond_DEPENDENCIES) 
+       @rm -f tlm-sessiond$(EXEEXT)
+       $(AM_V_CCLD)$(tlm_sessiond_LINK) $(tlm_sessiond_OBJECTS) $(tlm_sessiond_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_session_daemon_la-tlm-auth-session.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_session_daemon_la-tlm-session-daemon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtlm_session_daemon_la-tlm-session.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm_sessiond-main.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libtlm_session_daemon_la-tlm-auth-session.lo: tlm-auth-session.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_session_daemon_la-tlm-auth-session.lo -MD -MP -MF $(DEPDIR)/libtlm_session_daemon_la-tlm-auth-session.Tpo -c -o libtlm_session_daemon_la-tlm-auth-session.lo `test -f 'tlm-auth-session.c' || echo '$(srcdir)/'`tlm-auth-session.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_session_daemon_la-tlm-auth-session.Tpo $(DEPDIR)/libtlm_session_daemon_la-tlm-auth-session.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-auth-session.c' object='libtlm_session_daemon_la-tlm-auth-session.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_session_daemon_la-tlm-auth-session.lo `test -f 'tlm-auth-session.c' || echo '$(srcdir)/'`tlm-auth-session.c
+
+libtlm_session_daemon_la-tlm-session.lo: tlm-session.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_session_daemon_la-tlm-session.lo -MD -MP -MF $(DEPDIR)/libtlm_session_daemon_la-tlm-session.Tpo -c -o libtlm_session_daemon_la-tlm-session.lo `test -f 'tlm-session.c' || echo '$(srcdir)/'`tlm-session.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_session_daemon_la-tlm-session.Tpo $(DEPDIR)/libtlm_session_daemon_la-tlm-session.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session.c' object='libtlm_session_daemon_la-tlm-session.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_session_daemon_la-tlm-session.lo `test -f 'tlm-session.c' || echo '$(srcdir)/'`tlm-session.c
+
+libtlm_session_daemon_la-tlm-session-daemon.lo: tlm-session-daemon.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtlm_session_daemon_la-tlm-session-daemon.lo -MD -MP -MF $(DEPDIR)/libtlm_session_daemon_la-tlm-session-daemon.Tpo -c -o libtlm_session_daemon_la-tlm-session-daemon.lo `test -f 'tlm-session-daemon.c' || echo '$(srcdir)/'`tlm-session-daemon.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libtlm_session_daemon_la-tlm-session-daemon.Tpo $(DEPDIR)/libtlm_session_daemon_la-tlm-session-daemon.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-session-daemon.c' object='libtlm_session_daemon_la-tlm-session-daemon.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtlm_session_daemon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtlm_session_daemon_la-tlm-session-daemon.lo `test -f 'tlm-session-daemon.c' || echo '$(srcdir)/'`tlm-session-daemon.c
+
+tlm_sessiond-main.o: main.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_sessiond_CFLAGS) $(CFLAGS) -MT tlm_sessiond-main.o -MD -MP -MF $(DEPDIR)/tlm_sessiond-main.Tpo -c -o tlm_sessiond-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm_sessiond-main.Tpo $(DEPDIR)/tlm_sessiond-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='main.c' object='tlm_sessiond-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_sessiond_CFLAGS) $(CFLAGS) -c -o tlm_sessiond-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+tlm_sessiond-main.obj: main.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_sessiond_CFLAGS) $(CFLAGS) -MT tlm_sessiond-main.obj -MD -MP -MF $(DEPDIR)/tlm_sessiond-main.Tpo -c -o tlm_sessiond-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm_sessiond-main.Tpo $(DEPDIR)/tlm_sessiond-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='main.c' object='tlm_sessiond-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_sessiond_CFLAGS) $(CFLAGS) -c -o tlm_sessiond-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-binPROGRAMS install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/sessiond/main.c b/src/sessiond/main.c
new file mode 100644 (file)
index 0000000..a29e65d
--- /dev/null
@@ -0,0 +1,153 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include <config.h>
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <stdio.h>
+#include <glib-unix.h>
+#include <glib.h>
+#include <gio/gio.h>
+#include <sys/prctl.h>
+
+#include "common/tlm-log.h"
+#include "tlm-session-daemon.h"
+
+static TlmSessionDaemon *_daemon = NULL;
+static guint _sig_source_id[3];
+
+static void
+_on_daemon_closed (gpointer data, GObject *server)
+{
+    _daemon = NULL;
+    DBG ("Daemon closed");
+    if (data) g_main_loop_quit ((GMainLoop *)data);
+}
+
+static gboolean
+_handle_quit_signal (gpointer user_data)
+{
+    GMainLoop *ml = (GMainLoop *) user_data;
+
+    g_return_val_if_fail (ml != NULL, FALSE);
+    DBG ("Received quit signal");
+    if (ml) g_main_loop_quit (ml);
+
+    return FALSE;
+}
+
+static void 
+_install_sighandlers (GMainLoop *main_loop)
+{
+    GSource *source = NULL;
+    GMainContext *ctx = g_main_loop_get_context (main_loop);
+
+    source = g_unix_signal_source_new (SIGTERM);
+    g_source_set_callback (source,
+                           _handle_quit_signal,
+                           main_loop,
+                           NULL);
+    _sig_source_id[0] = g_source_attach (source, ctx);
+
+    source = g_unix_signal_source_new (SIGINT);
+    g_source_set_callback (source,
+                           _handle_quit_signal,
+                           main_loop,
+                           NULL);
+    _sig_source_id[1] = g_source_attach (source, ctx);
+
+    source = g_unix_signal_source_new (SIGHUP);
+    g_source_set_callback (source,
+                           _handle_quit_signal,
+                           main_loop,
+                           NULL);
+    _sig_source_id[2] = g_source_attach (source, ctx);
+
+    if (prctl(PR_SET_PDEATHSIG, SIGHUP))
+        WARN ("failed to set parent death signal");
+}
+
+int main (int argc, char **argv)
+{
+    GMainLoop *main_loop = NULL;
+    gint in_fd = 0, out_fd = 1;
+
+    /* Duplicates stdin and stdout descriptors and point the descriptors
+     * to /dev/null to avoid anyone writing to descriptors
+     * */
+    in_fd = dup(0);
+    if (in_fd == -1) {
+        WARN ("Failed to dup stdin : %s(%d)", strerror(errno), errno);
+        in_fd = 0;
+    }
+    if (!freopen("/dev/null", "r+", stdin)) {
+        WARN ("Unable to redirect stdin to /dev/null");
+    }
+
+    out_fd = dup(1);
+    if (out_fd == -1) {
+        WARN ("Failed to dup stdout : %s(%d)", strerror(errno), errno);
+        out_fd = 1;
+    }
+
+    if (!freopen("/dev/null", "w+", stdout)) {
+        WARN ("Unable to redirect stdout to /dev/null");
+    }
+
+    /* Reattach stdout to stderr */
+    //dup2 (2, 1);
+
+#if !GLIB_CHECK_VERSION (2, 36, 0)
+    g_type_init ();
+#endif
+
+    DBG ("old pgid=%u", getpgrp ());
+
+    _daemon = tlm_session_daemon_new (in_fd, out_fd);
+    if (_daemon == NULL) {
+        return -1;
+    }
+
+    main_loop = g_main_loop_new (NULL, FALSE);
+    g_object_weak_ref (G_OBJECT (_daemon), _on_daemon_closed, main_loop);
+    _install_sighandlers (main_loop);
+
+    tlm_log_init(G_LOG_DOMAIN);
+
+    DBG ("Entering main event loop");
+
+    g_main_loop_run (main_loop);
+
+    if(_daemon) {
+        g_object_unref (_daemon);
+    }
+
+    if (main_loop) {
+        g_main_loop_unref (main_loop);
+    }
+    tlm_log_close (NULL);
+    return 0;
+}
similarity index 85%
rename from src/daemon/tlm-auth-session.c
rename to src/sessiond/tlm-auth-session.c
index dc92f37..f7929cc 100644 (file)
@@ -37,8 +37,9 @@
 #include <gio/gio.h>
 
 #include "tlm-auth-session.h"
-#include "tlm-log.h"
-#include "tlm-utils.h"
+#include "common/tlm-log.h"
+#include "common/tlm-utils.h"
+#include "common/tlm-error.h"
 
 G_DEFINE_TYPE (TlmAuthSession, tlm_auth_session, G_TYPE_OBJECT);
 
@@ -55,15 +56,6 @@ enum {
 };
 static GParamSpec *pspecs[N_PROPERTIES];
 
-enum {
-    SIG_AUTH_ERROR,
-    SIG_AUTH_SUCCESS,
-    SIG_SESSION_CREATED,
-    SIG_SESSION_ERROR,
-    SIG_MAX
-};
-static guint signals[SIG_MAX];
-
 struct _TlmAuthSessionPrivate
 {
     gchar *service;
@@ -121,6 +113,7 @@ tlm_auth_session_finalize (GObject *self)
     g_clear_string (&priv->service);
     g_clear_string (&priv->username);
     g_clear_string (&priv->password);
+    g_clear_string (&priv->session_id);
 
     G_OBJECT_CLASS (tlm_auth_session_parent_class)->finalize (self);
 }
@@ -192,41 +185,24 @@ tlm_auth_session_class_init (TlmAuthSessionClass *klass)
                              "authentication service",
                              "Service",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|
+                             G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
     pspecs[PROP_USERNAME] =
         g_param_spec_string ("username",
                              "username",
                              "Username",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|
+                             G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
     pspecs[PROP_PASSWORD] =
         g_param_spec_string ("password",
                              "password",
                              "Unix password for the user to login",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|
+                             G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
 
     g_object_class_install_properties (g_klass, N_PROPERTIES, pspecs);
-
-    signals[SIG_AUTH_ERROR] = g_signal_new ("auth-error", TLM_TYPE_AUTH_SESSION,
-                                G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
-                                G_TYPE_NONE, 1, G_TYPE_ERROR);
-
-    signals[SIG_AUTH_SUCCESS] = g_signal_new ("auth-success", 
-                                TLM_TYPE_AUTH_SESSION, G_SIGNAL_RUN_LAST,
-                                0, NULL, NULL, NULL, G_TYPE_NONE,
-                                0, G_TYPE_NONE);
-
-    signals[SIG_SESSION_CREATED] = g_signal_new ("session-created",
-                                TLM_TYPE_AUTH_SESSION, G_SIGNAL_RUN_LAST,
-                                0, NULL, NULL, NULL, G_TYPE_NONE,
-                                1, G_TYPE_STRING);
-
-    signals[SIG_SESSION_ERROR] = g_signal_new ("session-error",
-                                TLM_TYPE_AUTH_SESSION, G_SIGNAL_RUN_LAST,
-                                0, NULL, NULL, NULL, G_TYPE_NONE,
-                                1, G_TYPE_ERROR);
-                                
 }
 
 static void
@@ -350,13 +326,12 @@ tlm_auth_session_putenv (
 }
 
 gboolean
-tlm_auth_session_start (TlmAuthSession *auth_session)
+tlm_auth_session_authenticate (TlmAuthSession *auth_session, GError **error)
 {
     int res;
     const char *pam_tty = NULL;
     const char *pam_ruser = NULL;
-    GError *error = 0;
-    g_return_val_if_fail (auth_session && 
+    g_return_val_if_fail (auth_session &&
                 TLM_IS_AUTH_SESSION(auth_session), FALSE);
 
     TlmAuthSessionPrivate *priv = TLM_AUTH_SESSION_PRIV (auth_session);
@@ -390,15 +365,25 @@ tlm_auth_session_start (TlmAuthSession *auth_session)
     if((res = pam_authenticate (priv->pam_handle, PAM_SILENT)) != PAM_SUCCESS) {
         WARN ("PAM authentication failure: %s",
               pam_strerror (priv->pam_handle, res));
-        GError *error = g_error_new (TLM_AUTH_SESSION_ERROR,
-                                     TLM_AUTH_SESSION_PAM_ERROR,
-                                     "pam authenticaton failed : %s",
-                                     pam_strerror (priv->pam_handle, res));
-        g_signal_emit (auth_session, signals[SIG_AUTH_ERROR], 0, error);
-        g_error_free (error); 
+        if (error)
+               *error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_PAM_AUTH_FAILURE,
+                               "pam authenticaton failed : %s",
+                               pam_strerror (priv->pam_handle, res));
         return FALSE;
     }
 
+    return TRUE;
+}
+
+gboolean
+tlm_auth_session_open (TlmAuthSession *auth_session, GError **error)
+{
+    int res;
+    g_return_val_if_fail (auth_session && 
+                TLM_IS_AUTH_SESSION(auth_session), FALSE);
+
+    TlmAuthSessionPrivate *priv = TLM_AUTH_SESSION_PRIV (auth_session);
+
     /*res = pam_acct_mgmt (priv->pam_handle, 0);
     if (res == PAM_NEW_AUTHTOK_REQD) {
         res = pam_chauthtok (priv->pam_handle, PAM_CHANGE_EXPIRED_AUTHTOK);
@@ -409,8 +394,6 @@ tlm_auth_session_start (TlmAuthSession *auth_session)
         return FALSE;
     }*/
 
-    g_signal_emit (auth_session, signals[SIG_AUTH_SUCCESS], 0);
-
     res = pam_setcred (priv->pam_handle, PAM_ESTABLISH_CRED);
     if (res != PAM_SUCCESS) {
         WARN ("Failed to establish pam credentials: %s", 
@@ -433,15 +416,12 @@ tlm_auth_session_start (TlmAuthSession *auth_session)
         return FALSE;
     }
 
-    priv->session_id = _auth_session_get_logind_session_id (&error);
+    priv->session_id = _auth_session_get_logind_session_id (error);
     if (!priv->session_id) {
-        g_signal_emit (auth_session, signals[SIG_SESSION_ERROR], 0, error);
-        g_error_free (error);
         pam_close_session (priv->pam_handle, 0);
         return FALSE;
     }
-    g_signal_emit (auth_session, signals[SIG_SESSION_CREATED],
-                   0, priv->session_id);
+
     return TRUE;
 }
 
@@ -450,6 +430,7 @@ tlm_auth_session_new (const gchar *service,
                       const gchar *username,
                       const gchar *password)
 {
+    int res;
     TlmAuthSession *auth_session = TLM_AUTH_SESSION (
         g_object_new (TLM_TYPE_AUTH_SESSION,
                       "service", service,
@@ -458,7 +439,6 @@ tlm_auth_session_new (const gchar *service,
                       NULL));
     TlmAuthSessionPrivate *priv = TLM_AUTH_SESSION_PRIV (auth_session);
 
-    int res;
     struct pam_conv conv = { _auth_session_pam_conversation_cb,
                              auth_session };
     DBG ("loading pam for service '%s'", priv->service);
@@ -481,6 +461,14 @@ tlm_auth_session_get_username (TlmAuthSession *auth_session)
     return auth_session->priv->username;
 }
 
+const gchar *
+tlm_auth_session_get_sessionid (TlmAuthSession *auth_session)
+{
+    g_return_val_if_fail (TLM_IS_AUTH_SESSION (auth_session), NULL);
+
+    return auth_session->priv->session_id;
+}
+
 gchar **
 tlm_auth_session_get_envlist (TlmAuthSession *auth_session)
 {
similarity index 91%
rename from src/daemon/tlm-auth-session.h
rename to src/sessiond/tlm-auth-session.h
index 41fa4b9..db75386 100644 (file)
@@ -41,13 +41,6 @@ G_BEGIN_DECLS
 #define TLM_AUTH_SESSION_IS_CLASS(kls)  (G_TYPE_CHECK_CLASS_TYPE((kls), \
                                  TLM_TYPE_AUTH_SESSION))
 
-
-typedef enum {
-    TLM_AUTH_SESSION_PAM_ERROR = 1,
-} TlmAuthSessionError;
-
-#define TLM_AUTH_SESSION_ERROR g_quark_from_string("tlm-auth-session-error")
-
 typedef struct _TlmAuthSession TlmAuthSession;
 typedef struct _TlmAuthSessionClass TlmAuthSessionClass;
 typedef struct _TlmAuthSessionPrivate TlmAuthSessionPrivate;
@@ -77,11 +70,17 @@ tlm_auth_session_putenv (TlmAuthSession *auth_session,
                          const gchar *value);
 
 gboolean
-tlm_auth_session_start (TlmAuthSession *auth_session);
+tlm_auth_session_authenticate (TlmAuthSession *auth_session, GError **error);
+
+gboolean
+tlm_auth_session_open (TlmAuthSession *auth_session, GError **error);
 
 const gchar *
 tlm_auth_session_get_username (TlmAuthSession *auth_session);
 
+const gchar *
+tlm_auth_session_get_sessionid (TlmAuthSession *auth_session);
+
 gchar **
 tlm_auth_session_get_envlist (TlmAuthSession *auth_session);
 
diff --git a/src/sessiond/tlm-session-daemon.c b/src/sessiond/tlm-session-daemon.c
new file mode 100644 (file)
index 0000000..d9257cc
--- /dev/null
@@ -0,0 +1,289 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "common/tlm-log.h"
+#include "common/tlm-error.h"
+#include "common/tlm-pipe-stream.h"
+#include "common/dbus/tlm-dbus-session-gen.h"
+#include "common/dbus/tlm-dbus-utils.h"
+#include "common/dbus/tlm-dbus.h"
+#include "tlm-session-daemon.h"
+#include "tlm-session.h"
+
+struct _TlmSessionDaemonPrivate
+{
+    GDBusConnection *connection;
+    TlmDbusSession *dbus_session;
+    TlmSession *session;
+};
+
+G_DEFINE_TYPE (TlmSessionDaemon, tlm_session_daemon, G_TYPE_OBJECT)
+
+
+#define TLM_SESSION_DAEMON_GET_PRIV(obj) \
+    G_TYPE_INSTANCE_GET_PRIVATE ((obj), TLM_TYPE_SESSION_DAEMON,\
+            TlmSessionDaemonPrivate)
+
+static void
+_dispose (GObject *object)
+{
+    TlmSessionDaemon *self = TLM_SESSION_DAEMON (object);
+    if (self->priv->dbus_session) {
+        g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (
+                self->priv->dbus_session));
+        g_object_unref (self->priv->dbus_session);
+        self->priv->dbus_session = NULL;
+    }
+
+    if (self->priv->connection) {
+        g_object_unref (self->priv->connection);
+        self->priv->connection = NULL;
+    }
+
+    if (self->priv->session) {
+        g_object_unref (self->priv->session);
+        self->priv->session = NULL;
+    }
+
+    G_OBJECT_CLASS (tlm_session_daemon_parent_class)->dispose (object);
+}
+
+static void
+_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (tlm_session_daemon_parent_class)->finalize (object);
+}
+
+static void
+tlm_session_daemon_class_init (
+        TlmSessionDaemonClass *klass)
+{
+    GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+    g_type_class_add_private (object_class, sizeof (
+            TlmSessionDaemonPrivate));
+
+    object_class->dispose = _dispose;
+    object_class->finalize = _finalize;
+
+}
+
+static void
+tlm_session_daemon_init (
+        TlmSessionDaemon *self)
+{
+    self->priv = TLM_SESSION_DAEMON_GET_PRIV(self);
+    self->priv->connection = NULL;
+    self->priv->dbus_session = NULL;
+    self->priv->session = NULL;
+}
+
+static void
+_on_connection_closed (
+        GDBusConnection *connection,
+        gboolean         remote_peer_vanished,
+        GError          *error,
+        gpointer         user_data)
+{
+    TlmSessionDaemon *daemon = TLM_SESSION_DAEMON (user_data);
+
+    g_signal_handlers_disconnect_by_func (connection, _on_connection_closed,
+            user_data);
+    DBG("dbus connection(%p) closed (peer vanished : %d)", connection,
+            remote_peer_vanished);
+    if (error) {
+       DBG("...reason : %s", error->message);
+    }
+    g_object_unref (daemon);
+}
+
+static gboolean
+_handle_session_create_from_dbus (
+        TlmSessionDaemon *self,
+        GDBusMethodInvocation *invocation,
+        const gchar *password,
+        GVariant *environment,
+        gpointer user_data)
+{
+    g_return_val_if_fail (self && TLM_IS_SESSION_DAEMON (self), FALSE);
+    gchar *seatid = NULL;
+    gchar *service = NULL;
+    gchar *username = NULL;
+    GHashTable *data = NULL;
+
+    tlm_dbus_session_complete_session_create (
+            self->priv->dbus_session, invocation);
+
+    gchar *data_str = g_variant_print(environment, TRUE);
+    DBG("%s", data_str);
+    g_free(data_str);
+
+    data = tlm_dbus_utils_hash_table_from_variant (environment);
+    g_object_get (self->priv->dbus_session, "seatid", &seatid,
+               "username", &username, "service", &service, NULL);
+
+    tlm_session_start (self->priv->session, seatid, service, username,
+               password, data);
+
+    g_hash_table_unref (data);
+    g_free (seatid);
+    g_free (service);
+    g_free (username);
+    return TRUE;
+}
+
+static gboolean
+_handle_session_terminate_from_dbus (
+        TlmSessionDaemon *self,
+        GDBusMethodInvocation *invocation,
+        gpointer user_data)
+{
+    g_return_val_if_fail (self && TLM_IS_SESSION_DAEMON (self), FALSE);
+
+    tlm_dbus_session_complete_session_terminate (self->priv->dbus_session,
+            invocation);
+
+    tlm_session_terminate (self->priv->session);
+    return TRUE;
+}
+
+static void
+_handle_session_created_from_session (
+        TlmSessionDaemon *self,
+        const gchar *sessionid,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_DAEMON (self));
+
+    DBG ("sessionid: %s", sessionid);
+
+    g_object_set (G_OBJECT (self->priv->dbus_session), "sessionid", sessionid,
+            NULL);
+    tlm_dbus_session_emit_session_created (self->priv->dbus_session, sessionid);
+}
+
+static void
+_handle_session_terminated_from_session (
+        TlmSessionDaemon *self,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_DAEMON (self));
+
+    tlm_dbus_session_emit_session_terminated (self->priv->dbus_session);
+}
+
+static void
+_handle_authenticated_from_session (
+        TlmSessionDaemon *self,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_DAEMON (self));
+
+    tlm_dbus_session_emit_authenticated (self->priv->dbus_session);
+}
+
+static void
+_handle_error_from_session (
+        TlmSessionDaemon *self,
+        GError *gerror,
+        gpointer user_data)
+{
+    g_return_if_fail (self && TLM_IS_SESSION_DAEMON (self));
+
+    GVariant *error = tlm_error_to_variant (gerror);
+    gchar *data_str = g_variant_print (error, TRUE);
+    DBG("%s", data_str);
+    g_free (data_str);
+
+    tlm_dbus_session_emit_error (self->priv->dbus_session, error);
+}
+
+TlmSessionDaemon *
+tlm_session_daemon_new (
+        gint in_fd,
+        gint out_fd)
+{
+    GError *error = NULL;
+    TlmPipeStream *stream = NULL;
+
+    TlmSessionDaemon *daemon = TLM_SESSION_DAEMON (g_object_new (
+            TLM_TYPE_SESSION_DAEMON, NULL));
+
+    /* Load session */
+    daemon->priv->session = tlm_session_new ();
+    if (!daemon->priv->session) {
+        DBG ("failed to create session object");
+        g_object_unref (daemon);
+        return NULL;
+    }
+    tlm_log_init(G_LOG_DOMAIN);
+    /* Create dbus connection */
+    stream = tlm_pipe_stream_new (in_fd, out_fd, TRUE);
+    daemon->priv->connection = g_dbus_connection_new_sync (G_IO_STREAM (stream),
+            NULL, G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING, NULL, NULL,
+            NULL);
+    g_object_unref (stream);
+
+    /* Create dbus object */
+    daemon->priv->dbus_session =
+            tlm_dbus_session_skeleton_new ();
+
+    /* Connect dbus remote session signals to handlers */
+    g_signal_connect_swapped (daemon->priv->dbus_session,
+            "handle-session-create", G_CALLBACK (
+                _handle_session_create_from_dbus), daemon);
+    g_signal_connect_swapped (daemon->priv->dbus_session,
+            "handle-session-terminate", G_CALLBACK(
+                _handle_session_terminate_from_dbus), daemon);
+
+    /* Connect session signals to handlers */
+    g_signal_connect_swapped (daemon->priv->session, "session-created",
+            G_CALLBACK (_handle_session_created_from_session), daemon);
+    g_signal_connect_swapped (daemon->priv->session, "session-terminated",
+            G_CALLBACK(_handle_session_terminated_from_session), daemon);
+    g_signal_connect_swapped (daemon->priv->session, "authenticated",
+            G_CALLBACK(_handle_authenticated_from_session), daemon);
+    g_signal_connect_swapped (daemon->priv->session, "session-error",
+            G_CALLBACK(_handle_error_from_session), daemon);
+
+    g_signal_connect (daemon->priv->connection, "closed",
+            G_CALLBACK(_on_connection_closed), daemon);
+
+    g_dbus_interface_skeleton_export (
+                G_DBUS_INTERFACE_SKELETON(daemon->priv->dbus_session),
+                daemon->priv->connection, TLM_SESSION_OBJECTPATH, &error);
+    if (error) {
+        DBG ("failed to register object: %s", error->message);
+        g_error_free (error);
+        g_object_unref (daemon);
+        return NULL;
+    }
+    DBG("Started session daemon '%p' at path '%s' on conneciton '%p'",
+            daemon, TLM_SESSION_OBJECTPATH, daemon->priv->connection);
+
+    g_dbus_connection_start_message_processing (daemon->priv->connection);
+
+    return daemon;
+}
diff --git a/src/sessiond/tlm-session-daemon.h b/src/sessiond/tlm-session-daemon.h
new file mode 100644 (file)
index 0000000..cbfe659
--- /dev/null
@@ -0,0 +1,70 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@intel.com>
+ *
+ * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#ifndef __TLM_SESSION_DAEMON_H_
+#define __TLM_SESSION_DAEMON_H_
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define TLM_TYPE_SESSION_DAEMON  (tlm_session_daemon_get_type())
+#define TLM_SESSION_DAEMON(obj)  (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+        TLM_TYPE_SESSION_DAEMON, TlmSessionDaemon))
+#define TLM_SESSION_DAEMON_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST((klass), \
+        TLM_TYPE_SESSION_DAEMON, TlmSessionDaemonClass))
+#define TLM_IS_SESSION_DAEMON(obj)  (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+        TLM_TYPE_SESSION_DAEMON))
+#define TLM_IS_SESSION_DAEMON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
+        TLM_TYPE_SESSION_DAEMON))
+#define TLM_SESSION_DAEMON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),\
+        TLM_TYPE_SESSION_DAEMON, TlmSessionDaemonClass))
+
+typedef struct _TlmSessionDaemon TlmSessionDaemon;
+typedef struct _TlmSessionDaemonClass TlmSessionDaemonClass;
+typedef struct _TlmSessionDaemonPrivate TlmSessionDaemonPrivate;
+
+struct _TlmSessionDaemon
+{
+    GObject parent;
+
+    /* priv */
+    TlmSessionDaemonPrivate *priv;
+};
+
+struct _TlmSessionDaemonClass
+{
+    GObjectClass parent_class;
+};
+
+GType tlm_session_daemon_get_type();
+
+TlmSessionDaemon *
+tlm_session_daemon_new (
+        gint in_fd,
+        gint out_fd);
+
+#endif /* __TLM_SESSION_DAEMON_H_ */
similarity index 65%
rename from src/daemon/tlm-session.c
rename to src/sessiond/tlm-session.c
index 27db85f..9c2339d 100644 (file)
@@ -7,6 +7,7 @@
  *
  * Contact: Amarnath Valluri <amarnath.valluri@linux.intel.com>
  *          Jussi Laako <jussi.laako@linux.intel.com>
+ *          Imran Zaman <imran.zaman@intel.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
 #include <sys/stat.h>
 #include <sys/wait.h>
 #include <sys/ioctl.h>
-#include <utmp.h>
-#include <paths.h>
 #include <ctype.h>
 #include <sys/socket.h>
 #include <netdb.h>
 
 #include "tlm-session.h"
 #include "tlm-auth-session.h"
-#include "tlm-log.h"
-#include "tlm-utils.h"
-#include "tlm-config-general.h"
+#include "common/tlm-log.h"
+#include "common/tlm-utils.h"
+#include "common/tlm-error.h"
+#include "common/tlm-config-general.h"
 
 G_DEFINE_TYPE (TlmSession, tlm_session, G_TYPE_OBJECT);
 
 #define TLM_SESSION_PRIV(obj) \
     G_TYPE_INSTANCE_GET_PRIVATE ((obj), TLM_TYPE_SESSION, TlmSessionPrivate)
 
-#define HOST_NAME_SIZE 256
-
 enum {
     PROP_0,
     PROP_CONFIG,
     PROP_SEAT,
     PROP_SERVICE,
-    PROP_NOTIFY_FD,
     PROP_USERNAME,
     PROP_ENVIRONMENT,
     N_PROPERTIES
 };
 static GParamSpec *pspecs[N_PROPERTIES];
 
+enum {
+    SIG_SESSION_CREATED,
+    SIG_SESSION_TERMINATED,
+    SIG_AUTHENTICATED,
+    SIG_SESSION_ERROR,
+    SIG_MAX
+};
+static guint signals[SIG_MAX];
+
 struct _TlmSessionPrivate
 {
     TlmConfig *config;
-    gint notify_fd;
     pid_t child_pid;
     uid_t tty_uid;
     gid_t tty_gid;
@@ -84,24 +89,54 @@ struct _TlmSessionPrivate
     TlmAuthSession *auth_session;
     int last_sig;
     guint timer_id;
+    guint child_watch_id;
+    gchar *sessionid;
+    gboolean can_emit_signal;
+    gboolean is_child_up;
 };
 
-static GHashTable *notify_table = NULL;
-
 static void
-tlm_session_dispose (GObject *self)
+_clear_session (TlmSession *session)
 {
-    TlmSession *session = TLM_SESSION(self);
-    DBG("disposing session: %s", session->priv->service);
+    tlm_session_reset_tty (session);
 
-    if (session->priv->timer_id)
+    if (session->priv->timer_id) {
         g_source_remove (session->priv->timer_id);
+        session->priv->timer_id = 0;
+    }
+
+    if (session->priv->child_watch_id) {
+        g_source_remove (session->priv->child_watch_id);
+        session->priv->child_watch_id = 0;
+    }
+
+    if (session->priv->auth_session)
+        g_clear_object (&session->priv->auth_session);
 
-    g_clear_object (&session->priv->auth_session);
     if (session->priv->env_hash) {
         g_hash_table_unref (session->priv->env_hash);
         session->priv->env_hash = NULL;
     }
+    g_clear_string (&session->priv->seat_id);
+    g_clear_string (&session->priv->service);
+    g_clear_string (&session->priv->username);
+    g_clear_string (&session->priv->sessionid);
+}
+
+static void
+tlm_session_dispose (GObject *self)
+{
+    TlmSession *session = TLM_SESSION(self);
+    DBG("disposing session: %s", session->priv->service);
+    session->priv->can_emit_signal = FALSE;
+
+    if (session->priv->is_child_up) {
+        tlm_session_terminate (session);
+        while (session->priv->is_child_up)
+            g_main_context_iteration(NULL, TRUE);
+        DBG ("child DESTROYED");
+    }
+
     g_clear_object (&session->priv->config);
 
     G_OBJECT_CLASS (tlm_session_parent_class)->dispose (self);
@@ -110,12 +145,7 @@ tlm_session_dispose (GObject *self)
 static void
 tlm_session_finalize (GObject *self)
 {
-    TlmSession *session = TLM_SESSION(self);
-
-    g_clear_string (&session->priv->seat_id);
-    g_clear_string (&session->priv->service);
-    g_clear_string (&session->priv->username);
-
+    //TlmSession *session = TLM_SESSION(self);
     G_OBJECT_CLASS (tlm_session_parent_class)->finalize (self);
 }
 
@@ -139,9 +169,6 @@ _session_set_property (GObject *obj,
         case PROP_SERVICE: 
             priv->service = g_value_dup_string (value);
             break;
-        case PROP_NOTIFY_FD:
-            priv->notify_fd = g_value_get_int (value);
-            break;
         case PROP_USERNAME:
             priv->username = g_value_dup_string (value);
             break;
@@ -174,9 +201,6 @@ _session_get_property (GObject *obj,
         case PROP_SERVICE: 
             g_value_set_string (value, priv->service);
             break;
-        case PROP_NOTIFY_FD:
-            g_value_set_int (value, priv->notify_fd);
-            break;
         case PROP_USERNAME:
             g_value_set_string (value, priv->username);
             break;
@@ -205,7 +229,8 @@ tlm_session_class_init (TlmSessionClass *klass)
                              "config object",
                              "Configuration object",
                              TLM_TYPE_CONFIG,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|
+                             G_PARAM_STATIC_STRINGS);
     pspecs[PROP_SEAT] =
         g_param_spec_string ("seat",
                              "seat id",
@@ -217,28 +242,41 @@ tlm_session_class_init (TlmSessionClass *klass)
                              "authentication service",
                              "PAM service",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
-    pspecs[PROP_NOTIFY_FD] =
-        g_param_spec_int ("notify-fd",
-                          "notification descriptor",
-                          "SIGCHLD notification file descriptor",
-                          0,
-                          INT_MAX,
-                          0,
-                          G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
     pspecs[PROP_USERNAME] =
         g_param_spec_string ("username",
                              "user name",
                              "Unix user name of user to login",
                              NULL,
-                             G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                             G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
     pspecs[PROP_ENVIRONMENT] =
         g_param_spec_pointer ("environment",
                               "environment variables",
                               "Environment variables for the session",
-                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+                              G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
 
     g_object_class_install_properties (g_klass, N_PROPERTIES, pspecs);
+
+    signals[SIG_SESSION_CREATED] = g_signal_new ("session-created",
+                                                       TLM_TYPE_SESSION, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                1, G_TYPE_STRING);
+
+    signals[SIG_SESSION_TERMINATED] = g_signal_new ("session-terminated",
+                                                       TLM_TYPE_SESSION, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                0, G_TYPE_NONE);
+
+    signals[SIG_AUTHENTICATED] = g_signal_new ("authenticated",
+                                                       TLM_TYPE_SESSION, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                0, G_TYPE_NONE);
+
+    signals[SIG_SESSION_ERROR] = g_signal_new ("session-error",
+                                                       TLM_TYPE_SESSION, G_SIGNAL_RUN_LAST,
+                                0, NULL, NULL, NULL, G_TYPE_NONE,
+                                1, G_TYPE_ERROR);
+
 }
 
 static void
@@ -249,15 +287,14 @@ tlm_session_init (TlmSession *session)
     priv->service = NULL;
     priv->env_hash = NULL;
     priv->auth_session = NULL;
+    priv->sessionid = NULL;
+    priv->child_watch_id = 0;
+    priv->is_child_up = FALSE;
+    priv->can_emit_signal = TRUE;
+    priv->config = tlm_config_new ();
 
     session->priv = priv;
 
-    if (!notify_table) {
-        notify_table = g_hash_table_new (g_direct_hash,
-                                         g_direct_equal);
-        /* NOTE: the notify_table won't be freed ever */
-    }
-
     struct stat tty_stat;
 
     if (fstat (0, &tty_stat) == 0) {
@@ -278,34 +315,9 @@ static void
 _setenv_to_session (gpointer key, gpointer val, gpointer user_data)
 {
     /*TlmSessionPrivate *priv = (TlmSessionPrivate *) user_data;*/
-
     setenv ((const char *) key, (const char *) val, 1);
 }
 
-static void
-_session_on_auth_error (
-    TlmAuthSession *session, 
-    GError *error, 
-    gpointer userdata)
-{
-    if (!error)
-        WARN ("ERROR but error is NULL");
-    else
-        WARN ("ERROR : %s", error->message);
-}
-
-static void
-_session_on_session_error (
-    TlmAuthSession *session, 
-    GError *error, 
-    gpointer userdata)
-{
-    if (!error)
-        WARN ("ERROR but error is NULL");
-    else
-        WARN ("ERROR : %s", error->message);
-}
-
 static gboolean
 _set_terminal (TlmSessionPrivate *priv)
 {
@@ -414,197 +426,28 @@ _set_environment (TlmSessionPrivate *priv)
 }
 
 static void
-_signal_action (
-    int signal_no,
-    siginfo_t *signal_info,
-    void *context)
+_on_child_down_cb (
+        GPid  pid,
+        gint  status,
+        gpointer data)
 {
-    int status = 0;
-    gpointer notify_ptr;
-
-    switch (signal_no) {
-        case SIGCHLD:
-            DBG ("SIGCHLD received for %u status %d",
-                 signal_info->si_pid,
-                 signal_info->si_status);
-            waitpid (signal_info->si_pid, &status, WNOHANG);
-            DBG ("child %u waitpid() status %d", signal_info->si_pid, status);
-            notify_ptr = g_hash_table_lookup (notify_table,
-                                              GUINT_TO_POINTER (signal_info->si_pid));
-            if (!notify_ptr) {
-                WARN ("no notify entry found for child pid %u",
-                      signal_info->si_pid);
-                return;
-            }
-            if (write (GPOINTER_TO_INT (notify_ptr),
-                   &signal_info->si_pid,
-                   sizeof (pid_t)) < (ssize_t) sizeof (pid_t))
-                WARN ("failed to send notification");
-            g_hash_table_remove (notify_table, notify_ptr);
-            break;
-        default:
-            DBG ("%s received for %u",
-                 strsignal (signal_no),
-                 signal_info->si_pid);
-    }
-}
+    g_spawn_close_pid (pid);
 
-static gchar *
-_get_tty_id (
-        const gchar *tty_name)
-{
-    gchar *id = NULL;
-    const gchar *tmp = tty_name;
-
-    while (tmp) {
-        if (isdigit (*tmp)) {
-            id = g_strdup (tmp);
-            break;
-        }
-        tmp++;
-    }
-    return id;
-}
-
-static gchar *
-_get_host_address (
-        const gchar *hostname)
-{
-    gchar *hostaddress = NULL;
-    struct addrinfo hints, *info = NULL;
-
-    if (!hostname) return NULL;
-
-    memset (&hints, 0, sizeof (hints));
-    hints.ai_flags = AI_ADDRCONFIG;
-
-    if (getaddrinfo (hostname, NULL, &hints, &info) == 0) {
-        if (info) {
-            if (info->ai_family == AF_INET) {
-                struct sockaddr_in *sa = (struct sockaddr_in *) info->ai_addr;
-                hostaddress = g_malloc0 (sizeof(sa->sin_addr));
-                memcpy (hostaddress, &(sa->sin_addr), sizeof (sa->sin_addr));
-            } else if (info->ai_family == AF_INET6) {
-                struct sockaddr_in6 *sa = (struct sockaddr_in6 *) info->ai_addr;
-                hostaddress = g_malloc0 (sizeof(sa->sin6_addr));
-                memcpy (hostaddress, &(sa->sin6_addr), sizeof (sa->sin6_addr));
-            }
-            freeaddrinfo (info);
-        }
-    }
-    return hostaddress;
-}
-
-static gboolean
-_is_tty_same (
-        const gchar *tty1_name,
-        const gchar *tty2_name)
-{
-    gchar *tty1 = NULL, *tty2 = NULL;
-    gboolean res = FALSE;
-
-    if (tty1_name == tty2_name) return TRUE;
-    if (!tty1_name || !tty2_name) return FALSE;
+    TlmSession *session = TLM_SESSION (data);
 
-    if (*tty1_name == '/') tty1 = g_strdup (tty1_name);
-    else tty1 = g_strdup_printf ("/dev/%s", tty1_name);
-    if (*tty2_name == '/') tty2 = g_strdup (tty2_name);
-    else tty2 = g_strdup_printf ("/dev/%s", tty2_name);
+    DBG ("Sessiond(%p) with pid (%d) closed with status %d", session, pid,
+            status);
 
-    res = (g_strcmp0 (tty1_name, tty2_name) == 0);
-
-    g_free (tty1);
-    g_free (tty2);
-    return res;
-}
-
-static gchar *
-_get_host_name ()
-{
-    gchar *name = g_malloc0 (HOST_NAME_SIZE);
-    if (gethostname (name, HOST_NAME_SIZE) != 0) {
-        g_free (name);
-        return NULL;
-    }
-    return name;
+    session->priv->child_pid = 0;
+    session->priv->is_child_up = FALSE;
+    _clear_session (session);
+    if (session->priv->can_emit_signal)
+        g_signal_emit (session, signals[SIG_SESSION_TERMINATED], 0);
 }
 
 static void
-_log_utmp_entry (TlmSession *self)
-{
-    struct timeval tv;
-    pid_t pid;
-    struct utmp ut_ent;
-    struct utmp *ut_tmp = NULL;
-    gchar *hostname = NULL, *hostaddress = NULL;
-    const gchar *tty_name = NULL;
-    gchar *tty_no_dev_name = NULL, *tty_id = NULL;
-
-    DBG ("Log session entry to utmp/wtmp");
-
-    hostname = _get_host_name ();
-    hostaddress = _get_host_address (hostname);
-    tty_name = ttyname (0);
-    if (tty_name) {
-        tty_no_dev_name = g_strdup (strncmp(tty_name, "/dev/", 5) == 0 ?
-            tty_name + 5 : tty_name);
-    }
-    tty_id = _get_tty_id (tty_no_dev_name);
-    pid = getpid ();
-    utmpname (_PATH_UTMP);
-
-    setutent ();
-    while ((ut_tmp = getutent())) {
-        if ( (ut_tmp->ut_pid == pid) &&
-             (ut_tmp->ut_id[0] != '\0') &&
-             (ut_tmp->ut_type == LOGIN_PROCESS ||
-                     ut_tmp->ut_type == USER_PROCESS) &&
-             (_is_tty_same (ut_tmp->ut_line, tty_name))) {
-            break;
-        }
-    }
-
-    if (ut_tmp) memcpy (&ut_ent, ut_tmp, sizeof (ut_ent));
-    else        memset (&ut_ent, 0, sizeof (ut_ent));
-
-    ut_ent.ut_type = USER_PROCESS;
-    ut_ent.ut_pid = pid;
-    if (tty_id)
-        strncpy (ut_ent.ut_id, tty_id, sizeof (ut_ent.ut_id));
-    if (self->priv->username)
-        strncpy (ut_ent.ut_user, self->priv->username, sizeof (ut_ent.ut_user));
-    if (tty_no_dev_name)
-        strncpy (ut_ent.ut_line, tty_no_dev_name, sizeof (ut_ent.ut_line));
-    if (hostname)
-        strncpy (ut_ent.ut_host, hostname, sizeof (ut_ent.ut_host));
-    if (hostaddress)
-        memcpy (&ut_ent.ut_addr_v6, hostaddress, sizeof (ut_ent.ut_addr_v6));
-
-    ut_ent.ut_session = getsid (0);
-    gettimeofday (&tv, NULL);
-#ifdef _HAVE_UT_TV
-    ut_ent.ut_tv.tv_sec = tv.tv_sec;
-    ut_ent.ut_tv.tv_usec = tv.tv_usec;
-#else
-    ut_ent.ut_time = tv.tv_sec;
-#endif
-
-    pututline (&ut_ent);
-    endutent ();
-
-    updwtmp (_PATH_WTMP, &ut_ent);
-
-    g_free (hostaddress);
-    g_free (hostname);
-    g_free (tty_no_dev_name);
-    g_free (tty_id);
-}
-
-static void
-_session_on_session_created (
-    TlmAuthSession *auth_session,
-    const gchar *id,
-    gpointer userdata)
+_exec_user_session (
+               TlmSession *session)
 {
     gint i;
     const gchar *pattern = "('.*?'|\".*?\"|\\S+)";
@@ -613,37 +456,34 @@ _session_on_session_created (
     const char *env_shell = NULL;
     gchar **args = NULL;
     gchar **args_iter = NULL;
-    TlmSession *session = TLM_SESSION (userdata);
     TlmSessionPrivate *priv = session->priv;
     gchar **temp_strv = NULL;
 
     priv = session->priv;
     if (!priv->username)
-        priv->username =
-            g_strdup (tlm_auth_session_get_username (auth_session));
-    DBG ("session ID : %s", id);
-    _log_utmp_entry (session);
+        priv->username = g_strdup (tlm_auth_session_get_username (
+                       priv->auth_session));
+    DBG ("session ID : %s", priv->sessionid);
 
     priv->child_pid = fork ();
     if (priv->child_pid) {
         DBG ("establish handler for the child pid %u", priv->child_pid);
-        struct sigaction sa;
-        memset (&sa, 0x00, sizeof (sa));
-        sa.sa_sigaction = _signal_action;
-        sigaddset (&sa.sa_mask, SIGCHLD);
-        sa.sa_flags = SA_SIGINFO | SA_RESTART;
-        if (sigaction (SIGCHLD, &sa, NULL))
-            WARN ("Failed to establish watch for %u", priv->child_pid);
-
-        g_hash_table_insert (notify_table,
-                             GUINT_TO_POINTER (priv->child_pid),
-                             GINT_TO_POINTER (priv->notify_fd));
+        session->priv->child_watch_id = g_child_watch_add (priv->child_pid,
+                    (GChildWatchFunc)_on_child_down_cb, session);
+        session->priv->is_child_up = TRUE;
         return;
     }
 
     /* ==================================
      * this is child process here onwards
      * ================================== */
+    gint open_max;
+    gint fd;
+
+    //close all open descriptors other than stdin, stdout, stderr
+    open_max = sysconf (_SC_OPEN_MAX);
+    for (fd = 3; fd < open_max; fd++)
+       fcntl (fd, F_SETFD, FD_CLOEXEC);
 
     uid_t target_uid = tlm_user_get_uid (priv->username);
     gid_t target_gid = tlm_user_get_gid (priv->username);
@@ -659,10 +499,12 @@ _session_on_session_created (
         if (setpgrp ())
             WARN ("setpgrp() failed: %s", strerror (errno));
     }*/
+
     DBG ("old pgid=%u", getpgrp ());
     if (setsid () == (pid_t) -1)
         WARN ("setsid() failed: %s", strerror (errno));
     DBG ("new pgid=%u", getpgrp());
+
     if (tlm_config_get_boolean (priv->config,
                                 TLM_CONFIG_GENERAL,
                                 TLM_CONFIG_GENERAL_SETUP_TERMINAL,
@@ -763,56 +605,72 @@ _session_on_session_created (
     exit (0);
 }
 
-static gboolean
-_start_session (TlmSession *session,
-                const gchar *password)
+TlmSession *
+tlm_session_new ()
 {
-    g_return_val_if_fail (session && TLM_IS_SESSION(session), FALSE);
+    DBG ("Session New");
+    return g_object_new (TLM_TYPE_SESSION, NULL);
+}
+
+gboolean
+tlm_session_start (TlmSession *session,
+                   const gchar *seat_id, const gchar *service,
+                   const gchar *username, const gchar *password,
+                   GHashTable *environment)
+{
+       GError *error = NULL;
+       g_return_val_if_fail (session && TLM_IS_SESSION(session), FALSE);
     TlmSessionPrivate *priv = TLM_SESSION_PRIV(session);
 
-    priv->auth_session =
-        tlm_auth_session_new (priv->service,
-                              priv->username,
-                              password);
+    g_object_set (G_OBJECT (session), "seat", seat_id, "service", service,
+            "username", username, "environment", environment, NULL);
 
-    if (!priv->auth_session) return FALSE;
+    priv->auth_session = tlm_auth_session_new (priv->service,
+            priv->username, password);
 
-    g_signal_connect (priv->auth_session, "auth-error",
-                G_CALLBACK(_session_on_auth_error), (gpointer)session);
-    g_signal_connect (priv->auth_session, "session-created",
-                G_CALLBACK(_session_on_session_created), (gpointer)session);
-    g_signal_connect (priv->auth_session, "session-error",
-                G_CALLBACK (_session_on_session_error), (gpointer)session);
+    if (!priv->auth_session) {
+       error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_SESSION_CREATION_FAILURE,
+                       "Unable to create PAM sesssion");
+       g_signal_emit (session, signals[SIG_SESSION_ERROR], 0, error);
+       g_error_free (error);
+       return FALSE;
+    }
 
     tlm_auth_session_putenv (priv->auth_session, "XDG_SEAT", priv->seat_id);
 
-    return tlm_auth_session_start (priv->auth_session);
-}
-
-TlmSession *
-tlm_session_new (TlmConfig *config,
-                 const gchar *seat_id, const gchar *service,
-                 const gchar *username, const gchar *password,
-                 GHashTable *environment, gint notify_fd)
-{
-    DBG ("Session New");
-
-    TlmSession *session =
-        g_object_new (TLM_TYPE_SESSION,
-                      "config", config,
-                      "seat", seat_id,
-                      "service", service,
-                      "notify-fd", notify_fd,
-                      "username", username,
-                      "environment", environment,
-                      NULL);
-    if (!_start_session (session, password)) {
-        WARN ("Session startup failed");
-        g_object_unref (session);
-        return NULL;
+    if (!tlm_auth_session_authenticate (priv->auth_session, &error)) {
+       if (error) {
+           //consistant error message flow
+               GError *err = TLM_GET_ERROR_FOR_ID (
+                       TLM_ERROR_SESSION_CREATION_FAILURE,
+                               "%d:%s", error->code, error->message);
+               g_error_free (error);
+               error = err;
+       } else {
+            error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_SESSION_CREATION_FAILURE,
+                    "Unable to authenticate PAM sesssion");
+       }
+       g_signal_emit (session, signals[SIG_SESSION_ERROR], 0, error);
+       g_error_free (error);
+       return FALSE;
     }
+    g_signal_emit (session, signals[SIG_AUTHENTICATED], 0);
 
-    return session;
+    if (!tlm_auth_session_open (priv->auth_session, &error)) {
+       if (!error) {
+               error = TLM_GET_ERROR_FOR_ID (TLM_ERROR_SESSION_CREATION_FAILURE,
+                               "Unable to open PAM sesssion");
+       }
+       g_signal_emit (session, signals[SIG_SESSION_ERROR], 0, error);
+       g_error_free (error);
+       return FALSE;
+    }
+    priv->sessionid = g_strdup (tlm_auth_session_get_sessionid (
+               priv->auth_session));
+    tlm_utils_log_utmp_entry (priv->username);
+    _exec_user_session (session);
+    g_signal_emit (session, signals[SIG_SESSION_CREATED], 0, priv->sessionid);
+    return TRUE;
 }
 
 static gboolean
@@ -845,6 +703,15 @@ _terminate_timeout (gpointer user_data)
             DBG ("child %u didn't respond to SIGKILL, process is stuck in kernel",
                  priv->child_pid);
             priv->timer_id = 0;
+            _clear_session (session);
+            if (session->priv->can_emit_signal) {
+                GError *error = TLM_GET_ERROR_FOR_ID (
+                        TLM_ERROR_SESSION_TERMINATION_FAILURE,
+                        "Unable to terminate session - process is stuck"
+                        " in kernel");
+                g_signal_emit (session, signals[SIG_SESSION_ERROR], 0, error);
+                g_error_free (error);
+            }
             return G_SOURCE_REMOVE;
         default:
             WARN ("%d has unknown signaling state %d",
@@ -862,6 +729,14 @@ tlm_session_terminate (TlmSession *session)
 
     DBG ("Session Terminate");
 
+    if (!priv->is_child_up) {
+        DBG ("no child process is running - closing pam session");
+        _clear_session (session);
+        if (session->priv->can_emit_signal)
+            g_signal_emit (session, signals[SIG_SESSION_TERMINATED], 0);
+        return;
+    }
+
     if (killpg (getpgid (priv->child_pid), SIGHUP) < 0)
         WARN ("kill(%u, SIGHUP): %s",
               getpgid (priv->child_pid),
@@ -869,12 +744,11 @@ tlm_session_terminate (TlmSession *session)
     priv->last_sig = SIGHUP;
     priv->timer_id = g_timeout_add_seconds (
             tlm_config_get_uint (priv->config, TLM_CONFIG_GENERAL,
-                    TLM_CONFIG_GENERAL_TERMINATE_TIMEOUT, 10),
+                    TLM_CONFIG_GENERAL_TERMINATE_TIMEOUT, 3),
             _terminate_timeout,
             session);
 }
 
-
 void
 tlm_session_reset_tty (TlmSession *session)
 {
similarity index 88%
rename from src/daemon/tlm-session.h
rename to src/sessiond/tlm-session.h
index 5587b8f..7f92495 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <glib-object.h>
 
-#include <tlm-config.h>
+#include "common/tlm-config.h"
 
 G_BEGIN_DECLS
 
@@ -62,14 +62,13 @@ struct _TlmSessionClass
 GType tlm_session_get_type(void);
 
 TlmSession *
-tlm_session_new (TlmConfig *config,
-                 const gchar *seat_id,
-                 const gchar *service,
-                 const gchar *username,
-                 const gchar *password,
-                 GHashTable *environment,
-                 gint notify_fd);
+tlm_session_new ();
 
+gboolean
+tlm_session_start (TlmSession *session,
+                   const gchar *seat_id, const gchar *service,
+                   const gchar *username, const gchar *password,
+                   GHashTable *environment);
 void
 tlm_session_terminate (TlmSession *session);
 
diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am
new file mode 100644 (file)
index 0000000..84204da
--- /dev/null
@@ -0,0 +1,20 @@
+## Process this file with automake to produce Makefile.in
+
+bin_PROGRAMS = tlm-client
+
+tlm_client_SOURCES = tlm-client.c
+tlm_client_CFLAGS = \
+    -I$(top_builddir)/src \
+    -I$(top_srcdir)/src \
+    $(TLM_INCLUDES) \
+    $(TLM_CFLAGS) \
+    -DTLM_BIN_DIR='"$(bindir)"' \
+    $(DEPS_CFLAGS)
+       
+tlm_client_LDADD = \
+       $(DEPS_LIBS) \
+       $(top_builddir)/src/common/libtlm-common.la \
+  $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+       $(TLM_LIBS)
+
+CLEANFILES = *.gcno *.gcda
\ No newline at end of file
diff --git a/src/utils/Makefile.in b/src/utils/Makefile.in
new file mode 100644 (file)
index 0000000..134bcb3
--- /dev/null
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = tlm-client$(EXEEXT)
+subdir = src/utils
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_tlm_client_OBJECTS = tlm_client-tlm-client.$(OBJEXT)
+tlm_client_OBJECTS = $(am_tlm_client_OBJECTS)
+am__DEPENDENCIES_1 =
+tlm_client_DEPENDENCIES = $(top_builddir)/src/common/libtlm-common.la \
+       $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+       $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+tlm_client_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tlm_client_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(tlm_client_SOURCES)
+DIST_SOURCES = $(tlm_client_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACCOUNT_PLUGIN_NAME = @ACCOUNT_PLUGIN_NAME@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELEMENTARY_CFLAGS = @ELEMENTARY_CFLAGS@
+ELEMENTARY_LIBS = @ELEMENTARY_LIBS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBGUM_CFLAGS = @LIBGUM_CFLAGS@
+LIBGUM_LIBS = @LIBGUM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTLM_NFC_CFLAGS = @LIBTLM_NFC_CFLAGS@
+LIBTLM_NFC_LIBS = @LIBTLM_NFC_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TLM_CFLAGS = @TLM_CFLAGS@
+TLM_LIBS = @TLM_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+tlm_client_SOURCES = tlm-client.c
+tlm_client_CFLAGS = \
+    -I$(top_builddir)/src \
+    -I$(top_srcdir)/src \
+    $(TLM_INCLUDES) \
+    $(TLM_CFLAGS) \
+    -DTLM_BIN_DIR='"$(bindir)"' \
+    $(DEPS_CFLAGS)
+
+tlm_client_LDADD = \
+       $(DEPS_LIBS) \
+       $(top_builddir)/src/common/libtlm-common.la \
+  $(top_builddir)/src/common/dbus/libtlm-dbus-glue.la \
+       $(TLM_LIBS)
+
+CLEANFILES = *.gcno *.gcda
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/utils/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+tlm-client$(EXEEXT): $(tlm_client_OBJECTS) $(tlm_client_DEPENDENCIES) $(EXTRA_tlm_client_DEPENDENCIES) 
+       @rm -f tlm-client$(EXEEXT)
+       $(AM_V_CCLD)$(tlm_client_LINK) $(tlm_client_OBJECTS) $(tlm_client_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlm_client-tlm-client.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+tlm_client-tlm-client.o: tlm-client.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_client_CFLAGS) $(CFLAGS) -MT tlm_client-tlm-client.o -MD -MP -MF $(DEPDIR)/tlm_client-tlm-client.Tpo -c -o tlm_client-tlm-client.o `test -f 'tlm-client.c' || echo '$(srcdir)/'`tlm-client.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm_client-tlm-client.Tpo $(DEPDIR)/tlm_client-tlm-client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-client.c' object='tlm_client-tlm-client.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_client_CFLAGS) $(CFLAGS) -c -o tlm_client-tlm-client.o `test -f 'tlm-client.c' || echo '$(srcdir)/'`tlm-client.c
+
+tlm_client-tlm-client.obj: tlm-client.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_client_CFLAGS) $(CFLAGS) -MT tlm_client-tlm-client.obj -MD -MP -MF $(DEPDIR)/tlm_client-tlm-client.Tpo -c -o tlm_client-tlm-client.obj `if test -f 'tlm-client.c'; then $(CYGPATH_W) 'tlm-client.c'; else $(CYGPATH_W) '$(srcdir)/tlm-client.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/tlm_client-tlm-client.Tpo $(DEPDIR)/tlm_client-tlm-client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tlm-client.c' object='tlm_client-tlm-client.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tlm_client_CFLAGS) $(CFLAGS) -c -o tlm_client-tlm-client.obj `if test -f 'tlm-client.c'; then $(CYGPATH_W) 'tlm-client.c'; else $(CYGPATH_W) '$(srcdir)/tlm-client.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+       clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/tlm-client.c b/src/utils/tlm-client.c
new file mode 100644 (file)
index 0000000..e52ee78
--- /dev/null
@@ -0,0 +1,420 @@
+/* vi: set et sw=4 ts=4 cino=t0,(0: */
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of tlm (Tizen Login Manager)
+ *
+ * Copyright (C) 2014 Intel Corporation.
+ *
+ * Contact: Imran Zaman <imran.zaman@gmail.com>
+ *
+ * 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.1 of the License, or (at your option) any later version.
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "config.h"
+#include <error.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <gio/gio.h>
+#include <glib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <glib-unix.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "config.h"
+
+#include "common/dbus/tlm-dbus.h"
+#include "common/tlm-log.h"
+#include "common/tlm-config.h"
+#include "common/dbus/tlm-dbus-login-gen.h"
+#include "common/tlm-utils.h"
+#include "common/dbus/tlm-dbus-utils.h"
+
+static GPid daemon_pid = 0;
+
+//static GMainLoop *main_loop = NULL;
+
+typedef struct {
+    gchar *username;
+    gchar *password;
+    gchar *seatid;
+    gchar **environment;
+} TlmUser;
+
+static TlmUser *
+_create_tlm_user ()
+{
+    return g_malloc0 (sizeof (TlmUser));
+}
+
+static void
+_free_tlm_user (
+        TlmUser *user)
+{
+    if (user) {
+        g_free (user->username);
+        g_free (user->password);
+        g_free (user->seatid);
+        g_strfreev (user->environment);
+        g_free (user);
+    }
+}
+
+static gboolean
+_setup_daemon ()
+{
+    DBG ("starting tlm daemon");
+
+    GError *error = NULL;
+    gchar *argv[2];
+
+    const gchar *bin_path = TLM_BIN_DIR;
+
+#ifdef ENABLE_DEBUG
+    const gchar *env_val = g_getenv("TLM_BIN_DIR");
+    if (env_val)
+        bin_path = env_val;
+#endif
+    if(!bin_path) {
+        WARN("No TLM daemon bin path found");
+        return FALSE;
+    }
+
+    gchar *test_daemon_path = g_build_filename (bin_path, "tlm", NULL);
+    if(!test_daemon_path) {
+        WARN("No TLM daemon path found");
+        return FALSE;
+    }
+
+    argv[0] = test_daemon_path;
+    argv[1] = NULL;
+    g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
+            &daemon_pid, &error);
+    g_free (test_daemon_path);
+    if (error) {
+        WARN("Failed to spawn daemon : %d:%s", error->code, error->message);
+        g_error_free (error);
+        error = NULL;
+        return FALSE;
+    }
+    sleep (5); /* 5 seconds */
+
+    DBG ("Daemon PID = %d\n", daemon_pid);
+    return TRUE;
+}
+
+static void
+_teardown_daemon ()
+{
+    if (daemon_pid) kill (daemon_pid, SIGTERM);
+}
+
+GDBusConnection *
+_get_root_socket_bus_connection (
+        GError **error)
+{
+    gchar address[128];
+    g_snprintf (address, 127, TLM_DBUS_ROOT_SOCKET_ADDRESS);
+    return g_dbus_connection_new_for_address_sync (address,
+            G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, NULL, error);
+}
+
+GDBusConnection *
+_get_bus_connection (
+        const gchar *seat_id,
+        GError **error)
+{
+    uid_t user_id = getuid ();
+
+    if (user_id == 0) {
+        return _get_root_socket_bus_connection (error);
+    }
+
+    /* get dbus connection for specific user only */
+    gchar address[128];
+    g_snprintf (address, 127, "unix:path=%s/%s-%d", TLM_DBUS_SOCKET_PATH,
+            seat_id, user_id);
+    return g_dbus_connection_new_for_address_sync (address,
+            G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, NULL, error);
+}
+
+TlmDbusLogin *
+_get_login_object (
+        GDBusConnection *connection,
+        GError **error)
+{
+    return tlm_dbus_login_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE,
+            NULL, TLM_LOGIN_OBJECTPATH, NULL, error);
+}
+
+static GVariant *
+_convert_environ_to_variant (gchar **env) {
+
+    GVariantBuilder *builder = NULL;
+    GVariant *venv = NULL;
+    gchar **penv = env;
+
+    g_return_val_if_fail (env != NULL, NULL);
+
+    builder = g_variant_builder_new (((const GVariantType *) "a{ss}"));
+
+    while (*penv) {
+        gchar *key = *penv++;
+        gchar *value = *penv++;
+        if (!key || !value) {
+            break;
+        }
+        g_variant_builder_add (builder, "{ss}", key, value);
+    }
+    venv = g_variant_builder_end (builder);
+    g_variant_builder_unref (builder);
+
+    return venv;
+}
+
+static void
+_handle_user_login (
+        TlmUser *user)
+{
+    GError *error = NULL;
+    GDBusConnection *connection = NULL;
+    TlmDbusLogin *login_object = NULL;
+    GVariant *venv = NULL;
+
+    if (!user || !user->username || !user->password || !user->seatid) {
+        WARN("Invalid username/password");
+        return;
+    }
+    DBG ("username %s seatid %s", user->username, user->seatid);
+
+    connection = _get_bus_connection (user->seatid, &error);
+    if (connection == NULL) {
+        WARN("failed to get bus connection : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    login_object = _get_login_object (connection, &error);
+    if (login_object == NULL) {
+        WARN("failed to get login object : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    venv = _convert_environ_to_variant (user->environment);
+    if (venv == NULL) {
+        WARN("failed to get user environemnt");
+        goto _finished;
+    }
+
+    tlm_dbus_login_call_login_user_sync (login_object, user->seatid,
+            user->username, user->password, venv, NULL, &error);
+    if (error) {
+        WARN ("login failed with error: %d:%s", error->code, error->message);
+        g_error_free (error);
+        error = NULL;
+    } else {
+        DBG ("User logged in successfully");
+    }
+
+_finished:
+    if (login_object) g_object_unref (login_object);
+    if (connection) g_object_unref (connection);
+}
+
+static void
+_handle_user_logout (
+        TlmUser *user)
+{
+    GError *error = NULL;
+    GDBusConnection *connection = NULL;
+    TlmDbusLogin *login_object = NULL;
+
+    if (!user || !user->seatid) {
+        WARN("Invalid user/seatid");
+        return;
+    }
+    DBG ("username %s seatid %s", user->username, user->seatid);
+
+    connection = _get_bus_connection (user->seatid, &error);
+    if (connection == NULL) {
+        WARN("failed to get bus connection : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    login_object = _get_login_object (connection, &error);
+    if (login_object == NULL) {
+        WARN("failed to get login object : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    tlm_dbus_login_call_logout_user_sync (login_object, user->seatid,  NULL,
+            &error);
+    if (error) {
+        WARN ("logout failed with error: %d:%s", error->code, error->message);
+        g_error_free (error);
+        error = NULL;
+    } else {
+        DBG ("User logged out successfully");
+    }
+
+_finished:
+    if (login_object) g_object_unref (login_object);
+    if (connection) g_object_unref (connection);
+}
+
+static void
+_handle_user_switch (
+        TlmUser *user)
+{
+    GError *error = NULL;
+    GDBusConnection *connection = NULL;
+    TlmDbusLogin *login_object = NULL;
+    GVariant *venv = NULL;
+
+    if (!user || !user->username || !user->password || !user->seatid) {
+        WARN("Invalid username/password/seatid");
+        return;
+    }
+    DBG ("username %s seatid %s", user->username, user->seatid);
+
+    connection = _get_bus_connection (user->seatid, &error);
+    if (connection == NULL) {
+        WARN("failed to get bus connection : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    login_object = _get_login_object (connection, &error);
+    if (login_object == NULL) {
+        WARN("failed to get login object : error %s",
+            error ? error->message : "(null)");
+        goto _finished;
+    }
+
+    venv = _convert_environ_to_variant (user->environment);
+    if (venv == NULL) {
+        WARN("failed to get user environemnt");
+        goto _finished;
+    }
+
+    tlm_dbus_login_call_switch_user_sync (login_object, user->seatid,
+            user->username, user->password, venv, NULL, &error);
+    if (error) {
+        WARN ("switch user failed with error: %d:%s", error->code,
+                error->message);
+        g_error_free (error);
+        error = NULL;
+    } else {
+        DBG ("User switched in successfully");
+    }
+
+_finished:
+    if (login_object) g_object_unref (login_object);
+    if (connection) g_object_unref (connection);
+}
+
+int main (int argc, char *argv[])
+{
+    GError *error = NULL;
+    GOptionContext *context;
+    gboolean rval = FALSE;
+
+    gboolean is_user_login_op = FALSE, is_user_logout_op = FALSE;
+    gboolean is_user_switch_op = FALSE;
+    gboolean run_tlm_daemon = FALSE;
+    GOptionGroup* user_option = NULL;
+    TlmUser *user = _create_tlm_user ();
+
+    GOptionEntry main_entries[] =
+    {
+        { "login-user", 'l', 0, G_OPTION_ARG_NONE, &is_user_login_op,
+                "login user -- username, password and seatid is mandatory",
+                NULL },
+        { "logout-user", 'o', 0, G_OPTION_ARG_NONE, &is_user_logout_op,
+                "logout user -- seatid is mandatory",
+                NULL },
+        { "switch-user", 's', 0, G_OPTION_ARG_NONE, &is_user_switch_op,
+                "switch user -- username, password and seatid is mandatory",
+                NULL },
+        { "run-daemon", 'r', 0, G_OPTION_ARG_NONE, &run_tlm_daemon,
+                "run tlm daemon (by default tlm daemon is not run)",
+                NULL },
+        { NULL }
+    };
+
+    GOptionEntry user_entries[] =
+    {
+        { "username", 0, 0, G_OPTION_ARG_STRING, &user->username,
+                "user name", "user1" },
+        { "password", 0, 0, G_OPTION_ARG_STRING, &user->password,
+                "user password", "mypass" },
+        { "seat", 0, 0, G_OPTION_ARG_STRING, &user->seatid,
+                 "user seat", "seat0" },
+        { "env", 0, 0, G_OPTION_ARG_STRING_ARRAY, &user->environment,
+                "user environment", "a 1 b 2" },
+        { NULL }
+    };
+
+#if !GLIB_CHECK_VERSION (2, 36, 0)
+    g_type_init ();
+#endif
+
+    context = g_option_context_new (" [tlm client Option]\n"
+            "  e.g. To login a user, ./tlm-client -l --username user1 "
+            "--password p1 --seat seat0 --env key1 val1 key2 val2");
+    g_option_context_add_main_entries (context, main_entries, NULL);
+
+    user_option = g_option_group_new ("user-options", "User specific options",
+            "User specific options", NULL, NULL);
+    g_option_group_add_entries (user_option, user_entries);
+    g_option_context_add_group (context, user_option);
+
+    rval = g_option_context_parse (context, &argc, &argv, &error);
+    g_option_context_free (context);
+    if (!rval) {
+        DBG ("option parsing failed: %s\n", error->message);
+        _free_tlm_user (user);
+        return EXIT_FAILURE;
+    }
+
+    if (geteuid() != 0) {
+        WARN("test-client can only be run with ROOT privileges");
+        _free_tlm_user (user);
+        return EXIT_FAILURE;
+    }
+
+    if (run_tlm_daemon)
+        _setup_daemon ();
+
+    if (is_user_login_op) {
+        _handle_user_login (user);
+    } else if (is_user_logout_op) {
+        _handle_user_logout (user);
+    } else if (is_user_switch_op) {
+        _handle_user_switch (user);
+    } else {
+        WARN ("No option specified");
+    }
+    _free_tlm_user (user);
+
+    if (run_tlm_daemon)
+        _teardown_daemon ();
+    return EXIT_SUCCESS;
+}
index efba0e7..330ff9d 100644 (file)
@@ -13,6 +13,6 @@ configtest_CFLAGS = \
 configtest_LDADD = \
        $(TLM_LIBS) \
        $(CHECK_LIBS) \
-       $(abs_top_builddir)/src/common/libtlm_plugin_la-tlm-config.lo
+       $(abs_top_builddir)/src/common/libtlm_common_la-tlm-config.lo
 
 EXTRA_DIST = test.conf
index e49f95f..c498729 100644 (file)
@@ -98,7 +98,7 @@ am_configtest_OBJECTS = configtest-config.$(OBJEXT)
 configtest_OBJECTS = $(am_configtest_OBJECTS)
 am__DEPENDENCIES_1 =
 configtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-       $(abs_top_builddir)/src/common/libtlm_plugin_la-tlm-config.lo
+       $(abs_top_builddir)/src/common/libtlm_common_la-tlm-config.lo
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -524,7 +524,7 @@ configtest_CFLAGS = \
 configtest_LDADD = \
        $(TLM_LIBS) \
        $(CHECK_LIBS) \
-       $(abs_top_builddir)/src/common/libtlm_plugin_la-tlm-config.lo
+       $(abs_top_builddir)/src/common/libtlm_common_la-tlm-config.lo
 
 EXTRA_DIST = test.conf
 all: all-am
index 48bf88d..841ffe5 100644 (file)
@@ -23,8 +23,7 @@ daemontest_CFLAGS = \
 daemontest_LDADD = \
     $(TLM_LIBS) \
     $(CHECK_LIBS) \
-    $(abs_top_builddir)/src/daemon/tlm-tlm-utils.o \
-    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
-    $(abs_top_builddir)/src/common/dbus/libtlm-dbus-glue.la
+    $(abs_top_builddir)/src/common/libtlm-common.la \
+    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la
 
 CLEANFILES = *.gcno *.gcda
index d85eb9c..9731984 100644 (file)
@@ -99,9 +99,8 @@ am_daemontest_OBJECTS = daemontest-daemon-test.$(OBJEXT)
 daemontest_OBJECTS = $(am_daemontest_OBJECTS)
 am__DEPENDENCIES_1 =
 daemontest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-       $(abs_top_builddir)/src/daemon/tlm-tlm-utils.o \
-       $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
-       $(abs_top_builddir)/src/common/dbus/libtlm-dbus-glue.la
+       $(abs_top_builddir)/src/common/libtlm-common.la \
+       $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -534,9 +533,8 @@ daemontest_CFLAGS = \
 daemontest_LDADD = \
     $(TLM_LIBS) \
     $(CHECK_LIBS) \
-    $(abs_top_builddir)/src/daemon/tlm-tlm-utils.o \
-    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la \
-    $(abs_top_builddir)/src/common/dbus/libtlm-dbus-glue.la
+    $(abs_top_builddir)/src/common/libtlm-common.la \
+    $(abs_top_builddir)/src/daemon/dbus/libtlm-dbus.la
 
 CLEANFILES = *.gcno *.gcda
 all: all-am
index 203217e..51c4811 100644 (file)
@@ -40,8 +40,8 @@
 #include "common/tlm-log.h"
 #include "common/tlm-config.h"
 #include "common/dbus/tlm-dbus-login-gen.h"
-#include "daemon/tlm-utils.h"
-#include "daemon/dbus/tlm-dbus-utils.h"
+#include "common/tlm-utils.h"
+#include "common/dbus/tlm-dbus-utils.h"
 
 static gchar *exe_name = 0;
 static GPid daemon_pid = 0;