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
#! /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.
# 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=''
# 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]...
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
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.
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 $@
# Define the identity of the package.
PACKAGE='tlm'
- VERSION='0.0.2'
+ VERSION='0.0.3'
cat >>confdefs.h <<_ACEOF
fi
fi
-
#libtool
case `pwd` in
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
# 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
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\\"
"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" ;;
# 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])
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
include $(top_srcdir)/common.mk
EXTRA_DIST = \
- tlm.conf.in
+ tlm.conf.in \
+ tlm.service \
+ tlm-login \
+ tlm-login.debian
sysconf_DATA = tlm.conf
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
--- /dev/null
+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
# %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
+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
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.
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
/usr/bin/tlm
+/usr/bin/tlm-sessiond
/usr/lib/*.so.*
/usr/lib/tlm/plugins/*.so*
/etc/tlm.conf
+/usr/bin/tlm-client
# 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
+* 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
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)
%prep
%setup -q -n %{name}-%{version}
+cp %{SOURCE1001} .
%build
%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
%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
Name: tlm
Summary: Login manager for Tizen
-Version: 0.0.2
+Version: 0.0.3
Release: 1
Group: System/Daemons
License: LGPL-2.1+
%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
%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
# 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
# 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
# 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
# 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
# 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)
# 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
# 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
# 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
# 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)
# 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)
<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>
</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>
<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>
</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>
<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>
<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">
<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">"Invalid input"</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">
<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>
<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>
<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>
<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>
--- /dev/null
+<?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>
+
TlmError
TLM_GET_ERROR_FOR_ID
tlm_error_quark
+tlm_error_new_from_variant
+tlm_error_to_variant
</SECTION>
<SECTION>
$(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
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@)
$(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
#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"
# 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
#
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
+* 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
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
%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
NULL=
-SUBDIRS = common plugins daemon
+SUBDIRS = common plugins daemon sessiond utils
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
NULL =
-SUBDIRS = common plugins daemon
+SUBDIRS = common plugins daemon sessiond utils
all: all-recursive
.SUFFIXES:
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 \
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)
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 \
$(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@)
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 \
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 = \
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 \
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)
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)
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$$||'`;\
@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.
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)
info-am:
-install-data-am: install-libtlm_plugin_la_includeHEADERS
+install-data-am: install-libtlm_common_la_includeHEADERS
install-dvi: install-dvi-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
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.
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."
--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 = \
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)
-
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)
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."
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:
-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$$||'`;\
@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
@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
--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)
--- /dev/null
+<!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>
--- /dev/null
+<?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>
+
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;
}
#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"
* @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
{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"},
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);
+}
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,
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__ */
--- /dev/null
+/* 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;
+}
+
+
--- /dev/null
+/* 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__ */
--- /dev/null
+/* 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);
+}
gboolean
tlm_utils_delete_dir (const gchar *dir);
+void
+tlm_utils_log_utmp_entry (const gchar *username);
+
G_END_DECLS
#endif /* _TLM_UTILS_H */
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 \
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 = \
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@)
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 \
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 = \
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$$||'`;\
@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
libtlm_dbus_la_CPPFLAGS = \
-I$(top_srcdir)/src \
+ -I$(top_builddir)/src \
$(TLM_CFLAGS) \
-DG_LOG_DOMAIN=\"TLM\" \
$(NULL)
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 :
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@)
noinst_LTLIBRARIES = libtlm-dbus.la
libtlm_dbus_la_CPPFLAGS = \
-I$(top_srcdir)/src \
+ -I$(top_builddir)/src \
$(TLM_CFLAGS) \
-DG_LOG_DOMAIN=\"TLM\" \
$(NULL)
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
@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$$||'`;\
@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
*/
#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
{
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);
{
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 (
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);
}
{
GError *error = NULL;
- DBG ("");
g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self), FALSE);
if (!seat_id || !username || !password) {
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);
{
GError *error = NULL;
- DBG ("");
g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self),
FALSE);
g_error_free (error);
return TRUE;
}
+ DBG ("seat_id %s", seat_id);
g_signal_emit (self, signals[SIG_LOGOUT_USER], 0, seat_id, invocation);
{
GError *error = NULL;
- DBG ("");
g_return_val_if_fail (self && TLM_IS_DBUS_LOGIN_ADAPTER(self),
FALSE);
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);
#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
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);
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);
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);
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;
}
#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;
TlmDbusServer *dbus_server;
GQueue *request_queue;
guint request_id;
- TlmDbusRequest *active_request;
+ TlmRequest *active_request;
DbusObserverEnableFlags enable_flags;
};
TlmSeat *seat);
static void
+_connect_seat (
+ TlmDbusObserver *self,
+ TlmSeat *seat);
+
+static void
_process_next_request_in_idle (
TlmDbusObserver *self);
{
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
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),
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",
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);
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);
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);
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));
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));
_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,
{
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;
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) {
}
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;
}
}
_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;
}
}
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);
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);
}
/* 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;
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);
}
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
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
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;
}
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);
}
}
_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);
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)) {
TlmManagerPrivate *priv = TLM_MANAGER_PRIV (manager);
TlmSeat *seat = tlm_seat_new (priv->config,
- manager,
seat_id,
seat_path);
g_signal_connect (seat,
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;
}
}
if (!delayed)
g_signal_emit (manager, signals[SIG_MANAGER_STOPPED], 0);
-
+
manager->priv->is_started = FALSE;
return TRUE;
#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"
struct _TlmSeatPrivate
{
TlmConfig *config;
- TlmManager *manager;
gchar *id;
gchar *path;
gchar *next_service;
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
} 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;
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);
}
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);
_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);
}
"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",
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],
- ¬ify_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 *
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;
}
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)
{
"id", id,
"path", path,
NULL);
- if (seat) seat->priv->manager = g_object_ref (manager);
return seat;
}
TlmSeat *
tlm_seat_new (TlmConfig *config,
- TlmManager *manager,
const gchar *id,
const gchar *path);
--- /dev/null
+/* 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;
+}
+
+
--- /dev/null
+/* 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_ */
+++ /dev/null
-/* 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;
-}
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
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 \
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
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
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
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
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)
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
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)
--- /dev/null
+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)
--- /dev/null
+# 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:
--- /dev/null
+/* 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;
+}
#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);
};
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;
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);
}
"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
}
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);
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);
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",
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;
}
const gchar *username,
const gchar *password)
{
+ int res;
TlmAuthSession *auth_session = TLM_AUTH_SESSION (
g_object_new (TLM_TYPE_AUTH_SESSION,
"service", 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);
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)
{
#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;
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);
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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_ */
*
* 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;
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);
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);
}
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;
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;
"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",
"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
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) {
_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)
{
}
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+)";
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);
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,
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
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",
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),
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)
{
#include <glib-object.h>
-#include <tlm-config.h>
+#include "common/tlm-config.h"
G_BEGIN_DECLS
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);
--- /dev/null
+## 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
--- /dev/null
+# 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:
--- /dev/null
+/* 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;
+}
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
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
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
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
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
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
#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;