diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/Makefile.am | 8 | ||||
| -rw-r--r-- | tools/Makefile.in | 609 | ||||
| -rwxr-xr-x | tools/create-exports-NetworkManager.sh | 117 | ||||
| -rwxr-xr-x | tools/enums-to-docbook.pl | 7 | ||||
| -rwxr-xr-x | tools/run-nm-test.sh | 260 | ||||
| -rwxr-xr-x | tools/run-test-dbus-session.sh | 10 | ||||
| -rwxr-xr-x | tools/run-test-valgrind.sh | 159 | ||||
| -rwxr-xr-x | tools/test-networkmanager-service.py | 207 |
8 files changed, 532 insertions, 845 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am deleted file mode 100644 index 966487c6..00000000 --- a/tools/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -EXTRA_DIST = \ - check-exports.sh \ - debug-helper.py \ - run-test-valgrind.sh \ - run-test-dbus-session.sh \ - test-networkmanager-service.py \ - test-sudo-wrapper.sh \ - enums-to-docbook.pl diff --git a/tools/Makefile.in b/tools/Makefile.in deleted file mode 100644 index 8bdb192a..00000000 --- a/tools/Makefile.in +++ /dev/null @@ -1,609 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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 = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -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@ -subdir = tools -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/attributes.m4 \ - $(top_srcdir)/m4/ax_lib_readline.m4 \ - $(top_srcdir)/m4/compiler_options.m4 \ - $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/git-sha-record.m4 \ - $(top_srcdir)/m4/gnome-code-coverage.m4 \ - $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ - $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \ - $(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ - $(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -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 = -SOURCES = -DIST_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) -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALL_LINGUAS = @ALL_LINGUAS@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AM_TESTS_FD_REDIRECT = @AM_TESTS_FD_REDIRECT@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@ -BLUEZ5_LIBS = @BLUEZ5_LIBS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ -CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ -CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DBUS_CFLAGS = @DBUS_CFLAGS@ -DBUS_LIBS = @DBUS_LIBS@ -DBUS_SYS_DIR = @DBUS_SYS_DIR@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DHCLIENT_PATH = @DHCLIENT_PATH@ -DHCPCD_PATH = @DHCPCD_PATH@ -DISTRO_NETWORK_SERVICE = @DISTRO_NETWORK_SERVICE@ -DLLTOOL = @DLLTOOL@ -DL_LIBS = @DL_LIBS@ -DNSMASQ_PATH = @DNSMASQ_PATH@ -DNSSEC_TRIGGER_SCRIPT = @DNSSEC_TRIGGER_SCRIPT@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GENHTML = @GENHTML@ -GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ -GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ -GLIB_CFLAGS = @GLIB_CFLAGS@ -GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ -GLIB_LIBS = @GLIB_LIBS@ -GLIB_MAKEFILE = @GLIB_MAKEFILE@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GNUTLS_CFLAGS = @GNUTLS_CFLAGS@ -GNUTLS_LIBS = @GNUTLS_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@ -GUDEV_CFLAGS = @GUDEV_CFLAGS@ -GUDEV_LIBS = @GUDEV_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ -INTLTOOL_MERGE = @INTLTOOL_MERGE@ -INTLTOOL_PERL = @INTLTOOL_PERL@ -INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ -INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ -INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ -INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ -INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ -INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -IPTABLES_PATH = @IPTABLES_PATH@ -JANSSON_CFLAGS = @JANSSON_CFLAGS@ -JANSSON_LIBS = @JANSSON_LIBS@ -KERNEL_FIRMWARE_DIR = @KERNEL_FIRMWARE_DIR@ -LCOV = @LCOV@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBAUDIT_CFLAGS = @LIBAUDIT_CFLAGS@ -LIBAUDIT_LIBS = @LIBAUDIT_LIBS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBM = @LIBM@ -LIBNDP_CFLAGS = @LIBNDP_CFLAGS@ -LIBNDP_LIBS = @LIBNDP_LIBS@ -LIBNL_CFLAGS = @LIBNL_CFLAGS@ -LIBNL_LIBS = @LIBNL_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ -LIBSOUP_LIBS = @LIBSOUP_LIBS@ -LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@ -LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@ -LIBTEAMDCTL_CFLAGS = @LIBTEAMDCTL_CFLAGS@ -LIBTEAMDCTL_LIBS = @LIBTEAMDCTL_LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LOG_DRIVER = @LOG_DRIVER@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MM_GLIB_CFLAGS = @MM_GLIB_CFLAGS@ -MM_GLIB_LIBS = @MM_GLIB_LIBS@ -MOC = @MOC@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NEWT_CFLAGS = @NEWT_CFLAGS@ -NEWT_LIBS = @NEWT_LIBS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@ -NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@ -NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@ -NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@ -NM_MAJOR_VERSION = @NM_MAJOR_VERSION@ -NM_MICRO_VERSION = @NM_MICRO_VERSION@ -NM_MINOR_VERSION = @NM_MINOR_VERSION@ -NM_MODIFY_SYSTEM_POLICY = @NM_MODIFY_SYSTEM_POLICY@ -NM_VERSION = @NM_VERSION@ -NSS_CFLAGS = @NSS_CFLAGS@ -NSS_LIBS = @NSS_LIBS@ -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@ -PERL = @PERL@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POLKIT_CFLAGS = @POLKIT_CFLAGS@ -POLKIT_LIBS = @POLKIT_LIBS@ -POSUB = @POSUB@ -PPPD_PATH = @PPPD_PATH@ -PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@ -QT_CFLAGS = @QT_CFLAGS@ -QT_LIBS = @QT_LIBS@ -RANLIB = @RANLIB@ -READLINE_LIBS = @READLINE_LIBS@ -SANITIZERS = @SANITIZERS@ -SANITIZER_ENV = @SANITIZER_ENV@ -SED = @SED@ -SELINUX_CFLAGS = @SELINUX_CFLAGS@ -SELINUX_LIBS = @SELINUX_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -SYSTEMD_200_CFLAGS = @SYSTEMD_200_CFLAGS@ -SYSTEMD_200_LIBS = @SYSTEMD_200_LIBS@ -SYSTEMD_INHIBIT_CFLAGS = @SYSTEMD_INHIBIT_CFLAGS@ -SYSTEMD_INHIBIT_LIBS = @SYSTEMD_INHIBIT_LIBS@ -SYSTEMD_JOURNAL_CFLAGS = @SYSTEMD_JOURNAL_CFLAGS@ -SYSTEMD_JOURNAL_LIBS = @SYSTEMD_JOURNAL_LIBS@ -SYSTEMD_LOGIN_CFLAGS = @SYSTEMD_LOGIN_CFLAGS@ -SYSTEMD_LOGIN_LIBS = @SYSTEMD_LOGIN_LIBS@ -SYSTEM_CA_PATH = @SYSTEM_CA_PATH@ -UDEV_DIR = @UDEV_DIR@ -USE_NLS = @USE_NLS@ -UUID_CFLAGS = @UUID_CFLAGS@ -UUID_LIBS = @UUID_LIBS@ -VALGRIND_RULES = @VALGRIND_RULES@ -VAPIGEN = @VAPIGEN@ -VAPIGEN_MAKEFILE = @VAPIGEN_MAKEFILE@ -VAPIGEN_VAPIDIR = @VAPIGEN_VAPIDIR@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -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_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -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@ -intltool__v_merge_options_ = @intltool__v_merge_options_@ -intltool__v_merge_options_0 = @intltool__v_merge_options_0@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -nmbinary = @nmbinary@ -nmconfdir = @nmconfdir@ -nmdatadir = @nmdatadir@ -nmlibdir = @nmlibdir@ -nmrundir = @nmrundir@ -nmstatedir = @nmstatedir@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -systemdsystemunitdir = @systemdsystemunitdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -with_dhclient = @with_dhclient@ -with_dhcpcd = @with_dhcpcd@ -with_netconfig = @with_netconfig@ -with_resolvconf = @with_resolvconf@ -with_valgrind = @with_valgrind@ -EXTRA_DIST = \ - check-exports.sh \ - debug-helper.py \ - run-test-valgrind.sh \ - run-test-dbus-session.sh \ - test-networkmanager-service.py \ - test-sudo-wrapper.sh \ - enums-to-docbook.pl - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 tools/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu tools/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -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 -installdirs: -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: - -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-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -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-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 -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - 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-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/tools/create-exports-NetworkManager.sh b/tools/create-exports-NetworkManager.sh new file mode 100755 index 00000000..3a4619a4 --- /dev/null +++ b/tools/create-exports-NetworkManager.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +set -e + +die() { + echo "$@" + exit 1 +} + +# generates the linker version script src/NetworkManager.ver +# by looking at the symbols needed by the device and settings +# plugins. Note that this depends on how NetworkManager and +# the plugins are build. For example, compiling without +# --with-more-asserts will yield less symbols. +# +# _build re-builds NetworkManager with relevant compile time +# options to yield the most symbols. +_build() { + git clean -fdx + ./autogen.sh --enable-ld-gc --enable-ifcfg-rh --enable-ifupdown \ + --enable-ifnet --enable-ibft --enable-teamdctl --enable-wifi \ + --with-modem-manager-1 --with-ofono --with-more-asserts \ + --with-more-logging + make -j20 +} + +_sort() { + LANG=C sort -u +} + +call_nm() { + nm "$1" | + sed -n 's/.* \([^ ]\) \([^ ]*\)$/\1 \2/p' +} + +get_symbols_nm () { + call_nm ./src/.libs/libNetworkManager.a | + sed -n 's/^[tTDRB] //p' | + _sort +} + +get_symbols_explict() { + cat <<EOF | _sort +_IO_stdin_used +EOF +} + +get_symbols_missing() { + (for f in ./src/settings/plugins/*/.libs/*.so \ + ./src/devices/*/.libs/*.so \ + ./src/ppp/.libs/libnm-ppp-plugin.so; do + call_nm "$f" | + sed -n 's/^\([U]\) \(\(nm_\|nmp_\|_nm\|NM\|_NM\).*\)$/\2/p' + done) | + _sort | + grep -Fx -f <(get_symbols_explict) -v | + grep -Fx -f <(get_symbols_nm) +} + +pretty() { + sed 's/.*/\t\0;/' +} + +do_build() { + do_update + make +} + +do_rebuild() { + _build + do_build +} + +do_update() { + do_generate > ./src/NetworkManager.ver +} + +do_generate() { + cat <<EOF +# this file is generated by $0 +{ +global: +$(get_symbols_missing | pretty) + +$(get_symbols_explict | pretty) +local: + *; +}; +EOF +} + +test -f ./src/.libs/libNetworkManager.a || die "must be called from NetworkManager \$(top_builddir) after building the tree" + +case "$1" in + rebuild) + do_rebuild + ;; + build) + do_build + ;; + '--called-from-make') + if test -z "${NM_BUILD_NO_CREATE_EXPORTS+x}"; then + do_update + else + if test -f "./src/NetworkManager.ver"; then + touch ./src/NetworkManager.ver + fi + fi + ;; + update) + do_update + ;; + *) + do_generate + ;; +esac + diff --git a/tools/enums-to-docbook.pl b/tools/enums-to-docbook.pl index d3d8c33c..845598ac 100755 --- a/tools/enums-to-docbook.pl +++ b/tools/enums-to-docbook.pl @@ -62,8 +62,11 @@ sub inc { my $val = shift; - if ($val =~ /^\d+$/) { + if ($val =~ /^-?\d+$/) { my $len = length $val; + if ($val =~ /^-/ && ($val + 1 == 0)) { + $len = $len - 1 + } return sprintf "%0${len}d", $val + 1; } elsif ($val =~ /^0x(.+)$/) { my $len = length $1; @@ -117,7 +120,7 @@ if (/^\/\*\*$/) { $choice = undef; } elsif (/^typedef enum/) { # Start of an enum - $val = 0; + $val = -1; } elsif (/^\s+(\S+)\s+=\s+([^,\s]+)/) { # A choice with a literal value next unless @choices; diff --git a/tools/run-nm-test.sh b/tools/run-nm-test.sh new file mode 100755 index 00000000..7159ad8a --- /dev/null +++ b/tools/run-nm-test.sh @@ -0,0 +1,260 @@ +#!/bin/bash + +die() { + echo "$@" + exit 5 +} + +_is_true() { + case "$1" in + y|Y|yes|YES|1|true|TRUE) + return 0 + ;; + n|N|no|NO|0|false|FALSE) + return 1 + ;; + *) + if test -n "$2"; then + _is_true "$2" + return $? + fi + return 2 + ;; + esac +} + +SCRIPT_PATH="${SCRIPT_PATH:-$(readlink -f "$(dirname "$0")")}" + +VALGRIND_ERROR=37 + +if [ "$1" == "--called-from-make" ]; then + shift + CALLED_FROM_MAKE=1 +else + CALLED_FROM_MAKE=0 +fi + +if [ "$CALLED_FROM_MAKE" == 1 ]; then + NMTST_LIBTOOL=($1 --mode=execute); shift + NMTST_VALGRIND_ARG="$1"; shift + if [[ "$NMTST_VALGRIND_ARG" == no ]]; then + NMTST_VALGRIND_ARG= + fi + + if [[ -z "${NMTST_VALGRIND}" ]]; then + # the valgrind path can be specified via $NMTST_VALGRIND. + # Otherwise, it can be determined by the configure scripts. + # Otherwise, it is found in the current $PATH (below). + if [[ "$NMTST_VALGRIND_ARG" != "" ]]; then + NMTST_VALGRIND="${NMTST_VALGRIND_ARG}" + fi + fi + if [[ -z "${NMTST_USE_VALGRIND+x}" ]]; then + # whether to use valgrind can be specified via $NMTST_USE_VALGRIND. + # Otherwise, it depends on the configure option. + if [ "$NMTST_VALGRIND_ARG" == "" ]; then + NMTST_USE_VALGRIND=0 + else + NMTST_USE_VALGRIND=1 + fi + fi + + NMTST_SUPPRESSIONS_ARGS="$1"; shift + if [[ -z "${NMTST_SUPPRESSIONS+x}" ]]; then + if [[ "$NMTST_SUPPRESSIONS_ARGS" == "" ]]; then + NMTST_SUPPRESSIONS="$SCRIPT_PATH/../valgrind.suppressions" + else + NMTST_SUPPRESSIONS="${NMTST_SUPPRESSIONS_ARGS}" + fi + fi + + + if [ "$1" = "--launch-dbus" ]; then + NMTST_LAUNCH_DBUS=1 + shift + elif [ "$1" = "--launch-dbus=auto" ]; then + NMTST_LAUNCH_DBUS= + shift + else + NMTST_LAUNCH_DBUS=0 + fi + TEST="$1"; shift + NMTST_MAKE_FIRST=0 + +else + if [[ -z "${NMTST_USE_VALGRIND+x}" ]]; then + # by default, disable valgrind checks. + NMTST_USE_VALGRIND=0 + fi + + if [ -n "${NMTST_LIBTOOL-:x}" ]; then + NMTST_LIBTOOL=(sh "$SCRIPT_PATH/../libtool" --mode=execute) + elif [ -n "${NMTST_LIBTOOL-x}" ]; then + NMTST_LIBTOOL=() + else + NMTST_LIBTOOL=($NMTST_LIBTOOL --mode=execute) + fi + for a in "$@"; do + case "$a" in + "--launch-dbus") + NMTST_LAUNCH_DBUS=1 + shift + ;; + "--no-launch-dbus"|"-D") + NMTST_LAUNCH_DBUS=0 + shift + ;; + "--no-libtool") + NMTST_LIBTOOL=() + shift + ;; + --make-first|-m) + NMTST_MAKE_FIRST=1 + shift + ;; + "--valgrind"|-v) + NMTST_USE_VALGRIND=1 + shift; + ;; + "--no-valgrind"|-V) + NMTST_USE_VALGRIND=0 + shift; + ;; + "--") + shift + break + ;; + *) + break + ;; + esac + done + # we support calling the script directly. In this case, + # only pass the path to the test to run. + TEST="$1"; shift + if [[ -z "${NMTST_SUPPRESSIONS+x}" ]]; then + NMTST_SUPPRESSIONS="$SCRIPT_PATH/../valgrind.suppressions" + fi + +fi + +[ -x "$TEST" ] || die "Test \"$TEST\" does not exist" +TEST_PATH="$(readlink -f "$(dirname "$TEST")")" +TEST_NAME="${TEST##*/}" + +if [ -z "${NMTST_LAUNCH_DBUS}" ]; then + # autodetect whether to launch D-Bus based on the test path. + if [[ $TEST_PATH == */libnm/tests || $TEST_PATH == */libnm-glib/tests ]]; then + NMTST_LAUNCH_DBUS=1 + else + NMTST_LAUNCH_DBUS=0 + fi +fi + +if _is_true "$NMTST_MAKE_FIRST" 0; then + git_dir="$(readlink -f "$(git rev-parse --show-toplevel)")" + rel_path="${TEST_PATH/#$(printf '%s/' "$git_dir")}/$TEST_NAME" + cd "$git_dir" + make -j5 "$rel_path" || die "make of $TEST failed ($git_dir / $rel_path)" + cd - 1>/dev/null +fi + +# if the user wishes, change first into the directory of the test +if _is_true "$NMTST_CHANGE_DIRECTORY" 0; then + cd "$TEST_PATH" + TEST="./$TEST_NAME" +fi + +NMTST_DBUS_RUN_SESSION=() +if _is_true "$NMTST_LAUNCH_DBUS"; then + if ! which dbus-run-session &>/dev/null ; then + eval `dbus-launch --sh-syntax` + trap "kill $DBUS_SESSION_BUS_PID" EXIT + else + NMTST_DBUS_RUN_SESSION=(dbus-run-session --) + fi +fi + +[ -x "$TEST" ] || die "Cannot execute test \"$TEST\"" + + +if ! _is_true "$NMTST_USE_VALGRIND" 0; then + "${NMTST_DBUS_RUN_SESSION[@]}" \ + "$TEST" "$@" + exit $? +fi + +if [[ -z "${NMTST_VALGRIND}" ]]; then + NMTST_VALGRIND=`which valgrind` || die "cannot find valgrind binary. Set \$NMTST_VALGRIND" +else + test -e "${NMTST_VALGRIND}" || die "cannot find valgrind binary from NMTST_VALGRIND=\"${NMTST_VALGRIND}\"" +fi + +if [[ "${NMTST_SUPPRESSIONS}" != "" ]]; then + NMTST_SUPPRESSIONS=("--suppressions=$NMTST_SUPPRESSIONS") +else + NMTST_SUPPRESSIONS=() +fi + +LOGFILE="${TEST}.valgrind-log" + +export G_SLICE=always-malloc +export G_DEBUG=gc-friendly +"${NMTST_DBUS_RUN_SESSION[@]}" \ +"${NMTST_LIBTOOL[@]}" \ +"$NMTST_VALGRIND" \ + --quiet \ + --error-exitcode=$VALGRIND_ERROR \ + --leak-check=full \ + --gen-suppressions=all \ + "${NMTST_SUPPRESSIONS[@]}" \ + --num-callers=100 \ + --log-file="$LOGFILE" \ + "$TEST" \ + "$@" +RESULT=$? + +test -s "$LOGFILE" +HAS_ERRORS=$? + +if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then + if [ $HAS_ERRORS -ne 0 ]; then + rm -f "$LOGFILE" + elif [ $RESULT -ne $VALGRIND_ERROR ]; then + # the test (probably) didn't fail due to valgrind. + echo "The test failed. Also check the valgrind log at '`realpath "$LOGFILE"`'" >&2 + else + echo "valgrind failed! Check the log at '`realpath "$LOGFILE"`'" >&2 + UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq) + if [ -n "$UNRESOLVED" ]; then + echo Some addresses could not be resolved into symbols. >&2 + echo The errors might get suppressed when you install the debuging symbols. >&2 + if [ -x /usr/bin/dnf ]; then + echo Hint: dnf debuginfo-install $UNRESOLVED >&2 + elif [ -x /usr/bin/debuginfo-install ]; then + echo Hint: debuginfo-install $UNRESOLVED >&2 + else + echo Files without debugging symbols: $UNRESOLVED >&2 + fi + fi + fi + exit $RESULT +fi + +if [ $HAS_ERRORS -eq 0 ]; then + # valgrind doesn't support setns syscall and spams the logfile. + # hack around it... + if [ "$TEST_NAME" = 'test-link-linux' -a -z "$(sed -e '/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d' "$LOGFILE")" ]; then + HAS_ERRORS=1 + fi +fi + +if [ $HAS_ERRORS -eq 0 ]; then + # shouldn't actually happen... + echo "valgrind succeeded, but log is not empty: '`realpath "$LOGFILE"`'" >&2 + exit 1 +fi + +rm -f "$LOGFILE" + +exit $RESULT diff --git a/tools/run-test-dbus-session.sh b/tools/run-test-dbus-session.sh deleted file mode 100755 index c6a94fa6..00000000 --- a/tools/run-test-dbus-session.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -if ! which dbus-run-session >/dev/null 2>&1; then - eval `dbus-launch --sh-syntax` - trap "kill $DBUS_SESSION_BUS_PID" EXIT - "$@" - exit $? -fi - -dbus-run-session -- "$@" diff --git a/tools/run-test-valgrind.sh b/tools/run-test-valgrind.sh deleted file mode 100755 index 634ca2c4..00000000 --- a/tools/run-test-valgrind.sh +++ /dev/null @@ -1,159 +0,0 @@ -#!/bin/bash - -die() { - echo "$@" - exit 5 -} - -SCRIPT_PATH="${SCRIPT_PATH:-$(readlink -f "$(dirname "$0")")}" - -VALGRIND_ERROR=37 -if [ "$1" == "--called-from-make" ]; then - shift - NMTST_LIBTOOL=($1 --mode=execute); shift - NMTST_VALGRIND="$1"; shift - SUPPRESSIONS="$1"; shift - if [ "$1" = "--launch-dbus" ]; then - NMTST_LAUNCH_DBUS=yes - shift - else - NMTST_LAUNCH_DBUS=no - fi - TEST="$1"; shift -else - if [ -n "${NMTST_LIBTOOL-:x}" ]; then - NMTST_LIBTOOL=(sh "$SCRIPT_PATH/../libtool" --mode=execute) - elif [ -n "${NMTST_LIBTOOL-x}" ]; then - NMTST_LIBTOOL=() - else - NMTST_LIBTOOL=($NMTST_LIBTOOL --mode=execute) - fi - for a in "$@"; do - case "$a" in - "--launch-dbus") - NMTST_LAUNCH_DBUS=yes - shift - ;; - "--no-launch-dbus"|"-D") - NMTST_LAUNCH_DBUS=no - shift - ;; - "--no-libtool") - NMTST_LIBTOOL=() - shift - ;; - "--") - shift - break - ;; - *) - break - ;; - esac - done - # we support calling the script directly. In this case, - # only pass the path to the test to run. - TEST="$1"; shift - NMTST_VALGRIND="${NMTST_VALGRIND:-valgrind}" - if [ "$SUPPRESSIONS" == "" ]; then - SUPPRESSIONS="$SCRIPT_PATH/../valgrind.suppressions" - fi - - [ -x "$TEST" ] || die "Test \"$TEST\" does not exist" - - TEST_PATH="$(readlink -f "$(dirname "$TEST")")" - - if [ -n "${NMTST_LAUNCH_DBUS-x}" ]; then - # autodetect whether to launch D-Bus based on the test path. - if [[ $TEST_PATH == */libnm/tests || $TEST_PATH == */libnm-glib/tests ]]; then - NMTST_LAUNCH_DBUS=yes - else - NMTST_LAUNCH_DBUS=no - fi - fi - - # some tests require you to cd into the base directory. - # do that. - if [ "$NMTST_VALGRIND_NO_CD" == "" ]; then - cd "$TEST_PATH" - TEST="./$(basename "$TEST")" - fi -fi - -NMTST_DBUS_RUN_SESSION=() -if [ "$NMTST_LAUNCH_DBUS" == "yes" ]; then - if ! which dbus-run-session &>/dev/null ; then - eval `dbus-launch --sh-syntax` - trap "kill $DBUS_SESSION_BUS_PID" EXIT - else - NMTST_DBUS_RUN_SESSION=(dbus-run-session --) - fi -fi - -if [ "$NMTST_NO_VALGRIND" != "" ]; then - "${NMTST_DBUS_RUN_SESSION[@]}" \ - "$TEST" "$@" - exit $? -fi - -LOGFILE="${TEST}.valgrind-log" - -export G_SLICE=always-malloc -export G_DEBUG=gc-friendly -"${NMTST_DBUS_RUN_SESSION[@]}" \ -"${NMTST_LIBTOOL[@]}" "$NMTST_VALGRIND" \ - --quiet \ - --error-exitcode=$VALGRIND_ERROR \ - --leak-check=full \ - --gen-suppressions=all \ - --suppressions="$SUPPRESSIONS" \ - --num-callers=100 \ - --log-file="$LOGFILE" \ - "$TEST" \ - "$@" -RESULT=$? - -test -s "$LOGFILE" -HAS_ERRORS=$? - -if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then - if [ $HAS_ERRORS -ne 0 ]; then - rm -f "$LOGFILE" - elif [ $RESULT -ne $VALGRIND_ERROR ]; then - # the test (probably) didn't fail due to valgrind. - echo "The test failed. Also check the valgrind log at '`realpath "$LOGFILE"`'" >&2 - else - echo "valgrind failed! Check the log at '`realpath "$LOGFILE"`'" >&2 - UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq) - if [ -n "$UNRESOLVED" ]; then - echo Some addresses could not be resolved into symbols. >&2 - echo The errors might get suppressed when you install the debuging symbols. >&2 - if [ -x /usr/bin/dnf ]; then - echo Hint: dnf debuginfo-install $UNRESOLVED >&2 - elif [ -x /usr/bin/debuginfo-install ]; then - echo Hint: debuginfo-install $UNRESOLVED >&2 - else - echo Files without debugging symbols: $UNRESOLVED >&2 - fi - fi - fi - exit $RESULT -fi - -if [ $HAS_ERRORS -eq 0 ]; then - # valgrind doesn't support setns syscall and spams the logfile. - # hack around it... - if [ "$(basename "$TEST")" = 'test-link-linux' -a -z "$(sed -e '/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d' "$LOGFILE")" ]; then - HAS_ERRORS=1 - fi -fi - -if [ $HAS_ERRORS -eq 0 ]; then - # shouldn't actually happen... - echo "valgrind succeeded, but log is not empty: '`realpath "$LOGFILE"`'" >&2 - exit 1 -fi - -rm -f "$LOGFILE" - -exit $RESULT diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py index 3a32d91d..68097778 100755 --- a/tools/test-networkmanager-service.py +++ b/tools/test-networkmanager-service.py @@ -92,9 +92,15 @@ class ExportedObj(dbus.service.Object): dbus.service.Object.__init__(self, bus, object_path) self._bus = bus self.path = object_path - self.__dbus_ifaces = {} + self.__ensure_dbus_ifaces() + object_manager.add_object(self) + + def __ensure_dbus_ifaces(self): + if not hasattr(self, '_ExportedObj__dbus_ifaces'): + self.__dbus_ifaces = {} def add_dbus_interface(self, dbus_iface, get_props_func, prop_changed_func): + self.__ensure_dbus_ifaces() self.__dbus_ifaces[dbus_iface] = ExportedObj.DBusInterface(dbus_iface, get_props_func, prop_changed_func) def __dbus_interface_get(self, dbus_iface): @@ -113,6 +119,11 @@ class ExportedObj(dbus.service.Object): def _dbus_property_notify(self, dbus_iface, propname): prop = self._dbus_property_get(dbus_iface, propname) self.__dbus_interface_get(dbus_iface).prop_changed_func(self, { propname: prop }) + ExportedObj.PropertiesChanged(self, dbus_iface, { propname: prop }, []) + + @dbus.service.signal(dbus.PROPERTIES_IFACE, signature='sa{sv}as') + def PropertiesChanged(self, iface, changed, invalidated): + pass @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') def GetAll(self, dbus_iface): @@ -122,6 +133,16 @@ class ExportedObj(dbus.service.Object): def Get(self, dbus_iface, name): return self._dbus_property_get(dbus_iface, name) + def get_managed_ifaces(self): + my_ifaces = {} + for iface in self.__dbus_ifaces: + my_ifaces[iface] = self.__dbus_ifaces[iface].get_props_func() + return self.path, my_ifaces + + def remove_from_connection(self): + object_manager.remove_object(self) + dbus.service.Object.remove_from_connection(self) + ################################################################### IFACE_DEVICE = 'org.freedesktop.NetworkManager.Device' @@ -148,8 +169,6 @@ class Device(ExportedObj): def __init__(self, bus, iface, devtype): object_path = "/org/freedesktop/NetworkManager/Devices/%d" % Device.counter Device.counter = Device.counter + 1 - ExportedObj.__init__(self, bus, object_path) - self.add_dbus_interface(IFACE_DEVICE, self.__get_props, Device.PropertiesChanged) self.iface = iface self.udi = "/sys/devices/virtual/%s" % iface @@ -162,6 +181,9 @@ class Device(ExportedObj): self.dhcp6_config = None self.available_connections = [] + self.add_dbus_interface(IFACE_DEVICE, self.__get_props, Device.PropertiesChanged) + ExportedObj.__init__(self, bus, object_path) + # Properties interface def __get_props(self): props = {} @@ -221,8 +243,6 @@ PE_S390_SUBCHANNELS = "S390Subchannels" class WiredDevice(Device): def __init__(self, bus, iface, mac, subchannels): - Device.__init__(self, bus, iface, NM_DEVICE_TYPE_ETHERNET) - self.add_dbus_interface(IFACE_WIRED, self.__get_props, WiredDevice.PropertiesChanged) if mac is None: self.mac = random_mac() @@ -231,6 +251,9 @@ class WiredDevice(Device): self.carrier = False self.s390_subchannels = subchannels + self.add_dbus_interface(IFACE_WIRED, self.__get_props, WiredDevice.PropertiesChanged) + Device.__init__(self, bus, iface, NM_DEVICE_TYPE_ETHERNET) + # Properties interface def __get_props(self): props = {} @@ -257,19 +280,19 @@ PV_VLAN_ID = "VlanId" class VlanDevice(Device): def __init__(self, bus, iface): - Device.__init__(self, bus, iface, NM_DEVICE_TYPE_VLAN) - self.add_dbus_interface(IFACE_VLAN, self.__get_props, VlanDevice.PropertiesChanged) - self.mac = random_mac() self.carrier = False self.vlan_id = 1 + self.add_dbus_interface(IFACE_VLAN, self.__get_props, VlanDevice.PropertiesChanged) + Device.__init__(self, bus, iface, NM_DEVICE_TYPE_VLAN) + # Properties interface def __get_props(self): props = {} props[PV_HW_ADDRESS] = self.mac props[PV_CARRIER] = self.carrier - props[PV_VLAN_ID] = self.vlan_id + props[PV_VLAN_ID] = dbus.UInt32(self.vlan_id) return props @dbus.service.signal(IFACE_VLAN, signature='a{sv}') @@ -295,8 +318,6 @@ class WifiAp(ExportedObj): def __init__(self, bus, ssid, mac, flags, wpaf, rsnf, freq): path = "/org/freedesktop/NetworkManager/AccessPoint/%d" % WifiAp.counter WifiAp.counter = WifiAp.counter + 1 - ExportedObj.__init__(self, bus, path) - self.add_dbus_interface(IFACE_WIFI_AP, self.__get_props, WifiAp.PropertiesChanged) self.ssid = ssid if mac: @@ -310,6 +331,9 @@ class WifiAp(ExportedObj): self.strength = random.randint(0, 100) self.strength_id = GLib.timeout_add_seconds(10, self.strength_cb, None) + self.add_dbus_interface(IFACE_WIFI_AP, self.__get_props, WifiAp.PropertiesChanged) + ExportedObj.__init__(self, bus, path) + def __del__(self): if self.strength_id > 0: GLib.source_remove(self.strength_id) @@ -357,13 +381,13 @@ PW_WIRELESS_CAPABILITIES = "WirelessCapabilities" class WifiDevice(Device): def __init__(self, bus, iface): - Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIFI) - self.add_dbus_interface(IFACE_WIFI, self.__get_props, WifiDevice.PropertiesChanged) - self.mac = random_mac() self.aps = [] self.active_ap = None + self.add_dbus_interface(IFACE_WIFI, self.__get_props, WifiDevice.PropertiesChanged) + Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIFI) + # methods @dbus.service.method(dbus_interface=IFACE_WIFI, in_signature='', out_signature='ao') def GetAccessPoints(self): @@ -443,13 +467,14 @@ class WimaxNsp(ExportedObj): def __init__(self, bus, name): path = "/org/freedesktop/NetworkManager/Nsp/%d" % WimaxNsp.counter WimaxNsp.counter = WimaxNsp.counter + 1 - ExportedObj.__init__(self, bus, path) - self.add_dbus_interface(IFACE_WIMAX_NSP, self.__get_props, WimaxNsp.PropertiesChanged) self.name = name self.strength = random.randint(0, 100) self.strength_id = GLib.timeout_add_seconds(10, self.strength_cb, None) + self.add_dbus_interface(IFACE_WIMAX_NSP, self.__get_props, WimaxNsp.PropertiesChanged) + ExportedObj.__init__(self, bus, path) + def __del__(self): if self.strength_id > 0: GLib.source_remove(self.strength_id) @@ -492,14 +517,14 @@ PX_ACTIVE_NSP = "ActiveNsp" class WimaxDevice(Device): def __init__(self, bus, iface): - Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIMAX) - self.add_dbus_interface(IFACE_WIMAX, self.__get_props, WimaxDevice.PropertiesChanged) - self.mac = random_mac() self.bsid = random_mac() self.nsps = [] self.active_nsp = None + self.add_dbus_interface(IFACE_WIMAX, self.__get_props, WimaxDevice.PropertiesChanged) + Device.__init__(self, bus, iface, NM_DEVICE_TYPE_WIMAX) + # methods @dbus.service.method(dbus_interface=IFACE_WIMAX, in_signature='', out_signature='ao') def GetNspList(self): @@ -582,8 +607,6 @@ class ActiveConnection(ExportedObj): def __init__(self, bus, device, connection, specific_object): object_path = "/org/freedesktop/NetworkManager/ActiveConnection/%d" % ActiveConnection.counter ActiveConnection.counter = ActiveConnection.counter + 1 - ExportedObj.__init__(self, bus, object_path) - self.add_dbus_interface(IFACE_ACTIVE_CONNECTION, self.__get_props, ActiveConnection.PropertiesChanged) self.device = device self.conn = connection @@ -598,6 +621,9 @@ class ActiveConnection(ExportedObj): self.vpn = False self.master = None + self.add_dbus_interface(IFACE_ACTIVE_CONNECTION, self.__get_props, ActiveConnection.PropertiesChanged) + ExportedObj.__init__(self, bus, object_path) + # Properties interface def __get_props(self): props = {} @@ -659,9 +685,6 @@ def set_device_ac_cb(device, ac): class NetworkManager(ExportedObj): def __init__(self, bus, object_path): - ExportedObj.__init__(self, bus, object_path) - self.add_dbus_interface(IFACE_NM, self.__get_props, NetworkManager.PropertiesChanged) - self._bus = bus; self.devices = [] self.active_connections = [] @@ -670,6 +693,9 @@ class NetworkManager(ExportedObj): self.state = NM_STATE_DISCONNECTED self.connectivity = 1 + self.add_dbus_interface(IFACE_NM, self.__get_props, NetworkManager.PropertiesChanged) + ExportedObj.__init__(self, bus, object_path) + @dbus.service.signal(IFACE_NM, signature='u') def StateChanged(self, new_state): pass @@ -736,6 +762,7 @@ class NetworkManager(ExportedObj): if s_con['id'] == 'object-creation-failed-test': self.active_connections.remove(ac) + self.__notify(PM_ACTIVE_CONNECTIONS) ac.remove_from_connection() else: GLib.timeout_add(50, set_device_ac_cb, device, ac) @@ -930,6 +957,11 @@ class NetworkManager(ExportedObj): def UpdateConnection(self, path, connection, verify_connection): return settings.update_connection(connection, path, verify_connection) + @dbus.service.method(dbus_interface=IFACE_TEST, in_signature='', out_signature='') + def Restart(self): + bus.release_name("org.freedesktop.NetworkManager") + bus.request_name("org.freedesktop.NetworkManager") + ################################################################### IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection' @@ -946,7 +978,7 @@ class InvalidSettingException(dbus.DBusException): class MissingSettingException(dbus.DBusException): _dbus_error_name = IFACE_CONNECTION + '.MissingSetting' -class Connection(dbus.service.Object): +class Connection(ExportedObj): def __init__(self, bus, object_path, settings, remove_func, verify_connection=True): if self.get_uuid(settings) is None: @@ -955,8 +987,6 @@ class Connection(dbus.service.Object): settings['connection']['uuid'] = uuid.uuid4() self.verify(settings, verify_strict=verify_connection) - dbus.service.Object.__init__(self, bus, object_path) - self.path = object_path self.settings = settings self.remove_func = remove_func @@ -964,6 +994,9 @@ class Connection(dbus.service.Object): self.props = {} self.props['Unsaved'] = False + self.add_dbus_interface(IFACE_CONNECTION, self.__get_props, None) + ExportedObj.__init__(self, bus, object_path) + def get_uuid(self, settings=None): if settings is None: settings = self.settings @@ -1003,20 +1036,11 @@ class Connection(dbus.service.Object): self.settings = settings; self.Updated() - # Properties interface - @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') - def GetAll(self, iface): - if iface != IFACE_CONNECTION: - raise UnknownInterfaceException() + def __get_props(self): return self.props - @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') - def Get(self, iface, name): - if iface != IFACE_CONNECTION: - raise UnknownInterfaceException() - if not name in self.props.keys(): - raise UnknownPropertyException() - return self.props[name] + def __notify(self, propname): + self._dbus_property_notify(IFACE_CONNECTION, propname) # Connection methods @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}') @@ -1054,9 +1078,8 @@ IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings' class InvalidHostnameException(dbus.DBusException): _dbus_error_name = IFACE_SETTINGS + '.InvalidHostname' -class Settings(dbus.service.Object): +class Settings(ExportedObj): def __init__(self, bus, object_path): - dbus.service.Object.__init__(self, bus, object_path) self.connections = {} self.bus = bus self.counter = 1 @@ -1066,6 +1089,9 @@ class Settings(dbus.service.Object): self.props['CanModify'] = True self.props['Connections'] = dbus.Array([], 'o') + self.add_dbus_interface(IFACE_SETTINGS, self.__get_props, Settings.PropertiesChanged) + ExportedObj.__init__(self, bus, object_path) + def auto_remove_next_connection(self): self.remove_next_connection = True; @@ -1092,7 +1118,7 @@ class Settings(dbus.service.Object): self.connections[path] = con self.props['Connections'] = dbus.Array(self.connections.keys(), 'o') self.NewConnection(path) - self.PropertiesChanged({ 'connections': self.props['Connections'] }) + self.__notify('Connections') if self.remove_next_connection: self.remove_next_connection = False @@ -1111,7 +1137,7 @@ class Settings(dbus.service.Object): def delete_connection(self, connection): del self.connections[connection.path] self.props['Connections'] = dbus.Array(self.connections.keys(), 'o') - self.PropertiesChanged({ 'connections': self.props['Connections'] }) + self.__notify('Connections') @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='s', out_signature='') def SaveHostname(self, hostname): @@ -1119,21 +1145,13 @@ class Settings(dbus.service.Object): if hostname.find('.') == -1: raise InvalidHostnameException() self.props['Hostname'] = hostname - self.PropertiesChanged({ 'hostname': hostname }) + self.__notify('Hostname') - @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') - def GetAll(self, iface): - if iface != IFACE_SETTINGS: - raise UnknownInterfaceException() + def __get_props(self): return self.props - @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') - def Get(self, iface, name): - if iface != IFACE_SETTINGS: - raise UnknownInterfaceException() - if not name in self.props.keys(): - raise UnknownPropertyException() - return self.props[name] + def __notify(self, propname): + self._dbus_property_notify(IFACE_SETTINGS, propname) @dbus.service.signal(IFACE_SETTINGS, signature='o') def NewConnection(self, path): @@ -1207,7 +1225,80 @@ class AgentManager(dbus.service.Object): return secrets ################################################################### +IFACE_OBJECT_MANAGER = 'org.freedesktop.DBus.ObjectManager' + +PATH_OBJECT_MANAGER = '/org/freedesktop' + +class ObjectManager(dbus.service.Object): + def __init__(self, bus, object_path): + dbus.service.Object.__init__(self, bus, object_path) + self.objs = [] + self.bus = bus + @dbus.service.method(dbus_interface=IFACE_OBJECT_MANAGER, + in_signature='', out_signature='a{oa{sa{sv}}}', + sender_keyword='sender') + def GetManagedObjects(self, sender=None): + managed_objects = {} + for obj in self.objs: + name, ifaces = obj.get_managed_ifaces() + managed_objects[name] = ifaces + return managed_objects + + def add_object(self, obj): + self.objs.append(obj) + name, ifaces = obj.get_managed_ifaces() + self.InterfacesAdded(name, ifaces) + + def remove_object(self, obj): + self.objs.remove(obj) + name, ifaces = obj.get_managed_ifaces() + self.InterfacesRemoved(name, ifaces.keys()) + + @dbus.service.signal(IFACE_OBJECT_MANAGER, signature='oa{sa{sv}}') + def InterfacesAdded(self, name, ifaces): + pass + + @dbus.service.signal(IFACE_OBJECT_MANAGER, signature='oas') + def InterfacesRemoved(self, name, ifaces): + pass + +################################################################### +IFACE_DNS_MANAGER = 'org.freedesktop.NetworkManager.DnsManager' + +class DnsManager(ExportedObj): + def __init__(self, bus, object_path): + self.props = {} + self.props['Mode'] = "dnsmasq" + self.props['RcManager'] = "symlink" + self.props['Configuration'] = dbus.Array([ + dbus.Dictionary( + { 'nameservers' : dbus.Array(['1.2.3.4', '5.6.7.8'], 's'), + 'priority' : dbus.Int32(100) }, + 'sv') ], + 'a{sv}') + + self.add_dbus_interface(IFACE_DNS_MANAGER, self.__get_props, None) + ExportedObj.__init__(self, bus, object_path) + + @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') + def GetAll(self, iface): + if iface != IFACE_DNS_MANAGER: + raise UnknownInterfaceException() + return self.props + + @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') + def Get(self, iface, name): + if iface != IFACE_DNS_MANAGER: + raise UnknownInterfaceException() + if not name in self.props.keys(): + raise UnknownPropertyException() + return self.props[name] + + def __get_props(self): + return self.props + +################################################################### def stdin_cb(io, condition): mainloop.quit() @@ -1219,12 +1310,14 @@ def main(): random.seed() - bus = dbus.SessionBus() + global manager, settings, agent_manager, dns_manager, object_manager, bus - global manager, settings, agent_manager + bus = dbus.SessionBus() + object_manager = ObjectManager(bus, "/org/freedesktop") manager = NetworkManager(bus, "/org/freedesktop/NetworkManager") settings = Settings(bus, "/org/freedesktop/NetworkManager/Settings") agent_manager = AgentManager(bus, "/org/freedesktop/NetworkManager/AgentManager") + dns_manager = DnsManager(bus, "/org/freedesktop/NetworkManager/DnsManager") if not bus.request_name("org.freedesktop.NetworkManager"): sys.exit(1) |