diff -Nru gdm3-3.28.2/ABOUT-NLS gdm3-3.28.3/ABOUT-NLS --- gdm3-3.28.2/ABOUT-NLS 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/ABOUT-NLS 2018-07-24 13:01:46.000000000 +0000 @@ -0,0 +1,1379 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is a +way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this 'ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU 'gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU 'gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + +1.1 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU 'gettext'. Other packages have their own ways to +internationalization, predating GNU 'gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU 'gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: + + ./configure --disable-nls + +will _totally_ disable translation of messages. + + When you already have GNU 'gettext' installed on your system and run +configure without an option for your new package, 'configure' will +probably detect the previously built and installed 'libintl' library and +will decide to use it. If not, you may have to to use the +'--with-libintl-prefix' option to tell 'configure' where to look for it. + + Internationalized packages usually have many 'po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at 'configure' time by using the +'--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable 'LINGUAS' +may be set, prior to configuration, to limit the installed set. +'LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.2 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the 'LANG' environment variable to the appropriate +'LL_CC' combination. If you happen to have the 'LC_ALL' or some other +'LC_xxx' environment variables set, you should unset them before setting +'LANG', otherwise the setting of 'LANG' will not have the desired +effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is +an ISO 3166 two-letter country code. For example, let's suppose that +you speak German and live in Germany. At the shell prompt, merely +execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in +'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your +'.login' or '.profile' file, once and for all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of 'LL_CC', with 'LL' denoting the +language and 'CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are used, +such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales +supported by your system for your language by running the command +'locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' +for the purpose of message handling, but you still need to have 'LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather read +translations in German than English for when Swedish is not available, +set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from 'no' to 'nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under 'nb' and some older ones under 'no', it's recommended +for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and +older translations are used. + + In the 'LANGUAGE' environment variable, but not in the 'LANG' +environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to +denote the language's main dialect. For example, 'de' is equivalent to +'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese +as spoken in Portugal) in this context. + +1.3 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +'http://translationproject.org/', in the "Teams" area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +'-request' appended. For example, speakers of Swedish can send a +message to 'sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate _actively_ +in translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, or if you are unsure about what to do or how to get started, +please write to 'coordinator@translationproject.org' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.4 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of Jun 2014. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs + +---------------------------------------------------+ + a2ps | [] [] [] | + aegis | | + anubis | | + aspell | [] [] [] | + bash | [] [] [] | + bfd | | + binutils | [] | + bison | | + bison-runtime | [] | + buzztrax | [] | + ccd2cue | | + ccide | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | | + denemo | [] [] | + dfarc | [] | + dialog | [] [] [] | + dico | | + diffutils | [] | + dink | [] | + direvent | | + doodle | [] | + dos2unix | | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] | + exif | [] | + fetchmail | [] [] | + findutils | [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | [] | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gjay | | + glunarclock | [] [] [] | + gnubiff | [] | + gnubik | [] | + gnucash | () () [] | + gnuchess | | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] | + gramadoir | | + grep | [] [] [] | + grub | [] | + gsasl | | + gss | | + gst-plugins-bad | [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] | + gst-plugins-ugly | [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] | + help2man | | + help2man-texi | | + hylafax | | + idutils | | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | | + kbd | [] | + klavaro | [] [] [] [] [] | + ld | [] | + leafpad | [] [] [] [] | + libc | [] [] [] | + libexif | () | + libextractor | | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] [] | + lilypond | [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] | + man-db | [] [] | + man-db-manpages | | + midi-instruments | [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | [] | + nano | [] [] [] | + opcodes | | + parted | [] | + pies | | + pnmixer | | + popt | [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] | + pushover | [] | + pwdutils | | + pyspread | | + radius | [] | + recode | [] [] [] | + recutils | | + rpm | | + rush | | + sarg | | + sed | [] [] [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] | + sudoers | [] [] | + sysstat | [] | + tar | [] [] [] | + texinfo | [] [] | + texinfo_document | [] [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | | + trader | | + util-linux | [] | + ve | | + vice | | + vmm | | + vorbis-tools | [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] | + wget | [] | + wyslij-po | | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + af am an ar as ast az be bg bn bn_IN bs ca crh cs + 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74 + + da de el en en_GB en_ZA eo es et eu fa fi fr + +--------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] [] | + aegis | [] [] [] [] | + anubis | [] [] [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] | + bfd | [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] [] [] [] | + ccd2cue | [] [] [] [] | + ccide | [] [] [] [] [] [] | + cflow | [] [] [] [] [] | + clisp | [] [] [] [] [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] [] [] [] [] | + cryptsetup | [] [] [] [] [] | + datamash | [] [] [] [] | + denemo | [] | + dfarc | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + dico | [] [] [] [] | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] [] [] [] | + direvent | [] [] [] [] | + doodle | [] [] [] [] | + dos2unix | [] [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] () [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] [] [] [] [] [] | + freedink | [] [] [] [] [] [] [] [] | + fusionforge | [] [] [] | + gas | [] [] [] | + gawk | [] [] [] [] [] | + gcal | [] [] [] [] | + gcc | [] | + gdbm | [] [] [] [] [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | () [] [] () | + gnubik | [] [] [] [] [] | + gnucash | [] () () () () () () | + gnuchess | [] [] [] [] | + gnulib | [] [] [] [] [] [] [] | + gnunet | [] | + gnunet-gtk | [] | + gold | [] [] [] | + gphoto2 | [] () [] [] | + gprof | [] [] [] [] [] [] | + gramadoir | [] [] [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] () [] [] [] | + gtkam | [] () [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] | + guix | [] [] | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] [] [] | + help2man | [] [] [] [] [] [] [] | + help2man-texi | [] [] [] | + hylafax | [] [] | + idutils | [] [] [] [] [] | + iso_15924 | [] () [] [] () [] () | + iso_3166 | [] () [] [] [] [] () [] () | + iso_3166_2 | [] () () () | + iso_4217 | [] () [] [] [] () [] () | + iso_639 | [] () [] [] () [] () | + iso_639_3 | () () () | + iso_639_5 | () () () | + jwhois | [] [] [] [] [] | + kbd | [] [] [] [] [] [] | + klavaro | [] [] [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () [] [] | + libextractor | [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] () [] | + libgphoto2_port | [] () [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] [] | + liferea | [] () [] [] [] [] [] | + lilypond | [] [] [] [] [] [] | + lordsawar | [] [] | + lprng | | + lynx | [] [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | [] | + mailutils | [] [] [] [] | + make | [] [] [] [] [] | + man-db | [] [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] [] [] | + nano | [] [] [] [] [] [] [] | + opcodes | [] [] [] [] [] | + parted | [] [] [] | + pies | [] | + pnmixer | [] [] | + popt | [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] [] | + psmisc | [] [] [] [] [] [] [] | + pspp | [] [] [] | + pushover | () [] [] [] | + pwdutils | [] [] [] | + pyspread | [] [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + recutils | [] [] [] [] | + rpm | [] [] [] [] [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] [] | + skribilo | [] [] [] | + solfege | [] [] [] [] [] [] [] [] | + solfege-manual | [] [] [] [] [] | + spotmachine | [] [] [] [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] [] [] | + sysstat | [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + texinfo_document | [] [] [] [] | + tigervnc | [] [] [] [] [] [] | + tin | [] [] [] [] | + tin-man | [] | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] [] [] [] [] [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] [] | + vice | () () () | + vmm | [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | [] | + wcd | [] [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] [] | + +--------------------------------------------------+ + da de el en en_GB en_ZA eo es et eu fa fi fr + 119 131 32 1 6 0 94 95 22 13 4 102 139 + + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + +-------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] [] | + bison | [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | | + ccd2cue | [] | + ccide | [] [] | + cflow | [] [] [] | + clisp | | + coreutils | [] [] | + cpio | [] [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] | + cryptsetup | [] | + datamash | | + denemo | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] | + dink | [] | + direvent | [] | + doodle | [] [] | + dos2unix | [] [] | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] [] | + flex | [] | + freedink | [] [] [] [] | + fusionforge | | + gas | [] | + gawk | [] () [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] [] () | + gnubik | [] [] [] | + gnucash | () () () () () | + gnuchess | | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] | + hello | [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | | + hylafax | [] | + idutils | [] [] | + iso_15924 | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] | + iso_4217 | [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | [] [] [] [] | + kbd | [] [] [] | + klavaro | [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | | + mailutils | | + make | [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] | + mkisofs | [] [] | + myserver | [] | + nano | [] [] [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | | + pnmixer | [] [] | + popt | [] [] [] [] [] [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | [] | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] [] [] [] [] [] | + recutils | | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] [] [] [] [] [] | + sharutils | | + shishi | | + skribilo | [] | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] [] [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] [] | + tigervnc | | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] | + ve | [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | [] | + wcd | | + wcd-man | | + wdiff | [] [] [] | + wget | [] [] [] [] | + wyslij-po | [] [] [] | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] | + +-------------------------------------------------+ + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3 + + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + +--------------------------------------------------+ + a2ps | [] [] | + aegis | [] | + anubis | [] [] [] | + aspell | [] [] | + bash | [] [] | + bfd | | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | | + ccd2cue | | + ccide | [] [] | + cflow | [] | + clisp | [] | + coreutils | [] [] | + cpio | [] | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | [] [] | + denemo | | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] | + dink | [] | + direvent | [] | + doodle | [] | + dos2unix | [] [] | + dos2unix-man | [] | + e2fsprogs | [] | + enscript | [] | + exif | [] [] [] | + fetchmail | [] | + findutils | [] [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] | + gjay | | + glunarclock | [] [] | + gnubiff | [] | + gnubik | [] [] | + gnucash | () () () () () () () [] | + gnuchess | [] [] | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] [] | + gramadoir | [] | + grep | [] [] | + grub | [] [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] [] [] | + help2man | [] | + help2man-texi | | + hylafax | [] | + idutils | [] | + iso_15924 | () [] [] | + iso_3166 | [] [] [] () [] [] [] [] [] [] | + iso_3166_2 | () [] | + iso_4217 | () [] [] [] | + iso_639 | [] [] () [] [] [] [] | + iso_639_3 | [] () [] | + iso_639_5 | () | + jwhois | [] [] | + kbd | [] | + klavaro | [] [] | + ld | | + leafpad | [] [] [] [] [] | + libc | [] [] | + libexif | [] | + libextractor | [] | + libgnutls | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] | + lilypond | [] | + lordsawar | | + lprng | | + lynx | [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] [] | + man-db | [] | + man-db-manpages | [] | + midi-instruments | [] [] [] [] [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | | + nano | [] [] [] | + opcodes | [] | + parted | [] [] | + pies | | + pnmixer | [] | + popt | [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] | + recutils | [] | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | [] | + spotmachine | [] | + sudo | [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] | + tar | [] [] [] | + texinfo | [] | + texinfo_document | [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] | + trader | [] | + util-linux | [] | + ve | [] | + vice | [] | + vmm | [] | + vorbis-tools | [] | + wastesedge | [] | + wcd | [] | + wcd-man | [] | + wdiff | [] | + wget | [] [] | + wyslij-po | [] | + xboard | [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +--------------------------------------------------+ + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125 + + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + +------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] [] [] [] | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] | + ccd2cue | [] [] | + ccide | [] [] [] | + cflow | [] [] [] | + clisp | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cppi | [] [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] | + denemo | | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] | + dink | | + direvent | [] [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] | + e2fsprogs | [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] [] [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | [] [] [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] | + gnubik | [] [] [] [] | + gnucash | () () () () () [] | + gnuchess | [] [] | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] | + gss | [] [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] [] | + help2man-texi | [] | + hylafax | | + idutils | [] [] [] | + iso_15924 | [] () [] [] [] [] | + iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] () [] | + iso_4217 | [] [] () [] [] [] [] [] | + iso_639 | [] [] [] () [] [] [] [] [] [] | + iso_639_3 | [] () | + iso_639_5 | () [] | + jwhois | [] [] [] [] | + kbd | [] [] | + klavaro | [] [] [] [] [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] | + libexif | [] () [] | + libextractor | [] | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + liferea | [] [] [] [] () [] [] | + lilypond | | + lordsawar | | + lprng | [] | + lynx | [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + midi-instruments | [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] | + nano | [] [] [] [] [] [] | + opcodes | | + parted | [] [] [] [] [] [] | + pies | [] | + pnmixer | [] | + popt | [] [] [] [] [] [] | + procps-ng | [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + recutils | [] [] | + rpm | [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] | + shishi | [] [] | + skribilo | [] | + solfege | [] [] [] | + solfege-manual | [] [] | + spotmachine | [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] [] | + ve | [] [] [] | + vice | | + vmm | | + vorbis-tools | [] [] [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] [] [] [] | + wget | [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +------------------------------------------------+ + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + 7 3 6 114 1 12 88 32 82 3 40 45 7 101 + + sv sw ta te tg th tr uk ur vi wa wo zh_CN + +----------------------------------------------+ + a2ps | [] [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | [] [] [] | + ccd2cue | [] [] [] | + ccide | [] [] [] [] | + cflow | [] [] [] [] | + clisp | | + coreutils | [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] | + cpplib | [] [] [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] [] | + denemo | [] | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] | + dink | [] | + direvent | [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] | + freedink | [] [] [] | + fusionforge | | + gas | [] | + gawk | [] [] [] | + gcal | [] [] [] | + gcc | [] | + gdbm | [] [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] | + glunarclock | [] [] [] [] | + gnubiff | [] [] | + gnubik | [] [] [] [] | + gnucash | () () () () [] | + gnuchess | [] [] [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | [] | + hylafax | [] | + idutils | [] [] [] | + iso_15924 | [] () [] [] () [] | + iso_3166 | [] [] () [] [] () [] [] | + iso_3166_2 | () [] [] () [] | + iso_4217 | [] () [] [] () [] | + iso_639 | [] [] [] () [] [] () [] [] | + iso_639_3 | [] () [] [] () | + iso_639_5 | () [] () | + jwhois | [] [] [] [] | + kbd | [] [] [] [] | + klavaro | [] [] [] [] [] [] | + ld | [] [] [] [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () | + libextractor | [] [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | () [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] | + mailfromd | [] [] | + mailutils | [] | + make | [] [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] | + minicom | [] [] | + mkisofs | [] [] [] | + myserver | [] | + nano | [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | [] [] | + pnmixer | [] [] [] | + popt | [] [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] [] | + pushover | [] | + pwdutils | [] [] | + pyspread | [] | + radius | [] [] | + recode | [] [] [] [] | + recutils | [] [] [] | + rpm | [] [] [] [] | + rush | [] [] | + sarg | | + sed | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] | + skribilo | [] [] | + solfege | [] [] [] [] | + solfege-manual | [] | + spotmachine | [] [] [] | + sudo | [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | | + wcd | [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] | + wget | [] [] [] | + wyslij-po | [] [] | + xboard | [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +----------------------------------------------+ + sv sw ta te tg th tr uk ur vi wa wo zh_CN + 106 1 4 3 0 13 51 115 1 125 7 1 100 + + zh_HK zh_TW + +-------------+ + a2ps | | 30 + aegis | | 9 + anubis | | 19 + aspell | | 29 + bash | [] | 23 + bfd | | 11 + binutils | | 12 + bison | [] | 18 + bison-runtime | [] | 38 + buzztrax | | 9 + ccd2cue | | 10 + ccide | | 17 + cflow | | 16 + clisp | | 10 + coreutils | | 18 + cpio | | 20 + cppi | | 17 + cpplib | [] | 19 + cryptsetup | | 14 + datamash | | 11 + denemo | | 5 + dfarc | | 17 + dialog | [] | 42 + dico | | 6 + diffutils | | 22 + dink | | 10 + direvent | | 11 + doodle | | 12 + dos2unix | [] | 18 + dos2unix-man | | 9 + e2fsprogs | | 15 + enscript | | 21 + exif | | 27 + fetchmail | | 19 + findutils | | 29 + flex | [] | 19 + freedink | | 24 + fusionforge | | 3 + gas | | 5 + gawk | | 13 + gcal | | 8 + gcc | | 2 + gdbm | | 10 + gettext-examples | [] [] | 40 + gettext-runtime | [] [] | 35 + gettext-tools | [] | 24 + gjay | | 9 + glunarclock | [] | 27 + gnubiff | | 9 + gnubik | | 19 + gnucash | () | 6 + gnuchess | | 11 + gnulib | | 23 + gnunet | | 1 + gnunet-gtk | | 1 + gold | | 7 + gphoto2 | [] | 19 + gprof | | 21 + gramadoir | | 14 + grep | [] | 31 + grub | | 21 + gsasl | [] | 19 + gss | | 17 + gst-plugins-bad | | 21 + gst-plugins-base | | 27 + gst-plugins-good | | 32 + gst-plugins-ugly | | 34 + gstreamer | [] | 32 + gtick | | 19 + gtkam | | 24 + gtkspell | [] [] | 48 + guix | | 2 + guix-packages | | 0 + gutenprint | | 15 + hello | [] | 30 + help2man | | 18 + help2man-texi | | 5 + hylafax | | 5 + idutils | | 14 + iso_15924 | [] | 23 + iso_3166 | [] [] | 58 + iso_3166_2 | | 9 + iso_4217 | [] [] | 28 + iso_639 | [] [] | 46 + iso_639_3 | | 10 + iso_639_5 | | 2 + jwhois | [] | 20 + kbd | | 17 + klavaro | | 30 + ld | [] | 15 + leafpad | [] | 39 + libc | [] | 24 + libexif | | 10 + libextractor | | 5 + libgnutls | | 13 + libgphoto2 | | 10 + libgphoto2_port | [] | 19 + libgsasl | | 18 + libiconv | [] | 29 + libidn | | 17 + liferea | | 29 + lilypond | | 11 + lordsawar | | 3 + lprng | | 3 + lynx | | 19 + m4 | [] | 22 + mailfromd | | 4 + mailutils | | 6 + make | | 19 + man-db | | 15 + man-db-manpages | | 10 + midi-instruments | [] | 43 + minicom | [] | 17 + mkisofs | | 13 + myserver | | 9 + nano | [] | 30 + opcodes | | 12 + parted | [] | 23 + pies | | 4 + pnmixer | | 9 + popt | [] | 36 + procps-ng | | 5 + procps-ng-man | | 4 + psmisc | [] | 22 + pspp | | 13 + pushover | | 6 + pwdutils | | 8 + pyspread | | 6 + radius | | 9 + recode | | 31 + recutils | | 10 + rpm | [] | 13 + rush | | 10 + sarg | | 4 + sed | [] | 35 + sharutils | | 13 + shishi | | 7 + skribilo | | 7 + solfege | | 21 + solfege-manual | | 9 + spotmachine | | 11 + sudo | | 26 + sudoers | | 22 + sysstat | | 23 + tar | [] | 30 + texinfo | | 17 + texinfo_document | | 13 + tigervnc | | 14 + tin | [] | 7 + tin-man | | 1 + tracgoogleappsa... | [] | 22 + trader | | 12 + util-linux | | 13 + ve | | 14 + vice | | 1 + vmm | | 3 + vorbis-tools | | 13 + wastesedge | | 3 + wcd | | 8 + wcd-man | | 3 + wdiff | [] | 23 + wget | | 21 + wyslij-po | | 14 + xboard | | 10 + xdg-user-dirs | [] [] | 68 + xkeyboard-config | [] | 28 + +-------------+ + 89 teams zh_HK zh_TW + 166 domains 7 42 2809 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and distributed +as such by its maintainer. There might be an observable lag between the +mere existence a PO file and its wide availability in a distribution. + + If Jun 2014 seems to be old, you may fetch a more recent copy of this +'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix +with full percentage details can be found at +'http://translationproject.org/extra/matrix.html'. + +1.5 Using 'gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU 'gettext' in your +package. Of course you have to respect the GNU Lesser General Public +License which covers the use of the GNU 'gettext' library. This means +in particular that even non-free programs can use 'libintl' as a shared +library, whereas only free software can use 'libintl' as a static +library or use modified versions of 'libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of 'gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +'coordinator@translationproject.org' to make the '.pot' files available +to the translation teams. diff -Nru gdm3-3.28.2/aclocal.m4 gdm3-3.28.3/aclocal.m4 --- gdm3-3.28.2/aclocal.m4 2018-05-17 14:13:24.000000000 +0000 +++ gdm3-3.28.3/aclocal.m4 2018-08-13 15:08:25.000000000 +0000 @@ -204,39 +204,6 @@ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) ]) -# nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software -dnl Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ([2.50]) - -AC_DEFUN([AM_NLS], -[ - AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE([nls], - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT([$USE_NLS]) - AC_SUBST([USE_NLS]) -]) - # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) @@ -1967,4 +1934,5 @@ m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) +m4_include([m4/nls.m4]) m4_include([acinclude.m4]) diff -Nru gdm3-3.28.2/chooser/Makefile.in gdm3-3.28.3/chooser/Makefile.in --- gdm3-3.28.2/chooser/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/chooser/Makefile.in 2018-08-13 15:08:28.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/common/Makefile.in gdm3-3.28.3/common/Makefile.in --- gdm3-3.28.2/common/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/common/Makefile.in 2018-08-13 15:08:28.000000000 +0000 @@ -96,8 +96,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/config.rpath gdm3-3.28.3/config.rpath --- gdm3-3.28.2/config.rpath 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/config.rpath 2018-07-24 13:01:46.000000000 +0000 @@ -0,0 +1,684 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2016 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file 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. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.[01]*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd[23].*) + library_names_spec='$libname$shrext$versuffix' + ;; + freebsd* | dragonfly*) + library_names_spec='$libname$shrext' + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='gdm' PACKAGE_TARNAME='gdm' -PACKAGE_VERSION='3.28.2' -PACKAGE_STRING='gdm 3.28.2' +PACKAGE_VERSION='3.28.3' +PACKAGE_STRING='gdm 3.28.3' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gdm' PACKAGE_URL='' @@ -1608,7 +1608,7 @@ # 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 gdm 3.28.2 to adapt to many kinds of systems. +\`configure' configures gdm 3.28.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1682,7 +1682,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gdm 3.28.2:";; + short | recursive ) echo "Configuration of gdm 3.28.3:";; esac cat <<\_ACEOF @@ -1939,7 +1939,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gdm configure 3.28.2 +gdm configure 3.28.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2529,7 +2529,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gdm $as_me 3.28.2, which was +It was created by gdm $as_me 3.28.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3395,7 +3395,7 @@ # Define the identity of the package. PACKAGE='gdm' - VERSION='3.28.2' + VERSION='3.28.3' cat >>confdefs.h <<_ACEOF @@ -25534,7 +25534,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gdm $as_me 3.28.2, which was +This file was extended by gdm $as_me 3.28.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -25600,7 +25600,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -gdm config.status 3.28.2 +gdm config.status 3.28.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru gdm3-3.28.2/configure.ac gdm3-3.28.3/configure.ac --- gdm3-3.28.2/configure.ac 2018-05-17 14:12:49.000000000 +0000 +++ gdm3-3.28.3/configure.ac 2018-08-13 15:04:19.000000000 +0000 @@ -1,7 +1,7 @@ AC_PREREQ([2.60]) AC_INIT([gdm], - [3.28.2], + [3.28.3], [http://bugzilla.gnome.org/enter_bug.cgi?product=gdm]) AC_CONFIG_SRCDIR([daemon/gdm-manager.c]) diff -Nru gdm3-3.28.2/daemon/gdm-display.c gdm3-3.28.3/daemon/gdm-display.c --- gdm3-3.28.2/daemon/gdm-display.c 2018-05-16 18:03:38.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-display.c 2018-08-13 15:00:55.000000000 +0000 @@ -1109,18 +1109,18 @@ self->priv->object_skeleton = g_dbus_object_skeleton_new (self->priv->id); self->priv->display_skeleton = GDM_DBUS_DISPLAY (gdm_dbus_display_skeleton_new ()); - g_signal_connect (self->priv->display_skeleton, "handle-get-id", - G_CALLBACK (handle_get_id), self); - g_signal_connect (self->priv->display_skeleton, "handle-get-remote-hostname", - G_CALLBACK (handle_get_remote_hostname), self); - g_signal_connect (self->priv->display_skeleton, "handle-get-seat-id", - G_CALLBACK (handle_get_seat_id), self); - g_signal_connect (self->priv->display_skeleton, "handle-get-x11-display-name", - G_CALLBACK (handle_get_x11_display_name), self); - g_signal_connect (self->priv->display_skeleton, "handle-is-local", - G_CALLBACK (handle_is_local), self); - g_signal_connect (self->priv->display_skeleton, "handle-is-initial", - G_CALLBACK (handle_is_initial), self); + g_signal_connect_object (self->priv->display_skeleton, "handle-get-id", + G_CALLBACK (handle_get_id), self, 0); + g_signal_connect_object (self->priv->display_skeleton, "handle-get-remote-hostname", + G_CALLBACK (handle_get_remote_hostname), self, 0); + g_signal_connect_object (self->priv->display_skeleton, "handle-get-seat-id", + G_CALLBACK (handle_get_seat_id), self, 0); + g_signal_connect_object (self->priv->display_skeleton, "handle-get-x11-display-name", + G_CALLBACK (handle_get_x11_display_name), self, 0); + g_signal_connect_object (self->priv->display_skeleton, "handle-is-local", + G_CALLBACK (handle_is_local), self, 0); + g_signal_connect_object (self->priv->display_skeleton, "handle-is-initial", + G_CALLBACK (handle_is_initial), self, 0); g_dbus_object_skeleton_add_interface (self->priv->object_skeleton, G_DBUS_INTERFACE_SKELETON (self->priv->display_skeleton)); diff -Nru gdm3-3.28.2/daemon/gdm-display-store.c gdm3-3.28.3/daemon/gdm-display-store.c --- gdm3-3.28.2/daemon/gdm-display-store.c 2017-12-19 15:13:34.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-display-store.c 2018-08-13 15:00:50.000000000 +0000 @@ -76,15 +76,10 @@ static void stored_display_free (StoredDisplay *stored_display) { - char *id; - - gdm_display_get_id (stored_display->display, &id, NULL); - g_signal_emit (G_OBJECT (stored_display->store), signals[DISPLAY_REMOVED], 0, - id); - g_free (id); + stored_display->display); g_debug ("GdmDisplayStore: Unreffing display: %p", stored_display->display); @@ -281,9 +276,9 @@ G_STRUCT_OFFSET (GdmDisplayStoreClass, display_removed), NULL, NULL, - g_cclosure_marshal_VOID__STRING, + g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, - 1, G_TYPE_STRING); + 1, G_TYPE_OBJECT); g_type_class_add_private (klass, sizeof (GdmDisplayStorePrivate)); } diff -Nru gdm3-3.28.2/daemon/gdm-display-store.h gdm3-3.28.3/daemon/gdm-display-store.h --- gdm3-3.28.2/daemon/gdm-display-store.h 2017-12-19 15:13:34.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-display-store.h 2018-08-13 15:00:50.000000000 +0000 @@ -49,7 +49,7 @@ void (* display_added) (GdmDisplayStore *display_store, const char *id); void (* display_removed) (GdmDisplayStore *display_store, - const char *id); + GdmDisplay *display); } GdmDisplayStoreClass; typedef enum diff -Nru gdm3-3.28.2/daemon/gdm-local-display-factory.c gdm3-3.28.3/daemon/gdm-local-display-factory.c --- gdm3-3.28.2/daemon/gdm-local-display-factory.c 2018-01-29 15:11:03.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-local-display-factory.c 2018-08-13 15:00:50.000000000 +0000 @@ -558,18 +558,11 @@ static void on_display_removed (GdmDisplayStore *display_store, - const char *id, + GdmDisplay *display, GdmLocalDisplayFactory *factory) { - GdmDisplay *display; - - display = gdm_display_store_lookup (display_store, id); - - if (display != NULL) { - g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory); - g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory); - - } + g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory); + g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory); } static gboolean diff -Nru gdm3-3.28.2/daemon/gdm-manager.c gdm3-3.28.3/daemon/gdm-manager.c --- gdm3-3.28.2/daemon/gdm-manager.c 2018-05-16 18:03:38.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-manager.c 2018-08-13 15:00:50.000000000 +0000 @@ -1700,19 +1700,18 @@ static void on_display_removed (GdmDisplayStore *display_store, - const char *id, + GdmDisplay *display, GdmManager *manager) { - GdmDisplay *display; + char *id; - display = gdm_display_store_lookup (display_store, id); - if (display != NULL) { - g_dbus_object_manager_server_unexport (manager->priv->object_manager, id); + gdm_display_get_id (display, &id, NULL); + g_dbus_object_manager_server_unexport (manager->priv->object_manager, id); + g_free (id); - g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager); + g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager); - g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, id); - } + g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, display); } static void @@ -2694,9 +2693,9 @@ G_STRUCT_OFFSET (GdmManagerClass, display_removed), NULL, NULL, - g_cclosure_marshal_VOID__STRING, + g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, - 1, G_TYPE_STRING); + 1, G_TYPE_OBJECT); g_object_class_install_property (object_class, PROP_XDMCP_ENABLED, diff -Nru gdm3-3.28.2/daemon/gdm-manager.h gdm3-3.28.3/daemon/gdm-manager.h --- gdm3-3.28.2/daemon/gdm-manager.h 2018-01-23 20:33:23.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-manager.h 2018-08-13 15:00:50.000000000 +0000 @@ -24,6 +24,7 @@ #include +#include "gdm-display.h" #include "gdm-manager-glue.h" G_BEGIN_DECLS @@ -50,7 +51,7 @@ void (* display_added) (GdmManager *manager, const char *id); void (* display_removed) (GdmManager *manager, - const char *id); + GdmDisplay *display); } GdmManagerClass; typedef enum diff -Nru gdm3-3.28.2/daemon/gdm-session-record.c gdm3-3.28.3/daemon/gdm-session-record.c --- gdm3-3.28.2/daemon/gdm-session-record.c 2018-05-16 18:03:38.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-session-record.c 2018-08-03 14:20:49.000000000 +0000 @@ -213,7 +213,9 @@ /* Handle utmp */ #if defined(HAVE_GETUTXENT) g_debug ("Adding or updating utmp record for login"); + setutxent(); pututxline (&session_record); + endutxent(); #elif defined(HAVE_LOGIN) login (&session_record); #endif @@ -256,7 +258,9 @@ /* Handle utmp */ #if defined(HAVE_GETUTXENT) g_debug ("Adding or updating utmp record for logout"); + setutxent(); pututxline (&session_record); + endutxent(); #elif defined(HAVE_LOGOUT) logout (session_record.ut_line); #endif diff -Nru gdm3-3.28.2/daemon/gdm-session-worker.c gdm3-3.28.3/daemon/gdm-session-worker.c --- gdm3-3.28.2/daemon/gdm-session-worker.c 2018-05-16 18:03:38.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-session-worker.c 2018-08-13 15:01:42.000000000 +0000 @@ -1392,6 +1392,7 @@ gdm_session_worker_set_environment_variable (worker, "USER", worker->priv->username); gdm_session_worker_set_environment_variable (worker, "USERNAME", worker->priv->username); gdm_session_worker_set_environment_variable (worker, "HOME", home); + gdm_session_worker_set_environment_variable (worker, "PWD", home); gdm_session_worker_set_environment_variable (worker, "SHELL", shell); } @@ -2025,8 +2026,6 @@ char *home_dir; int stdin_fd = -1, stdout_fd = -1, stderr_fd = -1; gboolean has_journald = FALSE, needs_controlling_terminal = FALSE; - sigset_t mask; - /* Leak the TTY into the session as stdin so that it stays open * without any races. */ if (worker->priv->session_tty_fd > 0) { @@ -2147,19 +2146,6 @@ */ signal (SIGPIPE, SIG_DFL); - /* - * Reset SIGUSR1 to default since it was blocked by the manager - * process for the X server startup handshake - */ - signal (SIGUSR1, SIG_DFL); - - /* - * Reset signal mask to default since it was altered by the - * manager process - */ - sigemptyset (&mask); - sigprocmask (SIG_SETMASK, &mask, NULL); - gdm_session_execute (worker->priv->arguments[0], worker->priv->arguments, (char **) diff -Nru gdm3-3.28.2/daemon/gdm-session-worker-job.c gdm3-3.28.3/daemon/gdm-session-worker-job.c --- gdm3-3.28.2/daemon/gdm-session-worker-job.c 2018-01-23 20:33:23.000000000 +0000 +++ gdm3-3.28.3/daemon/gdm-session-worker-job.c 2018-08-13 15:01:36.000000000 +0000 @@ -117,12 +117,19 @@ static void session_worker_job_child_setup (GdmSessionWorkerJob *session_worker_job) { + sigset_t mask; session_worker_job_setup_journal_fds (); /* Terminate the process when the parent dies */ #ifdef HAVE_SYS_PRCTL_H prctl (PR_SET_PDEATHSIG, SIGTERM); #endif + /* + * Reset signal mask to default since it was altered by the + * manager process + */ + sigemptyset (&mask); + sigprocmask (SIG_SETMASK, &mask, NULL); } static void diff -Nru gdm3-3.28.2/daemon/Makefile.in gdm3-3.28.3/daemon/Makefile.in --- gdm3-3.28.2/daemon/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/daemon/Makefile.in 2018-08-13 15:08:28.000000000 +0000 @@ -106,8 +106,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/61-gdm.rules gdm3-3.28.3/data/61-gdm.rules --- gdm3-3.28.2/data/61-gdm.rules 2018-05-16 15:38:53.000000000 +0000 +++ gdm3-3.28.3/data/61-gdm.rules 2018-07-24 13:02:36.000000000 +0000 @@ -1,2 +1,2 @@ # disable Wayland on Cirrus chipsets -ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="/bin/sh -c '/bin/mkdir /run/gdm ; /usr/bin/printf \"[daemon]\nWaylandEnable=false\" >> /run/gdm/custom.conf'" +ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="/usr/libexec/gdm-disable-wayland" diff -Nru gdm3-3.28.2/data/61-gdm.rules.in gdm3-3.28.3/data/61-gdm.rules.in --- gdm3-3.28.2/data/61-gdm.rules.in 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/data/61-gdm.rules.in 2018-07-17 19:37:17.000000000 +0000 @@ -0,0 +1,2 @@ +# disable Wayland on Cirrus chipsets +ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="@libexecdir@/gdm-disable-wayland" diff -Nru gdm3-3.28.2/data/applications/Makefile.in gdm3-3.28.3/data/applications/Makefile.in --- gdm3-3.28.2/data/applications/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/data/applications/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -93,8 +93,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/autostart/Makefile.in gdm3-3.28.3/data/autostart/Makefile.in --- gdm3-3.28.2/data/autostart/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/data/autostart/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -93,8 +93,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/Makefile.am gdm3-3.28.3/data/Makefile.am --- gdm3-3.28.2/data/Makefile.am 2018-05-16 18:03:38.000000000 +0000 +++ gdm3-3.28.3/data/Makefile.am 2018-08-13 15:00:13.000000000 +0000 @@ -161,6 +161,11 @@ udevrulesdir = $(prefix)/lib/udev/rules.d udevrules_DATA = 61-gdm.rules +EXTRA_DIST += $(srcdir)/61-gdm.rules.in +61-gdm.rules: $(srcdir)/61-gdm.rules.in + sed -e 's,[@]libexecdir[@],$(libexecdir),g' \ + < $< > $@.tmp && mv $@.tmp $@ + EXTRA_DIST += \ $(dconf_db_files) \ $(schemas_in_files) \ diff -Nru gdm3-3.28.2/data/Makefile.in gdm3-3.28.3/data/Makefile.in --- gdm3-3.28.2/data/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/data/Makefile.in 2018-08-13 15:08:28.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) @@ -482,12 +482,12 @@ NULL = EXTRA_DIST = gnome-login.session.in $(pam_redhat_files) \ $(pam_openembedded_files) $(pam_exherbo_files) \ - $(pam_lfs_files) $(pam_arch_files) $(dconf_db_files) \ - $(schemas_in_files) $(schemas_DATA) $(dbusconf_in_files) \ - $(localealias_DATA) $(udevrules_DATA) gdm.schemas.in.in \ - gdm.conf-custom.in Xsession.in Init.in PreSession.in \ - PostSession.in PostLogin org.gnome.login-screen.gschema.xml.in \ - $(NULL) gdm.service.in + $(pam_lfs_files) $(pam_arch_files) $(srcdir)/61-gdm.rules.in \ + $(dconf_db_files) $(schemas_in_files) $(schemas_DATA) \ + $(dbusconf_in_files) $(localealias_DATA) $(udevrules_DATA) \ + gdm.schemas.in.in gdm.conf-custom.in Xsession.in Init.in \ + PreSession.in PostSession.in PostLogin \ + org.gnome.login-screen.gschema.xml.in $(NULL) gdm.service.in SUBDIRS = \ applications \ autostart \ @@ -1143,6 +1143,9 @@ sed -e 's,[@]libexecdir[@],$(libexecdir),g' \ -e 's,[@]CHECK_ACCELERATED_DIR[@],$(CHECK_ACCELERATED_DIR),g' \ < $< > $@.tmp && mv $@.tmp $@ +61-gdm.rules: $(srcdir)/61-gdm.rules.in + sed -e 's,[@]libexecdir[@],$(libexecdir),g' \ + < $< > $@.tmp && mv $@.tmp $@ gdm.service: $(srcdir)/gdm.service.in $(AM_V_GEN)sed \ diff -Nru gdm3-3.28.2/data/pixmaps/16x16/Makefile.in gdm3-3.28.3/data/pixmaps/16x16/Makefile.in --- gdm3-3.28.2/data/pixmaps/16x16/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/data/pixmaps/16x16/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/pixmaps/32x32/Makefile.in gdm3-3.28.3/data/pixmaps/32x32/Makefile.in --- gdm3-3.28.2/data/pixmaps/32x32/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/data/pixmaps/32x32/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/pixmaps/48x48/Makefile.in gdm3-3.28.3/data/pixmaps/48x48/Makefile.in --- gdm3-3.28.2/data/pixmaps/48x48/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/data/pixmaps/48x48/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/data/pixmaps/Makefile.in gdm3-3.28.3/data/pixmaps/Makefile.in --- gdm3-3.28.2/data/pixmaps/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/data/pixmaps/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -93,8 +93,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/debian/changelog gdm3-3.28.3/debian/changelog --- gdm3-3.28.2/debian/changelog 2018-08-01 14:11:08.000000000 +0000 +++ gdm3-3.28.3/debian/changelog 2019-02-19 08:33:26.000000000 +0000 @@ -1,3 +1,67 @@ +gdm3 (3.28.3-0ubuntu18.04.4) bionic-security; urgency=medium + + * SECURITY UPDATE: Access to the logged-in user's session + - debian/patches/CVE-2019-3825-*.patch: fix in + daemon/gdm-manager.c, daemon/gdm-session.c. + - CVE-2019-3825 + + -- Leonidas S. Barbosa Tue, 19 Feb 2019 05:33:26 -0300 + +gdm3 (3.28.3-0ubuntu18.04.3) bionic; urgency=medium + + [ Bin Li ] + * Add utils-add-new-gdm-disable-wayland-binary.patch, cherry-picked + from cosmic. (LP: #1780076) + + -- Bin Li Tue, 09 Oct 2018 09:42:42 +0100 + +gdm3 (3.28.3-0ubuntu18.04.2) bionic; urgency=medium + + [ Bin Li ] + * Add patches to disable wayland for Huawei Hi1710 chipsets.(LP: #1780076) + - data-61-gdm.rules.in.patch + - data-Makefile.am.patch + + [ Didier Roche ] + * debian/gdm3.install: + - install udev rules in the correct folder (following upstream build + fixes). Cherry-picked from cosmic by Bin Li. + + -- Bin Li Fri, 14 Sep 2018 14:23:02 +0100 + +gdm3 (3.28.3-0ubuntu18.04.1) bionic; urgency=medium + + [ Iain Lane ] + * New upstream release 3.28.3 (LP: #1786933): + - CVE-2018-14424 - double free fix + + 0001-display-store-Pass-the-display-object-rather-than-th.patch: Drop. + - lifecycle fixes to libgdm/GdmClient + - follow up fixes dealing with login screen reaping form last release + - allow pam modules to use SIGUSR1 (LP: #1782152) + - set PWD for user session + - tell cirrus not to use wayland + * Drop backported patches included in this release: + - libgdm-drop-support-for-serializing-multiple-opens.patch + - libgdm-fix-pointer-boolean-task-confusion.patch + - libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch + - libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch + - libgdm-get-connection-explicitly.patch + - libgdm-Drop-weak-refs-on-the-GDBusConnection.patch + - libgdm-Unref-the-manager-propagated-from-task.patch + - libgdm-Don-t-double-ref-the-connection-got-from-task.patch + - libgdm-Don-t-leak-connection-on-sync-re-authentication.patch + - libgdm-Use-auto-pointers-and-cleanup-code.patch + - libgdb-Try-to-reuse-connections-from-the-available-proxie.patch + - libgdm-Don-t-save-manager-address.patch + - libgdm-Return-NULL-on-invalid-client-instances.patch + - daemon-gdm-session-record.c-open-close-the-utmp-database.patch + + [ Alberto Milone ] + * ubuntu_nvidia_prime.patch: + - Run scripts for Prime before and after Gdm sessions (LP: #1778011). + + -- Iain Lane Fri, 17 Aug 2018 16:53:31 +0100 + gdm3 (3.28.2-0ubuntu1.4) bionic-security; urgency=medium * SECURITY UPDATE: Use-after-free of disposed transient displays diff -Nru gdm3-3.28.2/debian/gdm3.install gdm3-3.28.3/debian/gdm3.install --- gdm3-3.28.2/debian/gdm3.install 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/gdm3.install 2018-10-09 08:42:42.000000000 +0000 @@ -3,7 +3,7 @@ lib/*/security/*.so usr/bin/gdm-screenshot usr/lib/gdm3/gdm-* -usr/lib/udev +lib/udev # gets renamed to gdm3 in binary-install usr/sbin/gdm usr/share/pixmaps/ diff -Nru gdm3-3.28.2/debian/patches/0001-display-store-Pass-the-display-object-rather-than-th.patch gdm3-3.28.3/debian/patches/0001-display-store-Pass-the-display-object-rather-than-th.patch --- gdm3-3.28.2/debian/patches/0001-display-store-Pass-the-display-object-rather-than-th.patch 2018-08-01 14:11:08.000000000 +0000 +++ gdm3-3.28.3/debian/patches/0001-display-store-Pass-the-display-object-rather-than-th.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ -From fb9b340b12cf147eb15a93dc824491fea5bbd3a4 Mon Sep 17 00:00:00 2001 -From: Chris Coulson -Date: Thu, 19 Jul 2018 18:26:05 +0100 -Subject: [PATCH] display-store: Pass the display object rather than the id in - the removed signal - -By the time GdmDisplayStore emits the "display-removed" signal, the display -is no longer in the store and gdm_display_store_lookup will not work in -signal handlers. - -Change the "display-removed" parameter from the display id to the GdmDisplay -object, so that signal handers can perform any cleanup they need to do ---- - daemon/gdm-display-store.c | 11 +++-------- - daemon/gdm-display-store.h | 2 +- - daemon/gdm-local-display-factory.c | 13 +++---------- - daemon/gdm-manager.c | 19 +++++++++---------- - daemon/gdm-manager.h | 3 ++- - 5 files changed, 18 insertions(+), 30 deletions(-) - ---- a/daemon/gdm-display-store.c -+++ b/daemon/gdm-display-store.c -@@ -76,15 +76,10 @@ - static void - stored_display_free (StoredDisplay *stored_display) - { -- char *id; -- -- gdm_display_get_id (stored_display->display, &id, NULL); -- - g_signal_emit (G_OBJECT (stored_display->store), - signals[DISPLAY_REMOVED], - 0, -- id); -- g_free (id); -+ stored_display->display); - - g_debug ("GdmDisplayStore: Unreffing display: %p", - stored_display->display); -@@ -281,9 +276,9 @@ - G_STRUCT_OFFSET (GdmDisplayStoreClass, display_removed), - NULL, - NULL, -- g_cclosure_marshal_VOID__STRING, -+ g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, -- 1, G_TYPE_STRING); -+ 1, G_TYPE_OBJECT); - - g_type_class_add_private (klass, sizeof (GdmDisplayStorePrivate)); - } ---- a/daemon/gdm-display-store.h -+++ b/daemon/gdm-display-store.h -@@ -49,7 +49,7 @@ - void (* display_added) (GdmDisplayStore *display_store, - const char *id); - void (* display_removed) (GdmDisplayStore *display_store, -- const char *id); -+ GdmDisplay *display); - } GdmDisplayStoreClass; - - typedef enum ---- a/daemon/gdm-local-display-factory.c -+++ b/daemon/gdm-local-display-factory.c -@@ -558,18 +558,11 @@ - - static void - on_display_removed (GdmDisplayStore *display_store, -- const char *id, -+ GdmDisplay *display, - GdmLocalDisplayFactory *factory) - { -- GdmDisplay *display; -- -- display = gdm_display_store_lookup (display_store, id); -- -- if (display != NULL) { -- g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory); -- g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory); -- -- } -+ g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory); -+ g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory); - } - - static gboolean ---- a/daemon/gdm-manager.c -+++ b/daemon/gdm-manager.c -@@ -1700,19 +1700,18 @@ - - static void - on_display_removed (GdmDisplayStore *display_store, -- const char *id, -+ GdmDisplay *display, - GdmManager *manager) - { -- GdmDisplay *display; -+ char *id; - -- display = gdm_display_store_lookup (display_store, id); -- if (display != NULL) { -- g_dbus_object_manager_server_unexport (manager->priv->object_manager, id); -+ gdm_display_get_id (display, &id, NULL); -+ g_dbus_object_manager_server_unexport (manager->priv->object_manager, id); -+ g_free (id); - -- g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager); -+ g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), manager); - -- g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, id); -- } -+ g_signal_emit (manager, signals[DISPLAY_REMOVED], 0, display); - } - - static void -@@ -2694,9 +2693,9 @@ - G_STRUCT_OFFSET (GdmManagerClass, display_removed), - NULL, - NULL, -- g_cclosure_marshal_VOID__STRING, -+ g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, -- 1, G_TYPE_STRING); -+ 1, G_TYPE_OBJECT); - - g_object_class_install_property (object_class, - PROP_XDMCP_ENABLED, ---- a/daemon/gdm-manager.h -+++ b/daemon/gdm-manager.h -@@ -24,6 +24,7 @@ - - #include - -+#include "gdm-display.h" - #include "gdm-manager-glue.h" - - G_BEGIN_DECLS -@@ -50,7 +51,7 @@ - void (* display_added) (GdmManager *manager, - const char *id); - void (* display_removed) (GdmManager *manager, -- const char *id); -+ GdmDisplay *display); - } GdmManagerClass; - - typedef enum diff -Nru gdm3-3.28.2/debian/patches/CVE-2019-3825-1.patch gdm3-3.28.3/debian/patches/CVE-2019-3825-1.patch --- gdm3-3.28.2/debian/patches/CVE-2019-3825-1.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/CVE-2019-3825-1.patch 2019-02-19 08:26:17.000000000 +0000 @@ -0,0 +1,26 @@ +From 7726c81db92d2339fc468ed41c967f5412db66ed Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 6 Feb 2019 16:14:52 -0500 +Subject: [PATCH] manager: don't kill timed login session immediately after it + starts + +At the moment GDM is misidentifying timed login sessions as if +they are automatic login sessions. That leads to their displays +getting killed sometimes shortly after log in. + +This commit corrects the check, so that timed login sessions aren't +treated as autologin sessions. +diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c +index 1943d89..114a11d 100644 +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -1865,7 +1865,8 @@ on_start_user_session (StartUserSessionOperation *operation) + g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL); + create_user_session_for_display (operation->manager, display, allowed_uid); + +- if (g_strcmp0 (operation->service_name, "gdm-autologin") == 0) { ++ if (g_strcmp0 (operation->service_name, "gdm-autologin") == 0 && ++ !gdm_session_client_is_connected (operation->session)) { + /* remove the unused prepared greeter display since we're not going + * to have a greeter */ + gdm_display_store_remove (self->priv->display_store, display); diff -Nru gdm3-3.28.2/debian/patches/CVE-2019-3825-2.patch gdm3-3.28.3/debian/patches/CVE-2019-3825-2.patch --- gdm3-3.28.2/debian/patches/CVE-2019-3825-2.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/CVE-2019-3825-2.patch 2019-02-19 08:31:42.000000000 +0000 @@ -0,0 +1,223 @@ +From d9d22a1c48a528873e3cc84a73fc868507b8dd4d Mon Sep 17 00:00:00 2001 +From: Iain Lane +Date: Thu, 31 Jan 2019 10:52:35 +0000 +Subject: [PATCH] manager,session: Add some debugging around starting + reauthentication + +There's a bug right now dealing with timed login and reauthentication, +but it's not clear what's going on by looking at the logs. + +This commit sprinkles some more logging throughout the code, to make +the bug easier to track. +--- + daemon/gdm-manager.c | 46 ++++++++++++++++++++++++++++++++++++++------ + daemon/gdm-session.c | 25 ++++++++++++++++++++---- + 2 files changed, 61 insertions(+), 10 deletions(-) + +Index: gdm3-3.28.3/daemon/gdm-manager.c +=================================================================== +--- gdm3-3.28.3.orig/daemon/gdm-manager.c ++++ gdm3-3.28.3/daemon/gdm-manager.c +@@ -367,23 +367,40 @@ find_session_for_user_on_seat (GdmManage + + for (node = manager->priv->user_sessions; node != NULL; node = node->next) { + GdmSession *candidate_session = node->data; +- const char *candidate_username, *candidate_seat_id; ++ const char *candidate_username, *candidate_seat_id, *candidate_session_id; + +- if (candidate_session == dont_count_session) ++ candidate_session_id = gdm_session_get_session_id (candidate_session); ++ ++ if (candidate_session == dont_count_session) { ++ g_debug ("GdmSession: Ignoring session %s as requested", ++ candidate_session_id); + continue; ++ } + +- if (!gdm_session_is_running (candidate_session)) ++ if (!gdm_session_is_running (candidate_session)) { ++ g_debug ("GdmSession: Ignoring session %s as it isn't running", ++ candidate_session_id); + continue; ++ } + + candidate_username = gdm_session_get_username (candidate_session); + candidate_seat_id = gdm_session_get_display_seat_id (candidate_session); + ++ g_debug ("GdmManager: Considering session %s on seat %s belonging to user %s", ++ candidate_session_id, ++ candidate_seat_id, ++ candidate_username); ++ + if (g_strcmp0 (candidate_username, username) == 0 && + g_strcmp0 (candidate_seat_id, seat_id) == 0) { ++ g_debug ("GdmManager: yes, found session %s", candidate_session_id); + return candidate_session; + } ++ ++ g_debug ("GdmManager: no, will not use session %s", candidate_session_id); + } + ++ g_debug ("GdmManager: no matching sessions found"); + return NULL; + } + +@@ -867,8 +884,12 @@ gdm_manager_handle_open_session (GdmDBus + #endif + if (session == NULL) { + session = get_user_session_for_display (display); ++ g_debug ("GdmSession: Considering session %s for username %s", ++ gdm_session_get_session_id (session), ++ gdm_session_get_username (session)); + + if (gdm_session_is_running (session)) { ++ g_debug ("GdmSession: the session is running, and therefore can't be used"); + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_ACCESS_DENIED, +@@ -1044,6 +1065,10 @@ open_temporary_reauthentication_channel + environment); + g_strfreev (environment); + ++ g_debug ("GdmSession: Created session for temporary reauthentication channel for user %d (seat %s)", ++ (int) uid, ++ seat_id); ++ + g_object_set_data_full (G_OBJECT (session), + "caller-session-id", + g_strdup (session_id), +@@ -1123,11 +1148,13 @@ gdm_manager_handle_open_reauthentication + } + + if (is_login_screen) { ++ g_debug ("GdmManager: looking for login screen session for user %s on seat %s", username, seat_id); + session = find_session_for_user_on_seat (self, + username, + seat_id, + NULL); + } else { ++ g_debug ("GdmManager: looking for user session on display"); + session = get_user_session_for_display (display); + } + +@@ -2104,7 +2131,7 @@ on_session_client_connected (GdmSession + gboolean enabled; + gboolean allow_timed_login = FALSE; + +- g_debug ("GdmManager: client connected"); ++ g_debug ("GdmManager: client with pid %d connected", (int) pid_of_client); + + display = get_display_for_user_session (session); + +@@ -2150,7 +2177,7 @@ on_session_client_disconnected (GdmSessi + GPid pid_of_client, + GdmManager *manager) + { +- g_debug ("GdmManager: client disconnected"); ++ g_debug ("GdmManager: client with pid %d disconnected", (int) pid_of_client); + } + + typedef struct +@@ -2217,9 +2244,10 @@ on_session_conversation_started (GdmSess + gboolean enabled; + char *username; + +- g_debug ("GdmManager: session conversation started for service %s", service_name); ++ g_debug ("GdmManager: session conversation started for service %s on session", service_name); + + if (g_strcmp0 (service_name, "gdm-autologin") != 0) { ++ g_debug ("GdmManager: ignoring session conversation since its not automatic login conversation"); + return; + } + +@@ -2329,6 +2357,12 @@ create_user_session_for_display (GdmMana + display_auth_file, + display_is_local, + NULL); ++ ++ g_debug ("GdmSession: Created user session for user %d on display %s (seat %s)", ++ (int) allowed_user, ++ display_id, ++ display_seat_id); ++ + g_free (display_name); + g_free (remote_hostname); + g_free (display_auth_file); +Index: gdm3-3.28.3/daemon/gdm-session.c +=================================================================== +--- gdm3-3.28.3.orig/daemon/gdm-session.c ++++ gdm3-3.28.3/daemon/gdm-session.c +@@ -643,7 +643,10 @@ gdm_session_select_user (GdmSession *sel + const char *text) + { + +- g_debug ("GdmSession: Setting user: '%s'", text); ++ g_debug ("GdmSession: selecting user '%s' for session '%s' (%p)", ++ text, ++ gdm_session_get_session_id (self), ++ self); + + g_free (self->priv->selected_user); + self->priv->selected_user = g_strdup (text); +@@ -1418,6 +1421,7 @@ gdm_session_handle_client_select_user (G + gdm_dbus_greeter_complete_select_user (greeter_interface, + invocation); + } ++ g_debug ("GdmSession: client selected user '%s' on session (%p)", username, self); + gdm_session_select_user (self, username); + return TRUE; + } +@@ -1474,7 +1478,10 @@ gdm_session_handle_client_begin_auto_log + invocation); + } + +- g_debug ("GdmSession: begin auto login for user '%s'", username); ++ g_debug ("GdmSession: client requesting automatic login for user '%s' on session '%s' (%p)", ++ username, ++ gdm_session_get_session_id (self), ++ self); + + gdm_session_setup_for_user (self, "gdm-autologin", username); + +@@ -1777,7 +1784,9 @@ setup_outside_server (GdmSession *self) + GDBusServer *server; + GError *error = NULL; + +- g_debug ("GdmSession: Creating D-Bus server for greeters and such"); ++ g_debug ("GdmSession: Creating D-Bus server for greeters and such for session %s (%p)", ++ gdm_session_get_session_id (self), ++ self); + + observer = g_dbus_auth_observer_new (); + g_signal_connect_object (observer, +@@ -2159,7 +2168,7 @@ gdm_session_start_conversation (GdmSessi + conversation->job = NULL; + } + +- g_debug ("GdmSession: starting conversation %s", service_name); ++ g_debug ("GdmSession: starting conversation %s for session (%p)", service_name, self); + + conversation = start_conversation (self, service_name); + +@@ -2318,6 +2327,10 @@ gdm_session_setup_for_user (GdmSession * + + update_session_type (self); + ++ g_debug ("GdmSession: Set up service %s for username %s on session (%p)", ++ service_name, ++ username, ++ self); + gdm_session_select_user (self, username); + + self->priv->is_program_session = FALSE; +@@ -2940,6 +2953,10 @@ gdm_session_start_reauthentication (GdmS + + g_return_if_fail (conversation != NULL); + ++ g_debug ("GdmSession: starting reauthentication for session %s for client with pid %d", ++ conversation->session_id, ++ (int) uid_of_caller); ++ + conversation->reauth_pid_of_caller = pid_of_caller; + + gdm_dbus_worker_call_start_reauthentication (conversation->worker_proxy, diff -Nru gdm3-3.28.2/debian/patches/CVE-2019-3825-3.patch gdm3-3.28.3/debian/patches/CVE-2019-3825-3.patch --- gdm3-3.28.2/debian/patches/CVE-2019-3825-3.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/CVE-2019-3825-3.patch 2019-02-19 08:32:20.000000000 +0000 @@ -0,0 +1,127 @@ +From 94d9fec87960e3ff5f7b75dadcde2807db148fbd Mon Sep 17 00:00:00 2001 +From: Iain Lane +Date: Thu, 31 Jan 2019 17:51:52 +0000 +Subject: [PATCH] session: Don't allow greeter operations on an running session + +If a client has a reference to a session that starts running, +refuse to allow further operations on the session. + +CVE-2019-3825 +--- + daemon/gdm-session.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 75 insertions(+) + +Index: gdm3-3.28.3/daemon/gdm-session.c +=================================================================== +--- gdm3-3.28.3.orig/daemon/gdm-session.c ++++ gdm3-3.28.3/daemon/gdm-session.c +@@ -1403,6 +1403,21 @@ gdm_session_handle_client_select_session + const char *session, + GdmSession *self) + { ++ if (gdm_session_is_running (self)) { ++ const char *username; ++ ++ username = gdm_session_get_username (self); ++ g_debug ("GdmSession: refusing to select session %s since it's already running (for user %s)", ++ session, ++ username); ++ g_dbus_method_invocation_return_error (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_INVALID_ARGS, ++ "Session already running for user %s", ++ username); ++ return TRUE; ++ } ++ + if (self->priv->greeter_interface != NULL) { + gdm_dbus_greeter_complete_select_session (greeter_interface, + invocation); +@@ -1417,6 +1432,22 @@ gdm_session_handle_client_select_user (G + const char *username, + GdmSession *self) + { ++ if (gdm_session_is_running (self)) { ++ const char *session_username; ++ ++ session_username = gdm_session_get_username (self); ++ g_debug ("GdmSession: refusing to select user %s, since session (%p) already running (for user %s)", ++ username, ++ self, ++ session_username); ++ g_dbus_method_invocation_return_error (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_INVALID_ARGS, ++ "Session already running for user %s", ++ session_username); ++ return TRUE; ++ } ++ + if (self->priv->greeter_interface != NULL) { + gdm_dbus_greeter_complete_select_user (greeter_interface, + invocation); +@@ -1433,6 +1464,20 @@ gdm_session_handle_client_start_session_ + gboolean client_is_ready, + GdmSession *self) + { ++ if (gdm_session_is_running (self)) { ++ const char *username; ++ ++ username = gdm_session_get_username (self); ++ g_debug ("GdmSession: refusing to start session (%p), since it's already running (for user %s)", ++ self, ++ username); ++ g_dbus_method_invocation_return_error (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_INVALID_ARGS, ++ "Session already running for user %s", ++ username); ++ return TRUE; ++ } + + if (self->priv->greeter_interface != NULL) { + gdm_dbus_greeter_complete_start_session_when_ready (greeter_interface, +@@ -1451,6 +1496,20 @@ gdm_session_handle_get_timed_login_detai + GDBusMethodInvocation *invocation, + GdmSession *self) + { ++ if (gdm_session_is_running (self)) { ++ const char *username; ++ ++ username = gdm_session_get_username (self); ++ g_debug ("GdmSession: refusing to give timed login details, session (%p) already running (for user %s)", ++ self, ++ username); ++ g_dbus_method_invocation_return_error (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_INVALID_ARGS, ++ "Session already running for user %s", ++ username); ++ return TRUE; ++ } + + if (self->priv->greeter_interface != NULL) { + gdm_dbus_greeter_complete_get_timed_login_details (greeter_interface, +@@ -1473,6 +1532,22 @@ gdm_session_handle_client_begin_auto_log + const char *username, + GdmSession *self) + { ++ const char *session_username; ++ ++ if (gdm_session_is_running (self)) { ++ session_username = gdm_session_get_username (self); ++ g_debug ("GdmSession: refusing auto login operation, session (%p) already running for user %s (%s requested)", ++ self, ++ session_username, ++ username); ++ g_dbus_method_invocation_return_error (invocation, ++ G_DBUS_ERROR, ++ G_DBUS_ERROR_INVALID_ARGS, ++ "Session already owned by user %s", ++ session_username); ++ return TRUE; ++ } ++ + if (self->priv->greeter_interface != NULL) { + gdm_dbus_greeter_complete_begin_auto_login (greeter_interface, + invocation); diff -Nru gdm3-3.28.2/debian/patches/CVE-2019-3825-4.patch gdm3-3.28.3/debian/patches/CVE-2019-3825-4.patch --- gdm3-3.28.2/debian/patches/CVE-2019-3825-4.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/CVE-2019-3825-4.patch 2019-02-19 08:33:01.000000000 +0000 @@ -0,0 +1,47 @@ +From dd45295425c5a843c30aa8797b02d59ff488acb8 Mon Sep 17 00:00:00 2001 +From: Iain Lane +Date: Mon, 4 Feb 2019 15:12:38 +0000 +Subject: [PATCH] GdmManager: Don't perform timed login if session gets started + +At the moment it's possible for the login screen to initiate +a timed login operation shortly after a user successfully starts +their session. + +GDM won't complete the timed login operation, since a session is +already running, but will erroneously overwrite the username +associated with the session, misattributing the users session +to the timed login user. + +Later, attempts to log in as the timed user will instead unlock the +session for the other user, since that session is now associated +with the timed login user. + +This commit refuses timed login requests on sessions that are +already running, so the username doesn't get corrupted. + +CVE-2019-3825 + +Closes https://gitlab.gnome.org/GNOME/gdm/issues/460 +--- + daemon/gdm-manager.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Index: gdm3-3.28.3/daemon/gdm-manager.c +=================================================================== +--- gdm3-3.28.3.orig/daemon/gdm-manager.c ++++ gdm3-3.28.3/daemon/gdm-manager.c +@@ -2133,6 +2133,14 @@ on_session_client_connected (GdmSession + + g_debug ("GdmManager: client with pid %d connected", (int) pid_of_client); + ++ if (gdm_session_is_running (session)) { ++ const char *session_username; ++ session_username = gdm_session_get_username (session); ++ g_debug ("GdmManager: ignoring connection, since session already running (for user %s)", ++ session_username); ++ return; ++ } ++ + display = get_display_for_user_session (session); + + if (display == NULL) { diff -Nru gdm3-3.28.2/debian/patches/daemon-gdm-session-record.c-open-close-the-utmp-database.patch gdm3-3.28.3/debian/patches/daemon-gdm-session-record.c-open-close-the-utmp-database.patch --- gdm3-3.28.2/debian/patches/daemon-gdm-session-record.c-open-close-the-utmp-database.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/daemon-gdm-session-record.c-open-close-the-utmp-database.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -From: Jason Pleau -Date: Wed, 30 May 2018 21:48:22 -0400 -Subject: daemon/gdm-session-record.c: open/close the utmp database - -pututxline() was used without first opening the utxmp database and -without closing it, preventing the logout entry from being fully -committed. - -This caused the number of logged-in users to increment after each login, -as logging out did not correctly remove the user login record from utmp. - -This commit wraps pututxline() between setutxent() and endutxent(), -making sure that the login/logout operation are fully flushed. - -Fixes #381 ---- - daemon/gdm-session-record.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c -index 487f100..d2df588 100644 ---- a/daemon/gdm-session-record.c -+++ b/daemon/gdm-session-record.c -@@ -213,7 +213,9 @@ gdm_session_record_login (GPid session_pid, - /* Handle utmp */ - #if defined(HAVE_GETUTXENT) - g_debug ("Adding or updating utmp record for login"); -+ setutxent(); - pututxline (&session_record); -+ endutxent(); - #elif defined(HAVE_LOGIN) - login (&session_record); - #endif -@@ -256,7 +258,9 @@ gdm_session_record_logout (GPid session_pid, - /* Handle utmp */ - #if defined(HAVE_GETUTXENT) - g_debug ("Adding or updating utmp record for logout"); -+ setutxent(); - pututxline (&session_record); -+ endutxent(); - #elif defined(HAVE_LOGOUT) - logout (session_record.ut_line); - #endif diff -Nru gdm3-3.28.2/debian/patches/data-61-gdm.rules.in.patch gdm3-3.28.3/debian/patches/data-61-gdm.rules.in.patch --- gdm3-3.28.2/debian/patches/data-61-gdm.rules.in.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/data-61-gdm.rules.in.patch 2018-10-09 08:42:42.000000000 +0000 @@ -0,0 +1,27 @@ +From: Bin Li +Date: Wed, 29 Aug 2018 16:47:46 +0800 +Subject: data: 61-gdm.rules.in + +Disable wayland for Huawei Hi1710 chipsets. + +The login screen is skewed/distorted on arm server, and I couldn't +find root cause, and no other developer ever has access to the hardware. + +https://gitlab.gnome.org/GNOME/mutter/issues/219 + +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1780076 +Bug: https://gitlab.gnome.org/GNOME/mutter/issues/219 +Origin: https://gitlab.gnome.org/GNOME/gdm/merge_requests/38 +--- + data/61-gdm.rules.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in +index de8e179..c9f6110 100644 +--- a/data/61-gdm.rules.in ++++ b/data/61-gdm.rules.in +@@ -1,2 +1,4 @@ + # disable Wayland on Cirrus chipsets + ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="@libexecdir@/gdm-disable-wayland" ++# disable Wayland on Hi1710 chipsets ++ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-disable-wayland" diff -Nru gdm3-3.28.2/debian/patches/data-Makefile.am.patch gdm3-3.28.3/debian/patches/data-Makefile.am.patch --- gdm3-3.28.2/debian/patches/data-Makefile.am.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/data-Makefile.am.patch 2018-10-09 08:42:42.000000000 +0000 @@ -0,0 +1,27 @@ +From: Bin Li +Date: Thu, 23 Aug 2018 15:15:24 +0800 +Subject: data: Makefile.am + +The $prefix was /usr in general, but rules in /usr/lib/udev/ can't +be loaded by udev, so just remove it. + +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1780076 +Bug: https://gitlab.gnome.org/GNOME/mutter/issues/219 +Origin: https://gitlab.gnome.org/GNOME/gdm/merge_requests/35 +--- + data/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/data/Makefile.am b/data/Makefile.am +index a56f32d..774f2cb 100644 +--- a/data/Makefile.am ++++ b/data/Makefile.am +@@ -160,7 +160,7 @@ if ENABLE_ARCH_PAM_CONFIG + pam_files = $(pam_arch_files) + endif + +-udevrulesdir = $(prefix)/lib/udev/rules.d ++udevrulesdir = /lib/udev/rules.d + udevrules_DATA = 61-gdm.rules + + EXTRA_DIST += $(srcdir)/61-gdm.rules.in diff -Nru gdm3-3.28.2/debian/patches/libgdb-Try-to-reuse-connections-from-the-available-proxie.patch gdm3-3.28.3/debian/patches/libgdb-Try-to-reuse-connections-from-the-available-proxie.patch --- gdm3-3.28.2/debian/patches/libgdb-Try-to-reuse-connections-from-the-available-proxie.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdb-Try-to-reuse-connections-from-the-available-proxie.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,162 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Sat, 2 Jun 2018 19:34:08 +0200 -Subject: libgdb: Try to reuse connections from the available proxies - -Instead of using the hard-to-maintain shared pointer to the dbus connection -to the manager and reset it when the proxies that use it are deleted, just -look which proxy is currently available and try to reuse the connection -from it. - -Fixes #386 ---- - libgdm/gdm-client.c | 70 +++++++++++++++++++++++++++++------------------------ - 1 file changed, 39 insertions(+), 31 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 7b42b6c..acf016a 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -46,7 +46,6 @@ struct GdmClientPrivate - GdmGreeter *greeter; - GdmRemoteGreeter *remote_greeter; - GdmChooser *chooser; -- GDBusConnection *connection; - char *address; - - char **enabled_extensions; -@@ -71,6 +70,28 @@ gdm_client_error_quark (void) - return error_quark; - } - -+static GDBusConnection * -+gdm_client_get_open_connection (GdmClient *client) -+{ -+ GDBusProxy *proxy = NULL; -+ -+ if (client->priv->user_verifier != NULL) { -+ proxy = G_DBUS_PROXY (client->priv->user_verifier); -+ } else if (client->priv->greeter != NULL) { -+ proxy = G_DBUS_PROXY (client->priv->greeter); -+ } else if (client->priv->remote_greeter != NULL) { -+ proxy = G_DBUS_PROXY (client->priv->remote_greeter); -+ } else if (client->priv->chooser != NULL) { -+ proxy = G_DBUS_PROXY (client->priv->chooser); -+ } -+ -+ if (proxy != NULL) { -+ return g_dbus_proxy_get_connection (proxy); -+ } -+ -+ return NULL; -+} -+ - static void - on_got_manager (GObject *object, - GAsyncResult *result, -@@ -399,12 +420,15 @@ gdm_client_get_connection_sync (GdmClient *client, - GError **error) - { - g_autoptr(GdmManager) manager = NULL; -+ GDBusConnection *connection; - gboolean ret; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - -- if (client->priv->connection != NULL) { -- return g_object_ref (client->priv->connection); -+ connection = gdm_client_get_open_connection (client); -+ -+ if (connection != NULL) { -+ return g_object_ref (connection); - } - - manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -@@ -429,23 +453,19 @@ gdm_client_get_connection_sync (GdmClient *client, - - g_debug ("GdmClient: connecting to address: %s", client->priv->address); - -- client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, -- G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, -- NULL, -- cancellable, -- error); -+ connection = g_dbus_connection_new_for_address_sync (client->priv->address, -+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, -+ NULL, -+ cancellable, -+ error); - -- if (client->priv->connection == NULL) { -+ if (connection == NULL) { - g_clear_pointer (&client->priv->address, g_free); - goto out; - } - -- g_object_add_weak_pointer (G_OBJECT (client->priv->connection), -- (gpointer *) -- &client->priv->connection); -- - out: -- return client->priv->connection; -+ return connection; - } - - static void -@@ -545,12 +565,6 @@ gdm_client_get_connection_finish (GdmClient *client, - return NULL; - } - -- if (client->priv->connection == NULL) { -- client->priv->connection = connection; -- g_object_add_weak_pointer (G_OBJECT (client->priv->connection), -- (gpointer *) &client->priv->connection); -- } -- - return connection; - } - -@@ -561,6 +575,7 @@ gdm_client_get_connection (GdmClient *client, - gpointer user_data) - { - GTask *task; -+ GDBusConnection *connection; - - g_return_if_fail (GDM_IS_CLIENT (client)); - -@@ -569,9 +584,10 @@ gdm_client_get_connection (GdmClient *client, - callback, - user_data); - -- if (client->priv->connection != NULL) { -+ connection = gdm_client_get_open_connection (client); -+ if (connection != NULL) { - g_task_return_pointer (task, -- g_object_ref (client->priv->connection), -+ g_object_ref (connection), - (GDestroyNotify) g_object_unref); - g_object_unref (task); - return; -@@ -775,7 +791,7 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - if (strcmp (client->priv->enabled_extensions[i], - gdm_user_verifier_choice_list_interface_info ()->name) == 0) { - GdmUserVerifierChoiceList *choice_list_interface; -- choice_list_interface = gdm_user_verifier_choice_list_proxy_new_sync (client->priv->connection, -+ choice_list_interface = gdm_user_verifier_choice_list_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1509,14 +1525,6 @@ gdm_client_finalize (GObject *object) - &client->priv->chooser); - } - -- if (client->priv->connection != NULL) { -- g_object_remove_weak_pointer (G_OBJECT (client->priv->connection), -- (gpointer *) -- &client->priv->connection); -- } -- -- g_clear_object (&client->priv->connection); -- - g_strfreev (client->priv->enabled_extensions); - g_free (client->priv->address); - diff -Nru gdm3-3.28.2/debian/patches/libgdm-Don-t-double-ref-the-connection-got-from-task.patch gdm3-3.28.3/debian/patches/libgdm-Don-t-double-ref-the-connection-got-from-task.patch --- gdm3-3.28.2/debian/patches/libgdm-Don-t-double-ref-the-connection-got-from-task.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Don-t-double-ref-the-connection-got-from-task.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Fri, 1 Jun 2018 17:16:35 +0200 -Subject: libgdm: Don't double-ref the connection got from task - -Both if we re-use the shared connection in `gdm_client_get_connection` and if -we create a new one in `on_connected`, we steal the pointer here by using -`g_task_propagate_pointer` and thus we don't have to add an additional -reference to this connection when returning, or it won't ever be consumed by -function customers. ---- - libgdm/gdm-client.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index fa4ba84..3629214 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -536,7 +536,7 @@ gdm_client_get_connection_finish (GdmClient *client, - GAsyncResult *result, - GError **error) - { -- GDBusConnection *connection = NULL; -+ GDBusConnection *connection; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - -@@ -551,7 +551,7 @@ gdm_client_get_connection_finish (GdmClient *client, - (gpointer *) &client->priv->connection); - } - -- return g_object_ref (connection); -+ return connection; - } - - static void diff -Nru gdm3-3.28.2/debian/patches/libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch gdm3-3.28.3/debian/patches/libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch --- gdm3-3.28.2/debian/patches/libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Mon, 4 Jun 2018 22:34:59 +0200 -Subject: libgdm: don't keep manager proxy around longer than we need it -MIME-Version: 1.0 -Content-Type: text/plain; charset="utf-8" -Content-Transfer-Encoding: 8bit - -Right now we keep the manager proxy alive long after we need it. -It doesn't get cleared until one of the other proxies go away. - -That is not only unnecessary but illogical and confusing. - -This commit changes the manager proxy to be transient—only alive -long enough to get what we need from it. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 127 +++++++++++++--------------------------------------- - 1 file changed, 30 insertions(+), 97 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 06dfe72..c34121e 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -40,8 +40,6 @@ - - struct GdmClientPrivate - { -- GdmManager *manager; -- - GdmUserVerifier *user_verifier; - GHashTable *user_verifier_extensions; - -@@ -74,34 +72,24 @@ gdm_client_error_quark (void) - } - - static void --on_got_manager (GdmManager *manager, -+on_got_manager (GObject *object, - GAsyncResult *result, - GTask *task) - { - GdmClient *client; -- GdmManager *new_manager; -- GError *error; -+ GError *error; -+ g_autoptr(GdmManager) manager = NULL; - - client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); - - error = NULL; -- new_manager = gdm_manager_proxy_new_finish (result, &error); -- -- if (client->priv->manager == NULL) { -- client->priv->manager = new_manager; -- -- } else { -- g_object_ref (client->priv->manager); -- g_object_unref (new_manager); -- -- g_clear_error (&error); -- } -+ manager = gdm_manager_proxy_new_finish (result, &error); - - if (error != NULL) { - g_task_return_error (task, error); - } else { - g_task_return_pointer (task, -- g_object_ref (client->priv->manager), -+ g_object_ref (manager), - (GDestroyNotify) g_object_unref); - } - -@@ -122,14 +110,6 @@ get_manager (GdmClient *client, - callback, - user_data); - -- if (client->priv->manager != NULL) { -- g_task_return_pointer (task, -- g_object_ref (client->priv->manager), -- (GDestroyNotify) g_object_unref); -- g_object_unref (task); -- return; -- } -- - gdm_manager_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", -@@ -404,7 +384,7 @@ on_got_manager_for_reauthentication (GdmClient *client, - - cancellable = g_task_get_cancellable (task); - username = g_object_get_data (G_OBJECT (task), "username"); -- gdm_manager_call_open_reauthentication_channel (client->priv->manager, -+ gdm_manager_call_open_reauthentication_channel (manager, - username, - cancellable, - (GAsyncReadyCallback) -@@ -418,6 +398,7 @@ gdm_client_open_connection_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -+ g_autoptr(GdmManager) manager = NULL; - gboolean ret; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -@@ -427,24 +408,23 @@ gdm_client_open_connection_sync (GdmClient *client, - return TRUE; - } - -- client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -- G_DBUS_PROXY_FLAGS_NONE, -- "org.gnome.DisplayManager", -- "/org/gnome/DisplayManager/Manager", -- cancellable, -- error); -+ manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -+ G_DBUS_PROXY_FLAGS_NONE, -+ "org.gnome.DisplayManager", -+ "/org/gnome/DisplayManager/Manager", -+ cancellable, -+ error); - -- if (client->priv->manager == NULL) { -+ if (manager == NULL) { - goto out; - } - -- ret = gdm_manager_call_open_session_sync (client->priv->manager, -+ ret = gdm_manager_call_open_session_sync (manager, - &client->priv->address, - cancellable, - error); - - if (!ret) { -- g_clear_object (&client->priv->manager); - goto out; - } - -@@ -457,7 +437,6 @@ gdm_client_open_connection_sync (GdmClient *client, - error); - - if (client->priv->connection == NULL) { -- g_clear_object (&client->priv->manager); - g_clear_pointer (&client->priv->address, g_free); - goto out; - } -@@ -544,7 +523,7 @@ on_got_manager_for_opening_connection (GdmClient *client, - } - - cancellable = g_task_get_cancellable (task); -- gdm_manager_call_open_session (client->priv->manager, -+ gdm_manager_call_open_session (manager, - cancellable, - (GAsyncReadyCallback) - on_session_opened, -@@ -627,28 +606,25 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - GError **error) - { - GDBusConnection *connection; -+ g_autoptr(GdmManager) manager = NULL; - GdmUserVerifier *user_verifier = NULL; - gboolean ret; - char *address; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - -- if (client->priv->manager == NULL) { -- client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -- G_DBUS_PROXY_FLAGS_NONE, -- "org.gnome.DisplayManager", -- "/org/gnome/DisplayManager/Manager", -- cancellable, -- error); -+ manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -+ G_DBUS_PROXY_FLAGS_NONE, -+ "org.gnome.DisplayManager", -+ "/org/gnome/DisplayManager/Manager", -+ cancellable, -+ error); - -- if (client->priv->manager == NULL) { -- goto out; -- } -- } else { -- client->priv->manager = g_object_ref (client->priv->manager); -+ if (manager == NULL) { -+ goto out; - } - -- ret = gdm_manager_call_open_reauthentication_channel_sync (client->priv->manager, -+ ret = gdm_manager_call_open_reauthentication_channel_sync (manager, - username, - &address, - cancellable, -@@ -684,11 +660,6 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - (GWeakNotify) - g_object_unref, - connection); -- -- g_object_weak_ref (G_OBJECT (user_verifier), -- (GWeakNotify) -- g_clear_object, -- &client->priv->manager); - } - - out: -@@ -794,11 +765,7 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_clear_object, -- &client->priv->manager); -- g_object_weak_ref (G_OBJECT (client->priv->user_verifier), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -+ &client->priv->connection); - - if (client->priv->enabled_extensions != NULL) { - gboolean res; -@@ -941,11 +908,6 @@ gdm_client_get_user_verifier_finish (GdmClient *client, - g_object_unref, - client->priv->connection); - -- g_object_weak_ref (G_OBJECT (client->priv->user_verifier), -- (GWeakNotify) -- g_clear_object, -- &client->priv->manager); -- - return user_verifier; - } - -@@ -1115,12 +1077,6 @@ gdm_client_get_greeter_finish (GdmClient *client, - (GWeakNotify) - g_object_unref, - client->priv->connection); -- -- g_object_weak_ref (G_OBJECT (client->priv->greeter), -- (GWeakNotify) -- g_clear_object, -- &client->priv->manager); -- - return greeter; - } - -@@ -1164,11 +1120,7 @@ gdm_client_get_greeter_sync (GdmClient *client, - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_clear_object, -- &client->priv->manager); -- g_object_weak_ref (G_OBJECT (client->priv->greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -+ &client->priv->connection); - - query_for_timed_login_requested_signal (client->priv->greeter); - } -@@ -1301,11 +1253,6 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, - g_object_unref, - client->priv->connection); - -- g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), -- (GWeakNotify) -- g_clear_object, -- &client->priv->manager); -- - return remote_greeter; - } - -@@ -1348,11 +1295,7 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_clear_object, -- &client->priv->manager); -- g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -+ &client->priv->connection); - } - - return client->priv->remote_greeter; -@@ -1483,11 +1426,6 @@ gdm_client_get_chooser_finish (GdmClient *client, - g_object_unref, - client->priv->connection); - -- g_object_weak_ref (G_OBJECT (client->priv->chooser), -- (GWeakNotify) -- g_clear_object, -- &client->priv->manager); -- - return chooser; - } - -@@ -1531,11 +1469,7 @@ gdm_client_get_chooser_sync (GdmClient *client, - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_clear_object, -- &client->priv->manager); -- g_object_weak_ref (G_OBJECT (client->priv->chooser), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -+ &client->priv->connection); - } - - return client->priv->chooser; -@@ -1601,7 +1535,6 @@ gdm_client_finalize (GObject *object) - &client->priv->connection); - } - -- g_clear_object (&client->priv->manager); - g_clear_object (&client->priv->connection); - - g_strfreev (client->priv->enabled_extensions); diff -Nru gdm3-3.28.2/debian/patches/libgdm-Don-t-leak-connection-on-sync-re-authentication.patch gdm3-3.28.3/debian/patches/libgdm-Don-t-leak-connection-on-sync-re-authentication.patch --- gdm3-3.28.2/debian/patches/libgdm-Don-t-leak-connection-on-sync-re-authentication.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Don-t-leak-connection-on-sync-re-authentication.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Fri, 1 Jun 2018 17:20:17 +0200 -Subject: libgdm: Don't leak connection on sync re-authentication - ---- - libgdm/gdm-client.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 3629214..335a040 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -604,7 +604,7 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -- GDBusConnection *connection; -+ g_autoptr(GDBusConnection) connection = NULL; - g_autoptr(GdmManager) manager = NULL; - GdmUserVerifier *user_verifier = NULL; - gboolean ret; diff -Nru gdm3-3.28.2/debian/patches/libgdm-Don-t-save-manager-address.patch gdm3-3.28.3/debian/patches/libgdm-Don-t-save-manager-address.patch --- gdm3-3.28.2/debian/patches/libgdm-Don-t-save-manager-address.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Don-t-save-manager-address.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Sat, 2 Jun 2018 19:44:24 +0200 -Subject: libgdm: Don't save manager address - -There's no need to keep the manager connection address around, and -use autofree to clean it up ---- - libgdm/gdm-client.c | 24 +++++++++--------------- - 1 file changed, 9 insertions(+), 15 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index acf016a..0e8bf43 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -46,7 +46,6 @@ struct GdmClientPrivate - GdmGreeter *greeter; - GdmRemoteGreeter *remote_greeter; - GdmChooser *chooser; -- char *address; - - char **enabled_extensions; - }; -@@ -420,6 +419,7 @@ gdm_client_get_connection_sync (GdmClient *client, - GError **error) - { - g_autoptr(GdmManager) manager = NULL; -+ g_autofree char *address = NULL; - GDBusConnection *connection; - gboolean ret; - -@@ -439,32 +439,26 @@ gdm_client_get_connection_sync (GdmClient *client, - error); - - if (manager == NULL) { -- goto out; -+ return NULL; - } - - ret = gdm_manager_call_open_session_sync (manager, -- &client->priv->address, -+ &address, - cancellable, - error); - - if (!ret) { -- goto out; -+ return NULL; - } - -- g_debug ("GdmClient: connecting to address: %s", client->priv->address); -+ g_debug ("GdmClient: connecting to address: %s", address); - -- connection = g_dbus_connection_new_for_address_sync (client->priv->address, -+ connection = g_dbus_connection_new_for_address_sync (address, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, - NULL, - cancellable, - error); - -- if (connection == NULL) { -- g_clear_pointer (&client->priv->address, g_free); -- goto out; -- } -- -- out: - return connection; - } - -@@ -497,6 +491,7 @@ on_session_opened (GdmManager *manager, - GTask *task) - { - GdmClient *client; -+ g_autofree char *address = NULL; - GCancellable *cancellable; - GError *error; - -@@ -504,7 +499,7 @@ on_session_opened (GdmManager *manager, - - error = NULL; - if (!gdm_manager_call_open_session_finish (manager, -- &client->priv->address, -+ &address, - result, - &error)) { - g_task_return_error (task, error); -@@ -514,7 +509,7 @@ on_session_opened (GdmManager *manager, - } - - cancellable = g_task_get_cancellable (task); -- g_dbus_connection_new_for_address (client->priv->address, -+ g_dbus_connection_new_for_address (address, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, - NULL, - cancellable, -@@ -1526,7 +1521,6 @@ gdm_client_finalize (GObject *object) - } - - g_strfreev (client->priv->enabled_extensions); -- g_free (client->priv->address); - - G_OBJECT_CLASS (gdm_client_parent_class)->finalize (object); - } diff -Nru gdm3-3.28.2/debian/patches/libgdm-drop-support-for-serializing-multiple-opens.patch gdm3-3.28.3/debian/patches/libgdm-drop-support-for-serializing-multiple-opens.patch --- gdm3-3.28.2/debian/patches/libgdm-drop-support-for-serializing-multiple-opens.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-drop-support-for-serializing-multiple-opens.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,189 +0,0 @@ -From: Ray Strode -Date: Mon, 14 May 2018 14:48:31 -0400 -Subject: libgdm: drop support for serializing multiple opens - -Right now libgdm tries to handle multiple simultaneous -open calls at the same time by serializing the requests -and giving them all the same connection. It's broken, -though. - - - The pending_opens list is never populated, so we - end up just doing multiple simultaneous open - operations at a time anyway. - - The finish code ends up calling - g_task_return_error (task, NULL) instead of - g_task_return_pointer in the non-error case. - -Since the feature doesn't work, drop it for now. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 111 +++++++++++++++++++--------------------------------- - 1 file changed, 40 insertions(+), 71 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 294f4f4..a88a5d7 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -51,7 +51,6 @@ struct GdmClientPrivate - GDBusConnection *connection; - char *address; - -- GList *pending_opens; - char **enabled_extensions; - }; - -@@ -421,53 +420,50 @@ gdm_client_open_connection_sync (GdmClient *client, - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - -- if (client->priv->manager == NULL) { -- client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -- G_DBUS_PROXY_FLAGS_NONE, -- "org.gnome.DisplayManager", -- "/org/gnome/DisplayManager/Manager", -- cancellable, -- error); -- -- if (client->priv->manager == NULL) { -- goto out; -- } -- } else { -- client->priv->manager = g_object_ref (client->priv->manager); -+ if (client->priv->connection != NULL) { -+ g_object_ref (client->priv->connection); -+ return TRUE; - } - -- if (client->priv->connection == NULL) { -- ret = gdm_manager_call_open_session_sync (client->priv->manager, -- &client->priv->address, -- cancellable, -- error); -+ client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -+ G_DBUS_PROXY_FLAGS_NONE, -+ "org.gnome.DisplayManager", -+ "/org/gnome/DisplayManager/Manager", -+ cancellable, -+ error); - -- if (!ret) { -- g_clear_object (&client->priv->manager); -- goto out; -- } -+ if (client->priv->manager == NULL) { -+ goto out; -+ } -+ -+ ret = gdm_manager_call_open_session_sync (client->priv->manager, -+ &client->priv->address, -+ cancellable, -+ error); - -- g_debug ("GdmClient: connecting to address: %s", client->priv->address); -+ if (!ret) { -+ g_clear_object (&client->priv->manager); -+ goto out; -+ } - -- client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, -- G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, -- NULL, -- cancellable, -- error); -+ g_debug ("GdmClient: connecting to address: %s", client->priv->address); - -- if (client->priv->connection == NULL) { -- g_clear_object (&client->priv->manager); -- g_clear_pointer (&client->priv->address, g_free); -- goto out; -- } -+ client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, -+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, -+ NULL, -+ cancellable, -+ error); - -- g_object_add_weak_pointer (G_OBJECT (client->priv->connection), -- (gpointer *) -- &client->priv->connection); -- } else { -- client->priv->connection = g_object_ref (client->priv->connection); -+ if (client->priv->connection == NULL) { -+ g_clear_object (&client->priv->manager); -+ g_clear_pointer (&client->priv->address, g_free); -+ goto out; - } - -+ g_object_add_weak_pointer (G_OBJECT (client->priv->connection), -+ (gpointer *) -+ &client->priv->connection); -+ - out: - return client->priv->connection != NULL; - } -@@ -551,25 +547,6 @@ on_got_manager_for_opening_connection (GdmClient *client, - task); - } - --static void --finish_pending_opens (GdmClient *client, -- GError *error) --{ -- GList *node; -- -- for (node = client->priv->pending_opens; -- node != NULL; -- node = node->next) { -- -- GTask *task = node->data; -- -- g_task_return_error (task, error); -- g_object_unref (task); -- } -- g_clear_pointer (&client->priv->pending_opens, -- (GDestroyNotify) g_list_free); --} -- - static gboolean - gdm_client_open_connection_finish (GdmClient *client, - GAsyncResult *result, -@@ -581,7 +558,6 @@ gdm_client_open_connection_finish (GdmClient *client, - - connection = g_task_propagate_pointer (G_TASK (result), error); - if (connection == NULL) { -- finish_pending_opens (client, *error); - return FALSE; - } - -@@ -593,7 +569,6 @@ gdm_client_open_connection_finish (GdmClient *client, - connection = NULL; - } - -- finish_pending_opens (client, NULL); - return TRUE; - } - -@@ -620,17 +595,11 @@ gdm_client_open_connection (GdmClient *client, - return; - } - -- if (client->priv->pending_opens == NULL) { -- get_manager (client, -- cancellable, -- (GAsyncReadyCallback) -- on_got_manager_for_opening_connection, -- task); -- } else { -- client->priv->pending_opens = g_list_prepend (client->priv->pending_opens, -- task); -- } -- -+ get_manager (client, -+ cancellable, -+ (GAsyncReadyCallback) -+ on_got_manager_for_opening_connection, -+ task); - } - - /** diff -Nru gdm3-3.28.2/debian/patches/libgdm-Drop-weak-refs-on-the-GDBusConnection.patch gdm3-3.28.3/debian/patches/libgdm-Drop-weak-refs-on-the-GDBusConnection.patch --- gdm3-3.28.2/debian/patches/libgdm-Drop-weak-refs-on-the-GDBusConnection.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Drop-weak-refs-on-the-GDBusConnection.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -From: Iain Lane -Date: Mon, 14 May 2018 22:32:25 +0200 -Subject: libgdm: Drop weak refs on the GDBusConnection - -The GDBusProxies hold a strong reference to the connection themselves, -so maintaining separate weak references is unnecessary. - -This commit drops those extraneous weak references. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 47 ----------------------------------------------- - 1 file changed, 47 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index e7b93e3..f327344 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -652,13 +652,6 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - cancellable, - error); - -- if (user_verifier != NULL) { -- g_object_weak_ref (G_OBJECT (user_verifier), -- (GWeakNotify) -- g_object_unref, -- connection); -- } -- - out: - return user_verifier; - } -@@ -763,12 +756,6 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), - (gpointer *) - &client->priv->user_verifier); -- g_object_ref (connection); -- g_object_weak_ref (G_OBJECT (client->priv->user_verifier), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -- - if (client->priv->enabled_extensions != NULL) { - gboolean res; - -@@ -908,11 +895,6 @@ gdm_client_get_user_verifier_finish (GdmClient *client, - (gpointer *) - &client->priv->user_verifier); - -- g_object_weak_ref (G_OBJECT (client->priv->user_verifier), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -- - return user_verifier; - } - -@@ -1081,10 +1063,6 @@ gdm_client_get_greeter_finish (GdmClient *client, - (gpointer *) - &client->priv->greeter); - -- g_object_weak_ref (G_OBJECT (client->priv->greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); - return greeter; - } - -@@ -1129,10 +1107,6 @@ gdm_client_get_greeter_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->greeter), - (gpointer *) - &client->priv->greeter); -- g_object_weak_ref (G_OBJECT (client->priv->greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); - - query_for_timed_login_requested_signal (client->priv->greeter); - } -@@ -1263,11 +1237,6 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, - (gpointer *) - &client->priv->remote_greeter); - -- g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -- - return remote_greeter; - } - -@@ -1311,11 +1280,6 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), - (gpointer *) - &client->priv->remote_greeter); -- g_object_ref (connection); -- g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); - } - - return client->priv->remote_greeter; -@@ -1444,12 +1408,6 @@ gdm_client_get_chooser_finish (GdmClient *client, - (gpointer *) - &client->priv->chooser); - -- g_object_ref (connection); -- g_object_weak_ref (G_OBJECT (client->priv->chooser), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); -- - return chooser; - } - -@@ -1493,11 +1451,6 @@ gdm_client_get_chooser_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), - (gpointer *) - &client->priv->chooser); -- g_object_ref (connection); -- g_object_weak_ref (G_OBJECT (client->priv->chooser), -- (GWeakNotify) -- g_object_unref, -- client->priv->connection); - } - - return client->priv->chooser; diff -Nru gdm3-3.28.2/debian/patches/libgdm-fix-pointer-boolean-task-confusion.patch gdm3-3.28.3/debian/patches/libgdm-fix-pointer-boolean-task-confusion.patch --- gdm3-3.28.2/debian/patches/libgdm-fix-pointer-boolean-task-confusion.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-fix-pointer-boolean-task-confusion.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -From: Ray Strode -Date: Mon, 14 May 2018 15:49:50 -0400 -Subject: libgdm: fix pointer/boolean task confusion - -The manager fetching code in GdmClient treats its task -return value as boolean, but it's actually a pointer (the manager) - -This commit corrects the confusion. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index a88a5d7..06dfe72 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -390,11 +390,13 @@ on_got_manager_for_reauthentication (GdmClient *client, - GTask *task) - { - GCancellable *cancellable; -+ GdmManager *manager; - char *username; - GError *error; - - error = NULL; -- if (!g_task_propagate_boolean (G_TASK (result), &error)) { -+ manager = g_task_propagate_pointer (G_TASK (result), &error); -+ if (manager == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; -@@ -530,10 +532,12 @@ on_got_manager_for_opening_connection (GdmClient *client, - GTask *task) - { - GCancellable *cancellable; -+ GdmManager *manager; - GError *error; - - error = NULL; -- if (!g_task_propagate_boolean (G_TASK (result), &error)) { -+ manager = g_task_propagate_pointer (G_TASK (result), &error); -+ if (manager == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; diff -Nru gdm3-3.28.2/debian/patches/libgdm-get-connection-explicitly.patch gdm3-3.28.3/debian/patches/libgdm-get-connection-explicitly.patch --- gdm3-3.28.2/debian/patches/libgdm-get-connection-explicitly.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-get-connection-explicitly.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,393 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Mon, 14 May 2018 22:32:25 +0200 -Subject: libgdm: get connection explicitly - -At the moment we call gdm_client_open_connection and when it finishes, -assume client->priv->connection is implicitly initialized. - -This commit makes the operation more explicit by changing -gdm_client_open_connection to gdm_client_get_connection and returning -the GDBusConnection object directly, instead of returning a boolean. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 136 +++++++++++++++++++++++++++++++--------------------- - 1 file changed, 82 insertions(+), 54 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index e02e3ea..e7b93e3 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -393,10 +393,10 @@ on_got_manager_for_reauthentication (GdmClient *client, - - } - --static gboolean --gdm_client_open_connection_sync (GdmClient *client, -- GCancellable *cancellable, -- GError **error) -+static GDBusConnection * -+gdm_client_get_connection_sync (GdmClient *client, -+ GCancellable *cancellable, -+ GError **error) - { - g_autoptr(GdmManager) manager = NULL; - gboolean ret; -@@ -404,8 +404,7 @@ gdm_client_open_connection_sync (GdmClient *client, - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - - if (client->priv->connection != NULL) { -- g_object_ref (client->priv->connection); -- return TRUE; -+ return g_object_ref (client->priv->connection); - } - - manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, -@@ -446,7 +445,7 @@ gdm_client_open_connection_sync (GdmClient *client, - &client->priv->connection); - - out: -- return client->priv->connection != NULL; -+ return client->priv->connection; - } - - static void -@@ -530,33 +529,31 @@ on_got_manager_for_opening_connection (GdmClient *client, - task); - } - --static gboolean --gdm_client_open_connection_finish (GdmClient *client, -- GAsyncResult *result, -- GError **error) -+static GDBusConnection * -+gdm_client_get_connection_finish (GdmClient *client, -+ GAsyncResult *result, -+ GError **error) - { -- g_autoptr(GDBusConnection) connection = NULL; -+ GDBusConnection *connection = NULL; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - - connection = g_task_propagate_pointer (G_TASK (result), error); - if (connection == NULL) { -- return FALSE; -+ return NULL; - } - - if (client->priv->connection == NULL) { -- client->priv->connection = g_steal_pointer (&connection); -+ client->priv->connection = connection; - g_object_add_weak_pointer (G_OBJECT (client->priv->connection), - (gpointer *) &client->priv->connection); -- } else if (client->priv->connection == connection) { -- connection = NULL; - } - -- return TRUE; -+ return g_object_ref (connection); - } - - static void --gdm_client_open_connection (GdmClient *client, -+gdm_client_get_connection (GdmClient *client, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -@@ -743,15 +740,19 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -+ g_autoptr(GDBusConnection) connection = NULL; -+ - if (client->priv->user_verifier != NULL) { - return g_object_ref (client->priv->user_verifier); - } - -- if (!gdm_client_open_connection_sync (client, cancellable, error)) { -+ connection = gdm_client_get_connection_sync (client, cancellable, error); -+ -+ if (connection == NULL) { - return NULL; - } - -- client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (client->priv->connection, -+ client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -762,6 +763,7 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), - (gpointer *) - &client->priv->user_verifier); -+ g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_object_unref, -@@ -805,22 +807,25 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - } - - static void --on_connection_opened_for_user_verifier (GdmClient *client, -- GAsyncResult *result, -- GTask *task) -+on_connection_for_user_verifier (GdmClient *client, -+ GAsyncResult *result, -+ GTask *task) - { -+ g_autoptr(GDBusConnection) connection = NULL; - GCancellable *cancellable; - GError *error; - - error = NULL; -- if (!gdm_client_open_connection_finish (client, result, &error)) { -+ connection = gdm_client_get_connection_finish (client, result, &error); -+ -+ if (connection == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - cancellable = g_task_get_cancellable (task); -- gdm_user_verifier_proxy_new (client->priv->connection, -+ gdm_user_verifier_proxy_new (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -863,10 +868,10 @@ gdm_client_get_user_verifier (GdmClient *client, - return; - } - -- gdm_client_open_connection (client, -+ gdm_client_get_connection (client, - cancellable, - (GAsyncReadyCallback) -- on_connection_opened_for_user_verifier, -+ on_connection_for_user_verifier, - task); - } - -@@ -975,22 +980,25 @@ on_greeter_proxy_created (GObject *source, - } - - static void --on_connection_opened_for_greeter (GdmClient *client, -- GAsyncResult *result, -- GTask *task) -+on_connection_for_greeter (GdmClient *client, -+ GAsyncResult *result, -+ GTask *task) - { -+ g_autoptr(GDBusConnection) connection = NULL; - GCancellable *cancellable; - GError *error; - - error = NULL; -- if (!gdm_client_open_connection_finish (client, result, &error)) { -+ connection = gdm_client_get_connection_finish (client, result, &error); -+ -+ if (connection == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - cancellable = g_task_get_cancellable (task); -- gdm_greeter_proxy_new (client->priv->connection, -+ gdm_greeter_proxy_new (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1033,10 +1041,10 @@ gdm_client_get_greeter (GdmClient *client, - return; - } - -- gdm_client_open_connection (client, -+ gdm_client_get_connection (client, - cancellable, - (GAsyncReadyCallback) -- on_connection_opened_for_greeter, -+ on_connection_for_greeter, - task); - } - -@@ -1098,15 +1106,19 @@ gdm_client_get_greeter_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -+ g_autoptr(GDBusConnection) connection = NULL; -+ - if (client->priv->greeter != NULL) { - return g_object_ref (client->priv->greeter); - } - -- if (!gdm_client_open_connection_sync (client, cancellable, error)) { -+ connection = gdm_client_get_connection_sync (client, cancellable, error); -+ -+ if (connection == NULL) { - return NULL; - } - -- client->priv->greeter = gdm_greeter_proxy_new_sync (client->priv->connection, -+ client->priv->greeter = gdm_greeter_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1150,22 +1162,25 @@ on_remote_greeter_proxy_created (GObject *object, - } - - static void --on_connection_opened_for_remote_greeter (GdmClient *client, -- GAsyncResult *result, -- GTask *task) -+on_connection_for_remote_greeter (GdmClient *client, -+ GAsyncResult *result, -+ GTask *task) - { -+ g_autoptr(GDBusConnection) connection = NULL; - GCancellable *cancellable; - GError *error; - - error = NULL; -- if (!gdm_client_open_connection_finish (client, result, &error)) { -+ connection = gdm_client_get_connection_finish (client, result, &error); -+ -+ if (connection == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - cancellable = g_task_get_cancellable (task); -- gdm_remote_greeter_proxy_new (client->priv->connection, -+ gdm_remote_greeter_proxy_new (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1208,10 +1223,10 @@ gdm_client_get_remote_greeter (GdmClient *client, - return; - } - -- gdm_client_open_connection (client, -+ gdm_client_get_connection (client, - cancellable, - (GAsyncReadyCallback) -- on_connection_opened_for_remote_greeter, -+ on_connection_for_remote_greeter, - task); - } - -@@ -1273,15 +1288,19 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -+ g_autoptr(GDBusConnection) connection = NULL; -+ - if (client->priv->remote_greeter != NULL) { - return g_object_ref (client->priv->remote_greeter); - } - -- if (!gdm_client_open_connection_sync (client, cancellable, error)) { -+ connection = gdm_client_get_connection_sync (client, cancellable, error); -+ -+ if (connection == NULL) { - return NULL; - } - -- client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (client->priv->connection, -+ client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1292,6 +1311,7 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), - (gpointer *) - &client->priv->remote_greeter); -+ g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_object_unref, -@@ -1323,22 +1343,25 @@ on_chooser_proxy_created (GObject *source, - } - - static void --on_connection_opened_for_chooser (GdmClient *client, -- GAsyncResult *result, -- GTask *task) -+on_connection_for_chooser (GdmClient *client, -+ GAsyncResult *result, -+ GTask *task) - { -+ g_autoptr(GDBusConnection) connection = NULL; - GCancellable *cancellable; - GError *error; - - error = NULL; -- if (!gdm_client_open_connection_finish (client, result, &error)) { -+ connection = gdm_client_get_connection_finish (client, result, &error); -+ -+ if (connection == NULL) { - g_task_return_error (task, error); - g_object_unref (task); - return; - } - - cancellable = g_task_get_cancellable (task); -- gdm_chooser_proxy_new (client->priv->connection, -+ gdm_chooser_proxy_new (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1381,10 +1404,10 @@ gdm_client_get_chooser (GdmClient *client, - return; - } - -- gdm_client_open_connection (client, -+ gdm_client_get_connection (client, - cancellable, - (GAsyncReadyCallback) -- on_connection_opened_for_chooser, -+ on_connection_for_chooser, - task); - } - -@@ -1421,6 +1444,7 @@ gdm_client_get_chooser_finish (GdmClient *client, - (gpointer *) - &client->priv->chooser); - -+ g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, -@@ -1446,16 +1470,19 @@ gdm_client_get_chooser_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) - { -+ g_autoptr(GDBusConnection) connection = NULL; - - if (client->priv->chooser != NULL) { - return g_object_ref (client->priv->chooser); - } - -- if (!gdm_client_open_connection_sync (client, cancellable, error)) { -+ connection = gdm_client_get_connection_sync (client, cancellable, error); -+ -+ if (connection == NULL) { - return NULL; - } - -- client->priv->chooser = gdm_chooser_proxy_new_sync (client->priv->connection, -+ client->priv->chooser = gdm_chooser_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - SESSION_DBUS_PATH, -@@ -1466,6 +1493,7 @@ gdm_client_get_chooser_sync (GdmClient *client, - g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), - (gpointer *) - &client->priv->chooser); -+ g_object_ref (connection); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, diff -Nru gdm3-3.28.2/debian/patches/libgdm-Return-NULL-on-invalid-client-instances.patch gdm3-3.28.3/debian/patches/libgdm-Return-NULL-on-invalid-client-instances.patch --- gdm3-3.28.2/debian/patches/libgdm-Return-NULL-on-invalid-client-instances.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Return-NULL-on-invalid-client-instances.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Mon, 4 Jun 2018 19:13:04 +0200 -Subject: libgdm: Return NULL on invalid client instances - ---- - libgdm/gdm-client.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 0e8bf43..28cb725 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -423,7 +423,7 @@ gdm_client_get_connection_sync (GdmClient *client, - GDBusConnection *connection; - gboolean ret; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - connection = gdm_client_get_open_connection (client); - -@@ -553,7 +553,7 @@ gdm_client_get_connection_finish (GdmClient *client, - { - GDBusConnection *connection; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - connection = g_task_propagate_pointer (G_TASK (result), error); - if (connection == NULL) { -@@ -621,7 +621,7 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - GdmUserVerifier *user_verifier = NULL; - gboolean ret; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, -@@ -722,7 +722,7 @@ gdm_client_open_reauthentication_channel_finish (GdmClient *client, - GAsyncResult *result, - GError **error) - { -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - return g_task_propagate_pointer (G_TASK (result), error); - } -@@ -890,7 +890,7 @@ gdm_client_get_user_verifier_finish (GdmClient *client, - { - GdmUserVerifier *user_verifier; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - if (client->priv->user_verifier != NULL) - return g_object_ref (client->priv->user_verifier); -@@ -1058,7 +1058,7 @@ gdm_client_get_greeter_finish (GdmClient *client, - { - GdmGreeter *greeter; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - if (client->priv->greeter != NULL) - return g_object_ref (client->priv->greeter); -@@ -1232,7 +1232,7 @@ gdm_client_get_remote_greeter_finish (GdmClient *client, - { - GdmRemoteGreeter *remote_greeter; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - if (client->priv->remote_greeter != NULL) - return g_object_ref (client->priv->remote_greeter); -@@ -1403,7 +1403,7 @@ gdm_client_get_chooser_finish (GdmClient *client, - { - GdmChooser *chooser; - -- g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); -+ g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - - if (client->priv->chooser != NULL) - return g_object_ref (client->priv->chooser); diff -Nru gdm3-3.28.2/debian/patches/libgdm-Unref-the-manager-propagated-from-task.patch gdm3-3.28.3/debian/patches/libgdm-Unref-the-manager-propagated-from-task.patch --- gdm3-3.28.2/debian/patches/libgdm-Unref-the-manager-propagated-from-task.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Unref-the-manager-propagated-from-task.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Fri, 1 Jun 2018 17:07:41 +0200 -Subject: libgdm: Unref the manager propagated from task - -This instance has already been reffed when passed to the task, and since -we're stealing it with `g_task_propagate_pointer` it won't be unreffed. - -We could also do this in the `on_reauthentication_channel_opened` callback -but since the new task will ref it anyway, we can just be clean and do it -here. ---- - libgdm/gdm-client.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index f327344..fa4ba84 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -390,7 +390,7 @@ on_got_manager_for_reauthentication (GdmClient *client, - (GAsyncReadyCallback) - on_reauthentication_channel_opened, - task); -- -+ g_object_unref (manager); - } - - static GDBusConnection * -@@ -527,6 +527,8 @@ on_got_manager_for_opening_connection (GdmClient *client, - (GAsyncReadyCallback) - on_session_opened, - task); -+ -+ g_object_unref (manager); - } - - static GDBusConnection * diff -Nru gdm3-3.28.2/debian/patches/libgdm-Use-auto-pointers-and-cleanup-code.patch gdm3-3.28.3/debian/patches/libgdm-Use-auto-pointers-and-cleanup-code.patch --- gdm3-3.28.2/debian/patches/libgdm-Use-auto-pointers-and-cleanup-code.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-Use-auto-pointers-and-cleanup-code.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= -Date: Fri, 1 Jun 2018 17:22:20 +0200 -Subject: libgdm: Use auto-pointers and cleanup code - ---- - libgdm/gdm-client.c | 13 +++++-------- - 1 file changed, 5 insertions(+), 8 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index 335a040..7b42b6c 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -606,9 +606,9 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - { - g_autoptr(GDBusConnection) connection = NULL; - g_autoptr(GdmManager) manager = NULL; -+ g_autofree char *address = NULL; - GdmUserVerifier *user_verifier = NULL; - gboolean ret; -- char *address; - - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); - -@@ -620,7 +620,7 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - error); - - if (manager == NULL) { -- goto out; -+ return NULL; - } - - ret = gdm_manager_call_open_reauthentication_channel_sync (manager, -@@ -630,10 +630,10 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - error); - - if (!ret) { -- goto out; -+ return NULL; - } - -- g_debug ("GdmClient: connecting to address: %s", client->priv->address); -+ g_debug ("GdmClient: connecting to address: %s", address); - - connection = g_dbus_connection_new_for_address_sync (address, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, -@@ -642,10 +642,8 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - error); - - if (connection == NULL) { -- g_free (address); -- goto out; -+ return NULL; - } -- g_free (address); - - user_verifier = gdm_user_verifier_proxy_new_sync (connection, - G_DBUS_PROXY_FLAGS_NONE, -@@ -654,7 +652,6 @@ gdm_client_open_reauthentication_channel_sync (GdmClient *client, - cancellable, - error); - -- out: - return user_verifier; - } - diff -Nru gdm3-3.28.2/debian/patches/libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch gdm3-3.28.3/debian/patches/libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch --- gdm3-3.28.2/debian/patches/libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -From: Ray Strode -Date: Tue, 15 May 2018 23:02:36 +0200 -Subject: libgdm: use g_object_unref instead of g_clear_object for weakrefs - -At the moment we add a weakref on each proxy to the connection -object. For the _sync variant functions, When the weakref fires, -they call g_clear_object, clearing the connection, even if other -proxies still have a reference. - -This commit changes that weak ref code to use g_object_unref instead. - -https://bugzilla.gnome.org/show_bug.cgi?id=795940 ---- - libgdm/gdm-client.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c -index c34121e..e02e3ea 100644 ---- a/libgdm/gdm-client.c -+++ b/libgdm/gdm-client.c -@@ -764,8 +764,8 @@ gdm_client_get_user_verifier_sync (GdmClient *client, - &client->priv->user_verifier); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) -- g_clear_object, -- &client->priv->connection); -+ g_object_unref, -+ client->priv->connection); - - if (client->priv->enabled_extensions != NULL) { - gboolean res; -@@ -1119,8 +1119,8 @@ gdm_client_get_greeter_sync (GdmClient *client, - &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) -- g_clear_object, -- &client->priv->connection); -+ g_object_unref, -+ client->priv->connection); - - query_for_timed_login_requested_signal (client->priv->greeter); - } -@@ -1294,8 +1294,8 @@ gdm_client_get_remote_greeter_sync (GdmClient *client, - &client->priv->remote_greeter); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) -- g_clear_object, -- &client->priv->connection); -+ g_object_unref, -+ client->priv->connection); - } - - return client->priv->remote_greeter; -@@ -1468,8 +1468,8 @@ gdm_client_get_chooser_sync (GdmClient *client, - &client->priv->chooser); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) -- g_clear_object, -- &client->priv->connection); -+ g_object_unref, -+ client->priv->connection); - } - - return client->priv->chooser; diff -Nru gdm3-3.28.2/debian/patches/series gdm3-3.28.3/debian/patches/series --- gdm3-3.28.2/debian/patches/series 2018-08-01 14:10:59.000000000 +0000 +++ gdm3-3.28.3/debian/patches/series 2019-02-19 08:33:20.000000000 +0000 @@ -1,17 +1,8 @@ -libgdm-drop-support-for-serializing-multiple-opens.patch -libgdm-fix-pointer-boolean-task-confusion.patch -libgdm-don-t-keep-manager-proxy-around-longer-than-we-nee.patch -libgdm-use-g_object_unref-instead-of-g_clear_object-for-w.patch -libgdm-get-connection-explicitly.patch -libgdm-Drop-weak-refs-on-the-GDBusConnection.patch -libgdm-Unref-the-manager-propagated-from-task.patch -libgdm-Don-t-double-ref-the-connection-got-from-task.patch -libgdm-Don-t-leak-connection-on-sync-re-authentication.patch -libgdm-Use-auto-pointers-and-cleanup-code.patch -libgdb-Try-to-reuse-connections-from-the-available-proxie.patch -libgdm-Don-t-save-manager-address.patch -libgdm-Return-NULL-on-invalid-client-instances.patch -daemon-gdm-session-record.c-open-close-the-utmp-database.patch +# Upstream backports +data-Makefile.am.patch +data-61-gdm.rules.in.patch +utils-add-new-gdm-disable-wayland-binary.patch + 16_xserver_path.patch 90_config_comments.patch 91_dconf_database_path.patch @@ -25,4 +16,7 @@ ubuntu_config_error_dialog.patch ubuntu_dont_set_language_env.patch ubuntu_prefer_ubuntu_session_fallback.patch -0001-display-store-Pass-the-display-object-rather-than-th.patch +CVE-2019-3825-1.patch +CVE-2019-3825-2.patch +CVE-2019-3825-3.patch +CVE-2019-3825-4.patch diff -Nru gdm3-3.28.2/debian/patches/ubuntu_nvidia_prime.patch gdm3-3.28.3/debian/patches/ubuntu_nvidia_prime.patch --- gdm3-3.28.2/debian/patches/ubuntu_nvidia_prime.patch 2018-06-13 12:04:30.000000000 +0000 +++ gdm3-3.28.3/debian/patches/ubuntu_nvidia_prime.patch 2018-10-09 08:42:42.000000000 +0000 @@ -1,24 +1,25 @@ From: Tim Lunn Date: Sat, 22 Mar 2014 10:23:12 +1100 -Subject: Add hook to run prime-offload (as root) move Prime helpers into the - gdm-x-session wrapper - ++Subject: Add hooks to run prime scripts (as root) before and after a ++ gdm-session + ++This allows enabling and disabling the dGPU on log out. --- - common/gdm-common.c | 2 +- - daemon/gdm-display.c | 1 + - daemon/gdm-x-session.c | 10 ++++++++++ - data/Makefile.am | 24 ++++++++++++++++++++++++ - data/Prime | 6 ++++++ - data/PrimeOff | 6 ++++++ + common/gdm-common.c | 2 +- + daemon/gdm-session.c | 6 ++++++ + daemon/gdm-x-session.c | 5 +++++ + data/Makefile.am | 24 ++++++++++++++++++++++++ + data/Prime | 6 ++++++ + data/PrimeOff | 6 ++++++ 6 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 data/Prime create mode 100644 data/PrimeOff -Index: gdm3-3.26.0/common/gdm-common.c +Index: gdm3-3.28.2/common/gdm-common.c =================================================================== ---- gdm3-3.26.0.orig/common/gdm-common.c 2017-09-14 08:24:10.584748891 -0400 -+++ gdm3-3.26.0/common/gdm-common.c 2017-09-14 08:24:10.580748834 -0400 -@@ -677,7 +677,7 @@ gdm_run_script (const char *dir, +--- gdm3-3.28.2.orig/common/gdm-common.c ++++ gdm3-3.28.2/common/gdm-common.c +@@ -706,7 +706,7 @@ goto out; } @@ -27,23 +28,28 @@ display_name, display_hostname, display_x11_authority_file); -Index: gdm3-3.26.0/daemon/gdm-x-session.c +Index: gdm3-3.28.2/daemon/gdm-session.c =================================================================== ---- gdm3-3.26.0.orig/daemon/gdm-x-session.c 2017-09-14 08:24:10.584748891 -0400 -+++ gdm3-3.26.0/daemon/gdm-x-session.c 2017-09-14 08:24:10.580748834 -0400 -@@ -172,6 +172,11 @@ on_x_server_finished (GSubprocess *subp - if (cancelled) { - goto out; - } -+ gdm_run_script (GDMCONFDIR "/PrimeOff", "root", -+ state->display_name, -+ NULL, /* hostname */ -+ state->auth_file); +--- gdm3-3.28.2.orig/daemon/gdm-session.c ++++ gdm3-3.28.2/daemon/gdm-session.c +@@ -2865,6 +2865,12 @@ + + g_list_free_full (self->priv->outside_connections, g_object_unref); + self->priv->outside_connections = NULL; + ++ /* Run PrimeOff after the session is closed */ ++ gdm_run_script (GDMCONFDIR "/PrimeOff", "root", ++ NULL, ++ NULL, ++ NULL); + } - if (g_subprocess_get_if_exited (subprocess)) { - int exit_status; -@@ -614,6 +619,11 @@ spawn_session (State *state, + void +Index: gdm3-3.28.2/daemon/gdm-x-session.c +=================================================================== +--- gdm3-3.28.2.orig/daemon/gdm-x-session.c ++++ gdm3-3.28.2/daemon/gdm-x-session.c +@@ -614,6 +614,11 @@ g_debug ("Running X session"); @@ -55,11 +61,11 @@ launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE); if (state->environment != NULL) { -Index: gdm3-3.26.0/data/Makefile.am +Index: gdm3-3.28.2/data/Makefile.am =================================================================== ---- gdm3-3.26.0.orig/data/Makefile.am 2017-09-14 08:24:10.584748891 -0400 -+++ gdm3-3.26.0/data/Makefile.am 2017-09-14 08:24:10.584748891 -0400 -@@ -10,6 +10,8 @@ SUBDIRS = \ +--- gdm3-3.28.2.orig/data/Makefile.am ++++ gdm3-3.28.2/data/Makefile.am +@@ -10,6 +10,8 @@ initdir = $(gdmconfdir)/Init postdir = $(gdmconfdir)/PostSession predir = $(gdmconfdir)/PreSession @@ -68,7 +74,7 @@ postlogindir = $(gdmconfdir)/PostLogin workingdir = $(GDM_WORKING_DIR) xauthdir = $(GDM_XAUTH_DIR) -@@ -172,6 +174,8 @@ EXTRA_DIST += \ +@@ -173,6 +175,8 @@ Xsession.in \ Init.in \ PreSession.in \ @@ -77,7 +83,7 @@ PostSession.in \ PostLogin \ org.gnome.login-screen.gschema.xml.in \ -@@ -236,6 +240,8 @@ uninstall-hook: +@@ -237,6 +241,8 @@ $(DESTDIR)$(initdir)/Default \ $(DESTDIR)$(postlogindir)/Default.sample \ $(DESTDIR)$(predir)/Default \ @@ -86,7 +92,7 @@ $(DESTDIR)$(postdir)/Default \ $(DESTDIR)$(sysconfdir)/dconf/db/gdm \ $(DESTDIR)$(sysconfdir)/dconf/profile/gdm \ -@@ -282,6 +288,24 @@ endif +@@ -283,6 +289,24 @@ fi $(INSTALL_SCRIPT) PreSession $(DESTDIR)$(predir)/Default @@ -111,10 +117,10 @@ if test '!' -d $(DESTDIR)$(postdir); then \ $(mkinstalldirs) $(DESTDIR)$(postdir); \ chmod 755 $(DESTDIR)$(postdir); \ -Index: gdm3-3.26.0/data/Prime +Index: gdm3-3.28.2/data/Prime =================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdm3-3.26.0/data/Prime 2017-09-14 08:24:10.584748891 -0400 +--- /dev/null ++++ gdm3-3.28.2/data/Prime @@ -0,0 +1,6 @@ +#!/bin/sh + @@ -122,10 +128,10 @@ +if [ -f "$primeoffload" ]; then + $primeoffload +fi -Index: gdm3-3.26.0/data/PrimeOff +Index: gdm3-3.28.2/data/PrimeOff =================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdm3-3.26.0/data/PrimeOff 2017-09-14 08:24:10.584748891 -0400 +--- /dev/null ++++ gdm3-3.28.2/data/PrimeOff @@ -0,0 +1,6 @@ +#!/bin/sh + diff -Nru gdm3-3.28.2/debian/patches/utils-add-new-gdm-disable-wayland-binary.patch gdm3-3.28.3/debian/patches/utils-add-new-gdm-disable-wayland-binary.patch --- gdm3-3.28.2/debian/patches/utils-add-new-gdm-disable-wayland-binary.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/debian/patches/utils-add-new-gdm-disable-wayland-binary.patch 2018-10-09 08:42:42.000000000 +0000 @@ -0,0 +1,118 @@ +From: Ray Strode +Date: Mon, 21 May 2018 11:03:29 -0400 +Subject: utils: add new gdm-disable-wayland binary + +We currently disable wayland for cirrus by calling printf +from a udev rule. This works, but it's a little too open +coded to easily write SELinux policy for. + +This commit introduces a new program, gdm-disable-wayland, +that does the same thing, but in a dedicated binary. + +A future commit will change the udev rule to use the binary. + +https://bugzilla.gnome.org/show_bug.cgi?id=796315 +--- + utils/Makefile.am | 14 ++++++++++++ + utils/gdm-disable-wayland.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 67 insertions(+) + create mode 100644 utils/gdm-disable-wayland.c + +diff --git a/utils/Makefile.am b/utils/Makefile.am +index ae3cc01..babe890 100644 +--- a/utils/Makefile.am ++++ b/utils/Makefile.am +@@ -10,6 +10,8 @@ AM_CPPFLAGS = \ + -DDATADIR=\"$(datadir)\" \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ + -DLOCALSTATEDIR=\""$(localstatedir)"\" \ ++ -DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\" \ ++ -DGDM_RUNTIME_CONF=\"$(GDM_RUNTIME_CONF)\" \ + -DGDM_SCREENSHOT_DIR=\""$(GDM_SCREENSHOT_DIR)"\"\ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ + $(UTILS_CFLAGS) \ +@@ -31,6 +33,10 @@ bin_PROGRAMS = \ + gdm-screenshot \ + $(NULL) + ++libexec_PROGRAMS = \ ++ gdm-disable-wayland \ ++ $(NULL) ++ + gdmflexiserver_LDADD = \ + $(top_builddir)/common/libgdmcommon.la \ + $(GTK_LIBS) \ +@@ -49,6 +55,14 @@ gdm_screenshot_LDADD = \ + $(COMMON_LIBS) \ + $(NULL) + ++gdm_disable_wayland_LDADD = \ ++ $(COMMON_LIBS) \ ++ $(NULL) ++ ++gdm_disable_wayland_SOURCES = \ ++ gdm-disable-wayland.c \ ++ $(NULL) ++ + CLEANFILES = \ + $(NULL) + +diff --git a/utils/gdm-disable-wayland.c b/utils/gdm-disable-wayland.c +new file mode 100644 +index 0000000..be61c4d +--- /dev/null ++++ b/utils/gdm-disable-wayland.c +@@ -0,0 +1,53 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2018 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program 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 General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ * ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++ ++#include ++ ++int ++main (int argc, char *argv[]) ++{ ++ g_autoptr(GKeyFile) key_file = NULL; ++ g_autoptr(GError) error = NULL; ++ gboolean saved_okay; ++ ++ setlocale (LC_ALL, ""); ++ ++ key_file = g_key_file_new (); ++ ++ g_key_file_set_boolean (key_file, "daemon", "WaylandEnable", FALSE); ++ ++ g_mkdir_with_parents (GDM_RUN_DIR, 0711); ++ ++ saved_okay = g_key_file_save_to_file (key_file, GDM_RUNTIME_CONF, &error); ++ ++ if (!saved_okay) { ++ g_printerr ("gdm-disable-wayland: unable to disable wayland: %s", ++ error->message); ++ return EX_CANTCREAT; ++ } ++ ++ return EX_OK; ++} diff -Nru gdm3-3.28.2/docs/Makefile.in gdm3-3.28.3/docs/Makefile.in --- gdm3-3.28.2/docs/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/docs/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -92,8 +92,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/libgdm/gdm-client.c gdm3-3.28.3/libgdm/gdm-client.c --- gdm3-3.28.2/libgdm/gdm-client.c 2018-05-17 14:10:28.000000000 +0000 +++ gdm3-3.28.3/libgdm/gdm-client.c 2018-08-13 15:00:13.000000000 +0000 @@ -40,18 +40,13 @@ struct GdmClientPrivate { - GdmManager *manager; - GdmUserVerifier *user_verifier; GHashTable *user_verifier_extensions; GdmGreeter *greeter; GdmRemoteGreeter *remote_greeter; GdmChooser *chooser; - GDBusConnection *connection; - char *address; - GList *pending_opens; char **enabled_extensions; }; @@ -74,35 +69,47 @@ return error_quark; } +static GDBusConnection * +gdm_client_get_open_connection (GdmClient *client) +{ + GDBusProxy *proxy = NULL; + + if (client->priv->user_verifier != NULL) { + proxy = G_DBUS_PROXY (client->priv->user_verifier); + } else if (client->priv->greeter != NULL) { + proxy = G_DBUS_PROXY (client->priv->greeter); + } else if (client->priv->remote_greeter != NULL) { + proxy = G_DBUS_PROXY (client->priv->remote_greeter); + } else if (client->priv->chooser != NULL) { + proxy = G_DBUS_PROXY (client->priv->chooser); + } + + if (proxy != NULL) { + return g_dbus_proxy_get_connection (proxy); + } + + return NULL; +} + static void -on_got_manager (GdmManager *manager, +on_got_manager (GObject *object, GAsyncResult *result, GTask *task) { GdmClient *client; - GdmManager *new_manager; - GError *error; + GError *error; + g_autoptr(GdmManager) manager = NULL; client = GDM_CLIENT (g_async_result_get_source_object (G_ASYNC_RESULT (task))); error = NULL; - new_manager = gdm_manager_proxy_new_finish (result, &error); - - if (client->priv->manager == NULL) { - client->priv->manager = new_manager; - - } else { - g_object_ref (client->priv->manager); - g_object_unref (new_manager); - - g_clear_error (&error); - } + manager = gdm_manager_proxy_new_finish (result, &error); if (error != NULL) { g_task_return_error (task, error); } else { g_task_return_pointer (task, - g_object_ref (client->priv->manager), + g_object_ref (manager), (GDestroyNotify) g_object_unref); } @@ -123,14 +130,6 @@ callback, user_data); - if (client->priv->manager != NULL) { - g_task_return_pointer (task, - g_object_ref (client->priv->manager), - (GDestroyNotify) g_object_unref); - g_object_unref (task); - return; - } - gdm_manager_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.DisplayManager", @@ -391,11 +390,13 @@ GTask *task) { GCancellable *cancellable; + GdmManager *manager; char *username; GError *error; error = NULL; - if (!g_task_propagate_boolean (G_TASK (result), &error)) { + manager = g_task_propagate_pointer (G_TASK (result), &error); + if (manager == NULL) { g_task_return_error (task, error); g_object_unref (task); return; @@ -403,73 +404,62 @@ cancellable = g_task_get_cancellable (task); username = g_object_get_data (G_OBJECT (task), "username"); - gdm_manager_call_open_reauthentication_channel (client->priv->manager, + gdm_manager_call_open_reauthentication_channel (manager, username, cancellable, (GAsyncReadyCallback) on_reauthentication_channel_opened, task); - + g_object_unref (manager); } -static gboolean -gdm_client_open_connection_sync (GdmClient *client, - GCancellable *cancellable, - GError **error) +static GDBusConnection * +gdm_client_get_connection_sync (GdmClient *client, + GCancellable *cancellable, + GError **error) { + g_autoptr(GdmManager) manager = NULL; + g_autofree char *address = NULL; + GDBusConnection *connection; gboolean ret; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - if (client->priv->manager == NULL) { - client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", - "/org/gnome/DisplayManager/Manager", - cancellable, - error); + connection = gdm_client_get_open_connection (client); - if (client->priv->manager == NULL) { - goto out; - } - } else { - client->priv->manager = g_object_ref (client->priv->manager); + if (connection != NULL) { + return g_object_ref (connection); } - if (client->priv->connection == NULL) { - ret = gdm_manager_call_open_session_sync (client->priv->manager, - &client->priv->address, - cancellable, - error); - - if (!ret) { - g_clear_object (&client->priv->manager); - goto out; - } + manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", + cancellable, + error); - g_debug ("GdmClient: connecting to address: %s", client->priv->address); + if (manager == NULL) { + return NULL; + } - client->priv->connection = g_dbus_connection_new_for_address_sync (client->priv->address, - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, - NULL, - cancellable, - error); - - if (client->priv->connection == NULL) { - g_clear_object (&client->priv->manager); - g_clear_pointer (&client->priv->address, g_free); - goto out; - } + ret = gdm_manager_call_open_session_sync (manager, + &address, + cancellable, + error); - g_object_add_weak_pointer (G_OBJECT (client->priv->connection), - (gpointer *) - &client->priv->connection); - } else { - client->priv->connection = g_object_ref (client->priv->connection); + if (!ret) { + return NULL; } - out: - return client->priv->connection != NULL; + g_debug ("GdmClient: connecting to address: %s", address); + + connection = g_dbus_connection_new_for_address_sync (address, + G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, + NULL, + cancellable, + error); + + return connection; } static void @@ -501,6 +491,7 @@ GTask *task) { GdmClient *client; + g_autofree char *address = NULL; GCancellable *cancellable; GError *error; @@ -508,7 +499,7 @@ error = NULL; if (!gdm_manager_call_open_session_finish (manager, - &client->priv->address, + &address, result, &error)) { g_task_return_error (task, error); @@ -518,7 +509,7 @@ } cancellable = g_task_get_cancellable (task); - g_dbus_connection_new_for_address (client->priv->address, + g_dbus_connection_new_for_address (address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, cancellable, @@ -534,76 +525,52 @@ GTask *task) { GCancellable *cancellable; + GdmManager *manager; GError *error; error = NULL; - if (!g_task_propagate_boolean (G_TASK (result), &error)) { + manager = g_task_propagate_pointer (G_TASK (result), &error); + if (manager == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_manager_call_open_session (client->priv->manager, + gdm_manager_call_open_session (manager, cancellable, (GAsyncReadyCallback) on_session_opened, task); -} - -static void -finish_pending_opens (GdmClient *client, - GError *error) -{ - GList *node; - - for (node = client->priv->pending_opens; - node != NULL; - node = node->next) { - GTask *task = node->data; - - g_task_return_error (task, error); - g_object_unref (task); - } - g_clear_pointer (&client->priv->pending_opens, - (GDestroyNotify) g_list_free); + g_object_unref (manager); } -static gboolean -gdm_client_open_connection_finish (GdmClient *client, - GAsyncResult *result, - GError **error) +static GDBusConnection * +gdm_client_get_connection_finish (GdmClient *client, + GAsyncResult *result, + GError **error) { - g_autoptr(GDBusConnection) connection = NULL; + GDBusConnection *connection; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); connection = g_task_propagate_pointer (G_TASK (result), error); if (connection == NULL) { - finish_pending_opens (client, *error); - return FALSE; - } - - if (client->priv->connection == NULL) { - client->priv->connection = g_steal_pointer (&connection); - g_object_add_weak_pointer (G_OBJECT (client->priv->connection), - (gpointer *) &client->priv->connection); - } else if (client->priv->connection == connection) { - connection = NULL; + return NULL; } - finish_pending_opens (client, NULL); - return TRUE; + return connection; } static void -gdm_client_open_connection (GdmClient *client, +gdm_client_get_connection (GdmClient *client, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; + GDBusConnection *connection; g_return_if_fail (GDM_IS_CLIENT (client)); @@ -612,25 +579,20 @@ callback, user_data); - if (client->priv->connection != NULL) { + connection = gdm_client_get_open_connection (client); + if (connection != NULL) { g_task_return_pointer (task, - g_object_ref (client->priv->connection), + g_object_ref (connection), (GDestroyNotify) g_object_unref); g_object_unref (task); return; } - if (client->priv->pending_opens == NULL) { - get_manager (client, - cancellable, - (GAsyncReadyCallback) - on_got_manager_for_opening_connection, - task); - } else { - client->priv->pending_opens = g_list_prepend (client->priv->pending_opens, - task); - } - + get_manager (client, + cancellable, + (GAsyncReadyCallback) + on_got_manager_for_opening_connection, + task); } /** @@ -653,39 +615,36 @@ GCancellable *cancellable, GError **error) { - GDBusConnection *connection; + g_autoptr(GDBusConnection) connection = NULL; + g_autoptr(GdmManager) manager = NULL; + g_autofree char *address = NULL; GdmUserVerifier *user_verifier = NULL; gboolean ret; - char *address; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); - if (client->priv->manager == NULL) { - client->priv->manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - "org.gnome.DisplayManager", - "/org/gnome/DisplayManager/Manager", - cancellable, - error); + manager = gdm_manager_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.DisplayManager", + "/org/gnome/DisplayManager/Manager", + cancellable, + error); - if (client->priv->manager == NULL) { - goto out; - } - } else { - client->priv->manager = g_object_ref (client->priv->manager); + if (manager == NULL) { + return NULL; } - ret = gdm_manager_call_open_reauthentication_channel_sync (client->priv->manager, + ret = gdm_manager_call_open_reauthentication_channel_sync (manager, username, &address, cancellable, error); if (!ret) { - goto out; + return NULL; } - g_debug ("GdmClient: connecting to address: %s", client->priv->address); + g_debug ("GdmClient: connecting to address: %s", address); connection = g_dbus_connection_new_for_address_sync (address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, @@ -694,10 +653,8 @@ error); if (connection == NULL) { - g_free (address); - goto out; + return NULL; } - g_free (address); user_verifier = gdm_user_verifier_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, @@ -706,19 +663,6 @@ cancellable, error); - if (user_verifier != NULL) { - g_object_weak_ref (G_OBJECT (user_verifier), - (GWeakNotify) - g_object_unref, - connection); - - g_object_weak_ref (G_OBJECT (user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - } - - out: return user_verifier; } @@ -778,7 +722,7 @@ GAsyncResult *result, GError **error) { - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); return g_task_propagate_pointer (G_TASK (result), error); } @@ -799,15 +743,19 @@ GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->user_verifier != NULL) { return g_object_ref (client->priv->user_verifier); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (client->priv->connection, + client->priv->user_verifier = gdm_user_verifier_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -818,15 +766,6 @@ g_object_add_weak_pointer (G_OBJECT (client->priv->user_verifier), (gpointer *) &client->priv->user_verifier); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_object_unref, - client->priv->connection); - if (client->priv->enabled_extensions != NULL) { gboolean res; @@ -847,7 +786,7 @@ if (strcmp (client->priv->enabled_extensions[i], gdm_user_verifier_choice_list_interface_info ()->name) == 0) { GdmUserVerifierChoiceList *choice_list_interface; - choice_list_interface = gdm_user_verifier_choice_list_proxy_new_sync (client->priv->connection, + choice_list_interface = gdm_user_verifier_choice_list_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -865,22 +804,25 @@ } static void -on_connection_opened_for_user_verifier (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_user_verifier (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_user_verifier_proxy_new (client->priv->connection, + gdm_user_verifier_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -923,10 +865,10 @@ return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_user_verifier, + on_connection_for_user_verifier, task); } @@ -948,7 +890,7 @@ { GdmUserVerifier *user_verifier; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); if (client->priv->user_verifier != NULL) return g_object_ref (client->priv->user_verifier); @@ -963,16 +905,6 @@ (gpointer *) &client->priv->user_verifier); - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_object_unref, - client->priv->connection); - - g_object_weak_ref (G_OBJECT (client->priv->user_verifier), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return user_verifier; } @@ -1040,22 +972,25 @@ } static void -on_connection_opened_for_greeter (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_greeter (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_greeter_proxy_new (client->priv->connection, + gdm_greeter_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1098,10 +1033,10 @@ return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_greeter, + on_connection_for_greeter, task); } @@ -1123,7 +1058,7 @@ { GdmGreeter *greeter; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); if (client->priv->greeter != NULL) return g_object_ref (client->priv->greeter); @@ -1138,16 +1073,6 @@ (gpointer *) &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); - - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return greeter; } @@ -1169,15 +1094,19 @@ GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->greeter != NULL) { return g_object_ref (client->priv->greeter); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->greeter = gdm_greeter_proxy_new_sync (client->priv->connection, + client->priv->greeter = gdm_greeter_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1188,14 +1117,6 @@ g_object_add_weak_pointer (G_OBJECT (client->priv->greeter), (gpointer *) &client->priv->greeter); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - g_object_weak_ref (G_OBJECT (client->priv->greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); query_for_timed_login_requested_signal (client->priv->greeter); } @@ -1225,22 +1146,25 @@ } static void -on_connection_opened_for_remote_greeter (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_remote_greeter (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_remote_greeter_proxy_new (client->priv->connection, + gdm_remote_greeter_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1283,10 +1207,10 @@ return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_remote_greeter, + on_connection_for_remote_greeter, task); } @@ -1308,7 +1232,7 @@ { GdmRemoteGreeter *remote_greeter; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); if (client->priv->remote_greeter != NULL) return g_object_ref (client->priv->remote_greeter); @@ -1323,16 +1247,6 @@ (gpointer *) &client->priv->remote_greeter); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); - - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return remote_greeter; } @@ -1353,15 +1267,19 @@ GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; + if (client->priv->remote_greeter != NULL) { return g_object_ref (client->priv->remote_greeter); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (client->priv->connection, + client->priv->remote_greeter = gdm_remote_greeter_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1372,14 +1290,6 @@ g_object_add_weak_pointer (G_OBJECT (client->priv->remote_greeter), (gpointer *) &client->priv->remote_greeter); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - g_object_weak_ref (G_OBJECT (client->priv->remote_greeter), - (GWeakNotify) - g_object_unref, - client->priv->connection); } return client->priv->remote_greeter; @@ -1407,22 +1317,25 @@ } static void -on_connection_opened_for_chooser (GdmClient *client, - GAsyncResult *result, - GTask *task) +on_connection_for_chooser (GdmClient *client, + GAsyncResult *result, + GTask *task) { + g_autoptr(GDBusConnection) connection = NULL; GCancellable *cancellable; GError *error; error = NULL; - if (!gdm_client_open_connection_finish (client, result, &error)) { + connection = gdm_client_get_connection_finish (client, result, &error); + + if (connection == NULL) { g_task_return_error (task, error); g_object_unref (task); return; } cancellable = g_task_get_cancellable (task); - gdm_chooser_proxy_new (client->priv->connection, + gdm_chooser_proxy_new (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1465,10 +1378,10 @@ return; } - gdm_client_open_connection (client, + gdm_client_get_connection (client, cancellable, (GAsyncReadyCallback) - on_connection_opened_for_chooser, + on_connection_for_chooser, task); } @@ -1490,7 +1403,7 @@ { GdmChooser *chooser; - g_return_val_if_fail (GDM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (GDM_IS_CLIENT (client), NULL); if (client->priv->chooser != NULL) return g_object_ref (client->priv->chooser); @@ -1505,16 +1418,6 @@ (gpointer *) &client->priv->chooser); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, - client->priv->connection); - - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - return chooser; } @@ -1535,16 +1438,19 @@ GCancellable *cancellable, GError **error) { + g_autoptr(GDBusConnection) connection = NULL; if (client->priv->chooser != NULL) { return g_object_ref (client->priv->chooser); } - if (!gdm_client_open_connection_sync (client, cancellable, error)) { + connection = gdm_client_get_connection_sync (client, cancellable, error); + + if (connection == NULL) { return NULL; } - client->priv->chooser = gdm_chooser_proxy_new_sync (client->priv->connection, + client->priv->chooser = gdm_chooser_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE, NULL, SESSION_DBUS_PATH, @@ -1555,14 +1461,6 @@ g_object_add_weak_pointer (G_OBJECT (client->priv->chooser), (gpointer *) &client->priv->chooser); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_clear_object, - &client->priv->manager); - g_object_weak_ref (G_OBJECT (client->priv->chooser), - (GWeakNotify) - g_object_unref, - client->priv->connection); } return client->priv->chooser; @@ -1622,17 +1520,7 @@ &client->priv->chooser); } - if (client->priv->connection != NULL) { - g_object_remove_weak_pointer (G_OBJECT (client->priv->connection), - (gpointer *) - &client->priv->connection); - } - - g_clear_object (&client->priv->manager); - g_clear_object (&client->priv->connection); - g_strfreev (client->priv->enabled_extensions); - g_free (client->priv->address); G_OBJECT_CLASS (gdm_client_parent_class)->finalize (object); } diff -Nru gdm3-3.28.2/libgdm/gdm.pc gdm3-3.28.3/libgdm/gdm.pc --- gdm3-3.28.2/libgdm/gdm.pc 2018-05-17 14:13:42.000000000 +0000 +++ gdm3-3.28.3/libgdm/gdm.pc 2018-08-13 15:08:40.000000000 +0000 @@ -5,7 +5,7 @@ Name: GDM Client Library Description: Client Library for communicating with GDM daemon -Version: 3.28.2 +Version: 3.28.3 Libs: -L${libdir} -lgdm Cflags: -I${includedir}/gdm Requires: gobject-2.0 diff -Nru gdm3-3.28.2/libgdm/Makefile.in gdm3-3.28.3/libgdm/Makefile.in --- gdm3-3.28.2/libgdm/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/libgdm/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -96,8 +96,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgconfig_DATA) \ diff -Nru gdm3-3.28.2/m4/nls.m4 gdm3-3.28.3/m4/nls.m4 --- gdm3-3.28.2/m4/nls.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdm3-3.28.3/m4/nls.m4 2018-07-24 13:01:46.000000000 +0000 @@ -0,0 +1,32 @@ +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software +dnl Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) +]) diff -Nru gdm3-3.28.2/Makefile.in gdm3-3.28.3/Makefile.in --- gdm3-3.28.2/Makefile.in 2018-05-17 14:13:28.000000000 +0000 +++ gdm3-3.28.3/Makefile.in 2018-08-13 15:08:28.000000000 +0000 @@ -94,8 +94,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ @@ -165,9 +165,10 @@ DIST_SUBDIRS = data common pam-extensions daemon libgdm utils pam_gdm \ po tests chooser docs am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/data/dconf/gdm.in AUTHORS COPYING ChangeLog \ - INSTALL NEWS README TODO acconfig.h compile config.guess \ - config.sub install-sh ltmain.sh missing + $(top_srcdir)/data/dconf/gdm.in ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README TODO acconfig.h compile \ + config.guess config.rpath config.sub install-sh ltmain.sh \ + missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) diff -Nru gdm3-3.28.2/NEWS gdm3-3.28.3/NEWS --- gdm3-3.28.2/NEWS 2018-05-17 14:12:22.000000000 +0000 +++ gdm3-3.28.3/NEWS 2018-08-13 15:07:27.000000000 +0000 @@ -1,4 +1,15 @@ ============== +Version 3.28.3 +============== +- CVE-2018-14424 - double free fix +- lifecycle fixes to libgdm/GdmClient +- follow up fixes dealing with login screen reaping form last release +- allow pam modules to use SIGUSR1 +- set PWD for user session +- tell cirrus not to use wayland +- Translation updates + +============== Version 3.28.2 ============== - Reference counting fixes for GdmClient- ensure plymouth is quit properly even when local greeter is disabled diff -Nru gdm3-3.28.2/pam-extensions/gdm-pam-extensions.pc gdm3-3.28.3/pam-extensions/gdm-pam-extensions.pc --- gdm3-3.28.2/pam-extensions/gdm-pam-extensions.pc 2018-05-17 14:13:42.000000000 +0000 +++ gdm3-3.28.3/pam-extensions/gdm-pam-extensions.pc 2018-08-13 15:08:40.000000000 +0000 @@ -5,5 +5,5 @@ Name: GDM PAM Extensions Description: Macros for custom protocols over PAM -Version: 3.28.2 +Version: 3.28.3 Cflags: -I${includedir}/gdm diff -Nru gdm3-3.28.2/pam-extensions/Makefile.in gdm3-3.28.3/pam-extensions/Makefile.in --- gdm3-3.28.2/pam-extensions/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/pam-extensions/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -94,8 +94,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am \ diff -Nru gdm3-3.28.2/pam_gdm/Makefile.in gdm3-3.28.3/pam_gdm/Makefile.in --- gdm3-3.28.2/pam_gdm/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/pam_gdm/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -93,8 +93,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/po/af.po gdm3-3.28.3/po/af.po --- gdm3-3.28.2/po/af.po 2018-01-23 20:33:23.000000000 +0000 +++ gdm3-3.28.3/po/af.po 2018-08-13 15:00:24.000000000 +0000 @@ -4,38 +4,73 @@ # Zuza Software Foundation , 2004 # F Wolff , 2009, 2011, 2013, 2014. # Dawid Loubser , 2013. +# Pieter Schoeman , 2017. +# msgid "" msgstr "" "Project-Id-Version: gdm2 2.6-branch\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-27 15:41-0400\n" -"PO-Revision-Date: 2014-09-23 17:45+0200\n" -"Last-Translator: F Wolff \n" -"Language-Team: translate-discuss-af@lists.sourceforge.net\n" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" +"product=gdm&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2018-05-19 20:56+0000\n" +"PO-Revision-Date: 2018-06-30 13:38+0200\n" +"Last-Translator: Pieter Schalk Schoeman \n" +"Language-Team: Afrikaans \n" "Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Virtaal 0.9.0-beta1\n" +"X-Generator: Poedit 2.0.8\n" "X-Project-Style: gnome\n" -#: ../common/gdm-common.c:298 +#: ../chooser/gdm-host-chooser-dialog.c:140 +msgid "_Refresh" +msgstr "_Verfris" + +#: ../chooser/gdm-host-chooser-dialog.c:141 +msgid "_Cancel" +msgstr "_Kanselleer" + +#: ../chooser/gdm-host-chooser-dialog.c:142 +msgid "C_onnect" +msgstr "_Koppel" + +#: ../chooser/gdm-host-chooser-dialog.c:147 +msgid "Select System" +msgstr "Kies stelsel" + +#: ../chooser/gdm-host-chooser-widget.c:254 +msgid "XDMCP: Could not create XDMCP buffer!" +msgstr "XDMCP: Kon nie XDMCP-buffer skep nie!" + +#: ../chooser/gdm-host-chooser-widget.c:260 +msgid "XDMCP: Could not read XDMCP header!" +msgstr "XDMCP: Kon nie XDMCP-kopteks lees nie!" + +#: ../chooser/gdm-host-chooser-widget.c:266 +msgid "XDMCP: Incorrect XDMCP version!" +msgstr "XMDCP: Verkeerde XDMCP-weergawe!" + +#: ../chooser/gdm-host-chooser-widget.c:272 +msgid "XDMCP: Unable to parse address" +msgstr "XDMCP: Kan nie adres ontleed nie" + +#: ../common/gdm-common.c:317 #, c-format msgid "/dev/urandom is not a character device" msgstr "/dev/urandom is nie 'n karaktertoestel nie" -#: ../common/gdm-common.c:468 ../libgdm/gdm-user-switching.c:209 +#: ../common/gdm-common.c:487 ../libgdm/gdm-user-switching.c:209 #, c-format msgid "Could not identify the current session." msgstr "Kon nie die huidige sessie identifiseer nie." -#: ../common/gdm-common.c:477 ../libgdm/gdm-user-switching.c:218 +#: ../common/gdm-common.c:496 ../libgdm/gdm-user-switching.c:218 #, c-format msgid "Could not identify the current seat." -msgstr "Kon nie die huidige sitplek identifiseer nie." +msgstr "Kon nie die huidige seat identifiseer nie." -#: ../common/gdm-common.c:487 ../libgdm/gdm-user-switching.c:228 +#: ../common/gdm-common.c:506 ../libgdm/gdm-user-switching.c:228 #, c-format msgid "" "The system is unable to determine whether to switch to an existing login " @@ -44,14 +79,14 @@ "Die stelsel kon nie vasstel of daar na 'n bestaande aanmeldskerm oorgeskakel " "moes word, en of 'n nuwe aanmeldskerm moes begin nie." -#: ../common/gdm-common.c:495 ../libgdm/gdm-user-switching.c:236 +#: ../common/gdm-common.c:514 ../libgdm/gdm-user-switching.c:236 #, c-format msgid "The system is unable to start up a new login screen." msgstr "Die stelsel kon nie 'n nuwe aanmeldskerm begin nie." #: ../daemon/gdm-display-access-file.c:300 #, c-format -msgid "could not find user \"%s\" on system" +msgid "could not find user “%s” on system" msgstr "kon nie die gebruiker \"%s\" op die stelsel kry nie" #: ../daemon/gdm-legacy-display.c:235 @@ -61,71 +96,74 @@ "diagnose. In the meantime this display will be disabled. Please restart GDM " "when the problem is corrected." msgstr "" -"Kon nie die X-bediener (die grafiese omgewing) begin nie a.g.v. 'n interne " -"fout. Kontak asb. die stelseladministrateur of gaan die syslog na vir " -"diagnose. Intussen sal hierdie vertoon gedeaktiveer word. Herbegin GDM " +"Kon nie die X-bediener (die grafiese gebruikers koppelvlak) begin nie a.g.v. " +"'n interne fout. Kontak asb. die stelseladministrateur of gaan die syslog na " +"vir diagnose. Intussen sal hierdie skerm gedeaktiveer word. Herbegin GDM " "wanneer die probleem reggestel is." -#: ../daemon/gdm-manager.c:766 -#, fuzzy +#: ../daemon/gdm-manager.c:775 msgid "No display available" -msgstr "Geen sessie beskikbaar nie" +msgstr "Geen skerm beskikbaar nie" -#: ../daemon/gdm-manager.c:833 ../daemon/gdm-manager.c:1088 +#: ../daemon/gdm-manager.c:844 ../daemon/gdm-manager.c:1120 msgid "No session available" msgstr "Geen sessie beskikbaar nie" -#: ../daemon/gdm-manager.c:844 +#: ../daemon/gdm-manager.c:863 +msgid "Chooser session unavailable" +msgstr "Geen sessie beskikbaar nie" + +#: ../daemon/gdm-manager.c:875 msgid "Can only be called before user is logged in" msgstr "Kan slegs geroep word voor gebruiker aangemeld is" -#: ../daemon/gdm-manager.c:854 +#: ../daemon/gdm-manager.c:886 msgid "Caller not GDM" msgstr "Roeper nie GDM nie" -#: ../daemon/gdm-manager.c:864 +#: ../daemon/gdm-manager.c:896 msgid "Unable to open private communication channel" -msgstr "" +msgstr "Kon nie 'n privaat kommunikasiekanaal oopmaak nie" -#: ../daemon/gdm-server.c:378 +#: ../daemon/gdm-server.c:383 #, c-format -msgid "Server was to be spawned by user %s but that user doesn't exist" +msgid "Server was to be spawned by user %s but that user doesn’t exist" msgstr "" "Bediener sou deur gebruiker %s geskep word, maar daardie gebruiker bestaan " "nie" -#: ../daemon/gdm-server.c:389 ../daemon/gdm-server.c:409 +#: ../daemon/gdm-server.c:394 ../daemon/gdm-server.c:414 #, c-format -msgid "Couldn't set groupid to %d" +msgid "Couldn’t set groupid to %d" msgstr "Kon nie groep-id instel na %d nie" -#: ../daemon/gdm-server.c:395 +#: ../daemon/gdm-server.c:400 #, c-format msgid "initgroups () failed for %s" msgstr "initgroups () het misluk vir %s" -#: ../daemon/gdm-server.c:401 +#: ../daemon/gdm-server.c:406 #, c-format -msgid "Couldn't set userid to %d" +msgid "Couldn’t set userid to %d" msgstr "Kon nie gebruiker-id instel na %d nie" -#: ../daemon/gdm-server.c:479 +#: ../daemon/gdm-server.c:484 #, c-format msgid "%s: Could not open log file for display %s!" msgstr "%s: Kon nie staaflêer vir vertoon %s open nie!" -#: ../daemon/gdm-server.c:500 ../daemon/gdm-server.c:506 -#: ../daemon/gdm-server.c:512 +#: ../daemon/gdm-server.c:505 ../daemon/gdm-server.c:511 +#: ../daemon/gdm-server.c:517 #, c-format msgid "%s: Error setting %s to %s" msgstr "%s: Fout met stel van %s na %s" -#: ../daemon/gdm-server.c:532 +#: ../daemon/gdm-server.c:537 #, c-format -msgid "%s: Server priority couldn't be set to %d: %s" +msgid "%s: Server priority couldn’t be set to %d: %s" msgstr "%s: Bedienerprioriteit kon nie gestel word na %d nie: %s" -#: ../daemon/gdm-server.c:684 +#: ../daemon/gdm-server.c:689 #, c-format msgid "%s: Empty server command for display %s" msgstr "%s: Leë bedieneropdrag vir vertoon %s" @@ -154,57 +192,50 @@ msgid "The display device" msgstr "Die vertoontoestel" -#: ../daemon/gdm-session.c:1193 +#: ../daemon/gdm-session.c:1261 msgid "Could not create authentication helper process" msgstr "Kon nie verifiëring-hulpproses skep nie" -#: ../daemon/gdm-session-worker.c:642 -msgid "Your account was given a time limit that's now passed." +#: ../daemon/gdm-session-worker.c:766 +msgid "Your account was given a time limit that’s now passed." msgstr "U rekening het 'n tydlimiet wat nou verstryk het." -#: ../daemon/gdm-session-worker.c:649 -msgid "Sorry, that didn't work. Please try again." +#: ../daemon/gdm-session-worker.c:773 +msgid "Sorry, that didn’t work. Please try again." msgstr "Jammer, dit het nie gewerk nie. Probeer gerus weer." -#: ../daemon/gdm-session-worker.c:1010 +#: ../daemon/gdm-session-worker.c:1170 msgid "Username:" msgstr "Gebruikernaam:" -#: ../daemon/gdm-session-worker.c:1142 -msgid "Your password has expired, please change it now." -msgstr "U wagwoord het verval. Verander dit asb. nou." - -#: ../daemon/gdm-session-worker.c:1505 ../daemon/gdm-session-worker.c:1522 +#: ../daemon/gdm-session-worker.c:1672 ../daemon/gdm-session-worker.c:1689 #, c-format msgid "no user account available" msgstr "geen gebruikerrekening beskikbaar nie" -#: ../daemon/gdm-session-worker.c:1549 +#: ../daemon/gdm-session-worker.c:1716 msgid "Unable to change to user" msgstr "Kan nie na die gebruiker wissel nie" -#: ../daemon/gdm-wayland-session.c:385 -#, fuzzy +#: ../daemon/gdm-wayland-session.c:478 msgid "GNOME Display Manager Wayland Session Launcher" -msgstr "GNOME-vertoonbestuurder werkerproses" +msgstr "GNOME-vertoonbestuurder (Wayland Sessie)" -#: ../daemon/gdm-xdmcp-display-factory.c:609 +#: ../daemon/gdm-xdmcp-display-factory.c:612 msgid "Could not create socket!" msgstr "Kon nie sok skep nie!" -#: ../daemon/gdm-x-session.c:686 +#: ../daemon/gdm-x-session.c:826 msgid "Run program through /etc/gdm/Xsession wrapper script" -msgstr "" +msgstr "Voer die program deur die /etc/gdm/Xsession skript uit" -#: ../daemon/gdm-x-session.c:687 -#, fuzzy +#: ../daemon/gdm-x-session.c:827 msgid "Listen on TCP socket" -msgstr "Luister op _UDP-poort: " +msgstr "Luister op TCP-poort" -#: ../daemon/gdm-x-session.c:698 -#, fuzzy +#: ../daemon/gdm-x-session.c:838 msgid "GNOME Display Manager X Session Launcher" -msgstr "GNOME-vertoonbestuurder werkerproses" +msgstr "GNOME-vertoonbestuurder (X-sessie)" #: ../daemon/main.c:125 ../daemon/main.c:138 #, c-format @@ -223,8 +254,8 @@ #: ../daemon/main.c:223 #, c-format -msgid "Can't find the GDM user '%s'. Aborting!" -msgstr "Kan nie GDM-gebruiker '%s' vind nie. Staak!" +msgid "Can’t find the GDM user “%s”. Aborting!" +msgstr "Kan nie GDM-gebruiker \"%s\" vind nie. Staak!" #: ../daemon/main.c:229 msgid "The GDM user should not be root. Aborting!" @@ -232,50 +263,40 @@ #: ../daemon/main.c:235 #, c-format -msgid "Can't find the GDM group '%s'. Aborting!" -msgstr "Kan nie die GDM-groep '%s' vind nie. Staak!" +msgid "Can’t find the GDM group “%s”. Aborting!" +msgstr "Kan nie die GDM-groep \"%s\" vind nie. Staak!" #: ../daemon/main.c:241 msgid "The GDM group should not be root. Aborting!" msgstr "Die GDM-groep moet nie root wees nie. Staak!" -#: ../daemon/main.c:318 +#: ../daemon/main.c:317 msgid "Make all warnings fatal" msgstr "Maak alle waarskuwings noodlottig" -#: ../daemon/main.c:319 +#: ../daemon/main.c:318 msgid "Exit after a time (for debugging)" msgstr "Sluit af na 'n tydjie (vir probleemoplossing)" -#: ../daemon/main.c:320 +#: ../daemon/main.c:319 msgid "Print GDM version" msgstr "Druk GDM-weergawe" -#: ../daemon/main.c:333 +#: ../daemon/main.c:330 msgid "GNOME Display Manager" msgstr "GNOME-vertoonbestuurder" #. make sure the pid file doesn't get wiped -#: ../daemon/main.c:381 +#: ../daemon/main.c:350 msgid "Only the root user can run GDM" msgstr "Slegs root behoort GDM uit te voer" #. Translators: worker is a helper process that does the work #. of starting up a session -#: ../daemon/session-worker-main.c:95 +#: ../daemon/session-worker-main.c:94 msgid "GNOME Display Manager Session Worker" msgstr "GNOME-vertoonbestuurder werkerproses" -#: ../data/applications/gnome-shell.desktop.in.h:1 -#: ../data/applications/gnome-shell-wayland.desktop.in.h:1 -msgid "GNOME Shell" -msgstr "GNOME Shell" - -#: ../data/applications/gnome-shell.desktop.in.h:2 -#: ../data/applications/gnome-shell-wayland.desktop.in.h:2 -msgid "Window management and compositing" -msgstr "Vensterbestuur en -uitleg" - #: ../data/org.gnome.login-screen.gschema.xml.in.h:1 msgid "Whether or not to allow fingerprint readers for login" msgstr "Of vingerafdruklesers toegelaat word vir aanmelding" @@ -319,21 +340,20 @@ #: ../data/org.gnome.login-screen.gschema.xml.in.h:8 msgid "" -"The login screen can optionally show a small image at the top of its user " -"list to provide site administrators and distributions a way to provide " -"branding." +"The login screen can optionally show a small image to provide site " +"administrators and distributions a way to display branding." msgstr "" "Die aanmeldskerm kan 'n klein beeld bo aan die gebruikerslys vertoon wat " -"administrateurs kan gebruik om 'n handelsmerk te vertoon." +"administrateurs of verspreidings kan gebruik om 'n handelsmerk te vertoon." #: ../data/org.gnome.login-screen.gschema.xml.in.h:9 msgid "" -"The fallback login screen can optionally show a small image at the top of " -"its user list to provide site administrators and distributions a way to " -"provide branding." +"The fallback login screen can optionally show a small image to provide site " +"administrators and distributions a way to display branding." msgstr "" "Die rugsteun-aanmeldskerm kan 'n klein beeld bo aan die gebruikerslys " -"vertoon wat administrateurs kan gebruik om 'n handelsmerk te vertoon." +"vertoon wat administrateurs of verspreidings kan gebruik om 'n handelsmerk " +"te vertoon." #: ../data/org.gnome.login-screen.gschema.xml.in.h:10 msgid "Avoid showing user list" @@ -385,26 +405,6 @@ "Die aantal kere wat 'n gebruiker mag probeer om aan te meld voordat tou " "opgegooi word en daar teruggekeer word na die gebruikerseleksie." -#: ../gui/simple-chooser/gdm-host-chooser-dialog.c:147 -msgid "Select System" -msgstr "Kies stelsel" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:215 -msgid "XDMCP: Could not create XDMCP buffer!" -msgstr "XDMCP: Kon nie XDMCP-buffer skep nie!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:221 -msgid "XDMCP: Could not read XDMCP header!" -msgstr "XDMCP: Kon nie XDMCP-kopteks lees nie!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:227 -msgid "XDMCP: Incorrect XDMCP version!" -msgstr "XMDCP: Verkeerde XDMCP-weergawe!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:233 -msgid "XDMCP: Unable to parse address" -msgstr "XDMCP: Kan nie adres ontleed nie" - #: ../libgdm/gdm-user-switching.c:59 msgid "Unable to create transient display: " msgstr "Kan nie verbygaande vertoonskerm skep nie: " @@ -415,11 +415,11 @@ #: ../utils/gdmflexiserver.c:45 msgid "Only the VERSION command is supported" -msgstr "Slegs die 'VERSION' bevel word ondersteun" +msgstr "Slegs die 'WEERGAWE' bevel word ondersteun" #: ../utils/gdmflexiserver.c:45 msgid "COMMAND" -msgstr "COMMAND" +msgstr "BEVEL" #: ../utils/gdmflexiserver.c:46 ../utils/gdmflexiserver.c:47 #: ../utils/gdmflexiserver.c:49 ../utils/gdmflexiserver.c:50 @@ -432,11 +432,11 @@ #: ../utils/gdmflexiserver.c:52 msgid "Version of this application" -msgstr "Weergawe van hierdie toepassing" +msgstr "Weergawe van hierdie program" #. Option parsing #: ../utils/gdmflexiserver.c:137 -msgid "- New GDM login" +msgid "— New GDM login" msgstr "- Nuwe GDM-aanmelding" #: ../utils/gdm-screenshot.c:212 @@ -448,813 +448,11 @@ msgid "Take a picture of the screen" msgstr "Neem 'n skermskoot" +#~ msgid "Your password has expired, please change it now." +#~ msgstr "U wagwoord het verval. Verander dit asb. nou." +#~ msgid "GNOME Shell" +#~ msgstr "GNOME Shell" - - - - - - - - - - - - - -#, fuzzy - - -#, fuzzy - - -#, fuzzy - - - - - - - - - - - - - - - - - - - - - - - - - -#, fuzzy - - - -#, fuzzy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#, fuzzy - -#, fuzzy - - - -#, fuzzy - - - - - -#, fuzzy - - - - - - - - - - - - - - - -#, fuzzy - - -#, fuzzy - - - - - - - - - - - - - - - - - - - - - - -#, fuzzy - - - - - - -#, fuzzy - -#, fuzzy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#, fuzzy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +#~ msgid "Window management and compositing" +#~ msgstr "Vensterbestuur en -uitleg" diff -Nru gdm3-3.28.2/po/zh_CN.po gdm3-3.28.3/po/zh_CN.po --- gdm3-3.28.2/po/zh_CN.po 2018-01-23 20:33:23.000000000 +0000 +++ gdm3-3.28.3/po/zh_CN.po 2018-08-01 19:00:01.000000000 +0000 @@ -15,49 +15,81 @@ msgid "" msgstr "" "Project-Id-Version: gdm master\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "product=gdm&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-02-04 18:46+0000\n" -"PO-Revision-Date: 2016-01-19 18:47-0700\n" -"Last-Translator: Jeff Bai \n" +"POT-Creation-Date: 2018-01-09 23:24+0000\n" +"PO-Revision-Date: 2018-02-03 23:04+0800\n" +"Last-Translator: Mingcong Bai \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.6\n" +"X-Generator: Poedit 2.0.2\n" -#: ../common/gdm-common.c:298 +#: ../chooser/gdm-host-chooser-dialog.c:140 +msgid "_Refresh" +msgstr "刷新(_R)" + +#: ../chooser/gdm-host-chooser-dialog.c:141 +msgid "_Cancel" +msgstr "取消(_C)" + +#: ../chooser/gdm-host-chooser-dialog.c:142 +msgid "C_onnect" +msgstr "连接(_O)" + +#: ../chooser/gdm-host-chooser-dialog.c:147 +msgid "Select System" +msgstr "选择系统" + +#: ../chooser/gdm-host-chooser-widget.c:254 +msgid "XDMCP: Could not create XDMCP buffer!" +msgstr "XDMCP:无法创建 XDMCP 缓冲区!" + +#: ../chooser/gdm-host-chooser-widget.c:260 +msgid "XDMCP: Could not read XDMCP header!" +msgstr "XDMCP:无法读取 XDMCP 头信息!" + +#: ../chooser/gdm-host-chooser-widget.c:266 +msgid "XDMCP: Incorrect XDMCP version!" +msgstr "XMDCP:XDMCP 版本错误!" + +#: ../chooser/gdm-host-chooser-widget.c:272 +msgid "XDMCP: Unable to parse address" +msgstr "XMDCP:无法解析地址" + +#: ../common/gdm-common.c:317 #, c-format msgid "/dev/urandom is not a character device" msgstr "/dev/urandom 不是字符设备" -#: ../common/gdm-common.c:468 ../libgdm/gdm-user-switching.c:209 +#: ../common/gdm-common.c:487 ../libgdm/gdm-user-switching.c:209 #, c-format msgid "Could not identify the current session." msgstr "无法识别当前会话。" -#: ../common/gdm-common.c:477 ../libgdm/gdm-user-switching.c:218 +#: ../common/gdm-common.c:496 ../libgdm/gdm-user-switching.c:218 #, c-format msgid "Could not identify the current seat." msgstr "无法识别当前位置。" -#: ../common/gdm-common.c:487 ../libgdm/gdm-user-switching.c:228 +#: ../common/gdm-common.c:506 ../libgdm/gdm-user-switching.c:228 #, c-format msgid "" "The system is unable to determine whether to switch to an existing login " "screen or start up a new login screen." msgstr "系统无法确定是否应当切换到一个已经登录的屏幕还是启动一个新登录屏幕。" -#: ../common/gdm-common.c:495 ../libgdm/gdm-user-switching.c:236 +#: ../common/gdm-common.c:514 ../libgdm/gdm-user-switching.c:236 #, c-format msgid "The system is unable to start up a new login screen." msgstr "系统无法启动新登录屏幕。" #: ../daemon/gdm-display-access-file.c:300 #, c-format -msgid "could not find user \"%s\" on system" +msgid "could not find user “%s” on system" msgstr "无法在系统中找到用户“%s”" #: ../daemon/gdm-legacy-display.c:235 @@ -70,63 +102,67 @@ "由于内部错误无法启动 X 服务器(您的图形界面)。请与系统管理员联系或检查系统日志" "以便进行诊断。在此期间该显示将被禁用。请在问题更正以后重新启动 GDM。" -#: ../daemon/gdm-manager.c:766 +#: ../daemon/gdm-manager.c:775 msgid "No display available" msgstr "无可用的显示" -#: ../daemon/gdm-manager.c:833 ../daemon/gdm-manager.c:1088 +#: ../daemon/gdm-manager.c:844 ../daemon/gdm-manager.c:1120 msgid "No session available" msgstr "无可用的会话" -#: ../daemon/gdm-manager.c:844 +#: ../daemon/gdm-manager.c:863 +msgid "Chooser session unavailable" +msgstr "选择器会话不可用" + +#: ../daemon/gdm-manager.c:875 msgid "Can only be called before user is logged in" msgstr "只能在用户登录前被调用" -#: ../daemon/gdm-manager.c:854 +#: ../daemon/gdm-manager.c:886 msgid "Caller not GDM" msgstr "调用者不是 GDM" -#: ../daemon/gdm-manager.c:864 +#: ../daemon/gdm-manager.c:896 msgid "Unable to open private communication channel" msgstr "无法打开专用通信通道" -#: ../daemon/gdm-server.c:391 +#: ../daemon/gdm-server.c:383 #, c-format -msgid "Server was to be spawned by user %s but that user doesn't exist" +msgid "Server was to be spawned by user %s but that user doesn’t exist" msgstr "服务器是以用户 %s 身份创建的,但此用户不存在" -#: ../daemon/gdm-server.c:402 ../daemon/gdm-server.c:422 +#: ../daemon/gdm-server.c:394 ../daemon/gdm-server.c:414 #, c-format -msgid "Couldn't set groupid to %d" +msgid "Couldn’t set groupid to %d" msgstr "无法将组 ID 设置为 %d" -#: ../daemon/gdm-server.c:408 +#: ../daemon/gdm-server.c:400 #, c-format msgid "initgroups () failed for %s" msgstr "initgroups() 执行 %s 失败" -#: ../daemon/gdm-server.c:414 +#: ../daemon/gdm-server.c:406 #, c-format -msgid "Couldn't set userid to %d" +msgid "Couldn’t set userid to %d" msgstr "无法将用户 ID 设置为 %d" -#: ../daemon/gdm-server.c:492 +#: ../daemon/gdm-server.c:484 #, c-format msgid "%s: Could not open log file for display %s!" msgstr "%s:无法打开显示屏 %s 的日志文件!" -#: ../daemon/gdm-server.c:513 ../daemon/gdm-server.c:519 -#: ../daemon/gdm-server.c:525 +#: ../daemon/gdm-server.c:505 ../daemon/gdm-server.c:511 +#: ../daemon/gdm-server.c:517 #, c-format msgid "%s: Error setting %s to %s" msgstr "%s:将 %s 设为 %s 出错" -#: ../daemon/gdm-server.c:545 +#: ../daemon/gdm-server.c:537 #, c-format -msgid "%s: Server priority couldn't be set to %d: %s" +msgid "%s: Server priority couldn’t be set to %d: %s" msgstr "%s:服务器优先级无法设为 %d:%s" -#: ../daemon/gdm-server.c:697 +#: ../daemon/gdm-server.c:689 #, c-format msgid "%s: Empty server command for display %s" msgstr "%s:显示画面 %s 的服务器命令为空" @@ -155,48 +191,48 @@ msgid "The display device" msgstr "显示设备" -#: ../daemon/gdm-session.c:1205 +#: ../daemon/gdm-session.c:1261 msgid "Could not create authentication helper process" msgstr "无法建立验证助手进程" -#: ../daemon/gdm-session-worker.c:642 -msgid "Your account was given a time limit that's now passed." +#: ../daemon/gdm-session-worker.c:766 +msgid "Your account was given a time limit that’s now passed." msgstr "你的帐号设有时间限制,已超过限定时间。" -#: ../daemon/gdm-session-worker.c:649 -msgid "Sorry, that didn't work. Please try again." -msgstr "抱歉,没有奏效,请再试一次。" +#: ../daemon/gdm-session-worker.c:773 +msgid "Sorry, that didn’t work. Please try again." +msgstr "抱歉,登录失败,请再试一次。" -#: ../daemon/gdm-session-worker.c:1010 +#: ../daemon/gdm-session-worker.c:1170 msgid "Username:" msgstr "用户名:" -#: ../daemon/gdm-session-worker.c:1504 ../daemon/gdm-session-worker.c:1521 +#: ../daemon/gdm-session-worker.c:1672 ../daemon/gdm-session-worker.c:1689 #, c-format msgid "no user account available" msgstr "无可用用户帐户" -#: ../daemon/gdm-session-worker.c:1548 +#: ../daemon/gdm-session-worker.c:1716 msgid "Unable to change to user" msgstr "无法切换到用户" -#: ../daemon/gdm-wayland-session.c:385 +#: ../daemon/gdm-wayland-session.c:478 msgid "GNOME Display Manager Wayland Session Launcher" msgstr "GNOME 显示管理器 Wayland 会话启动器" -#: ../daemon/gdm-xdmcp-display-factory.c:609 +#: ../daemon/gdm-xdmcp-display-factory.c:612 msgid "Could not create socket!" msgstr "无法创建套接字!" -#: ../daemon/gdm-x-session.c:734 +#: ../daemon/gdm-x-session.c:826 msgid "Run program through /etc/gdm/Xsession wrapper script" msgstr "通过 /etc/gdm/Xsession 包装脚本运行程序" -#: ../daemon/gdm-x-session.c:735 +#: ../daemon/gdm-x-session.c:827 msgid "Listen on TCP socket" msgstr "监听 TCP 套接字" -#: ../daemon/gdm-x-session.c:746 +#: ../daemon/gdm-x-session.c:838 msgid "GNOME Display Manager X Session Launcher" msgstr "GNOME 显示管理器 X 会话启动器" @@ -217,7 +253,7 @@ #: ../daemon/main.c:223 #, c-format -msgid "Can't find the GDM user '%s'. Aborting!" +msgid "Can’t find the GDM user “%s”. Aborting!" msgstr "找不到 GDM 用户“%s”。中止!" #: ../daemon/main.c:229 @@ -226,31 +262,31 @@ #: ../daemon/main.c:235 #, c-format -msgid "Can't find the GDM group '%s'. Aborting!" +msgid "Can’t find the GDM group “%s”. Aborting!" msgstr "找不到 GDM 组“%s”。中止!" #: ../daemon/main.c:241 msgid "The GDM group should not be root. Aborting!" msgstr "GDM 组不能为 root。中止!" -#: ../daemon/main.c:318 +#: ../daemon/main.c:317 msgid "Make all warnings fatal" msgstr "设置所有警告为致命错误" -#: ../daemon/main.c:319 +#: ../daemon/main.c:318 msgid "Exit after a time (for debugging)" msgstr "一段时间后退出(用于调试)" -#: ../daemon/main.c:320 +#: ../daemon/main.c:319 msgid "Print GDM version" msgstr "打印 GDM 版本" -#: ../daemon/main.c:333 +#: ../daemon/main.c:330 msgid "GNOME Display Manager" msgstr "GNOME 显示管理器" #. make sure the pid file doesn't get wiped -#: ../daemon/main.c:381 +#: ../daemon/main.c:351 msgid "Only the root user can run GDM" msgstr "只有 root 用户才能运行 GDM" @@ -351,26 +387,6 @@ "giving up and going back to user selection." msgstr "放弃并返回用户选择界面前,允许某个用户尝试认证的次数。" -#: ../gui/simple-chooser/gdm-host-chooser-dialog.c:147 -msgid "Select System" -msgstr "选择系统" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:215 -msgid "XDMCP: Could not create XDMCP buffer!" -msgstr "XDMCP:无法创建 XDMCP 缓冲区!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:221 -msgid "XDMCP: Could not read XDMCP header!" -msgstr "XDMCP:无法读取 XDMCP 头信息!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:227 -msgid "XDMCP: Incorrect XDMCP version!" -msgstr "XMDCP:XDMCP 版本错误!" - -#: ../gui/simple-chooser/gdm-host-chooser-widget.c:233 -msgid "XDMCP: Unable to parse address" -msgstr "XMDCP:无法解析地址" - #: ../libgdm/gdm-user-switching.c:59 msgid "Unable to create transient display: " msgstr "无法创建过渡显示界面:" @@ -402,8 +418,8 @@ #. Option parsing #: ../utils/gdmflexiserver.c:137 -msgid "- New GDM login" -msgstr "- 新 GDM 登录" +msgid "— New GDM login" +msgstr "— 新 GDM 登录" #: ../utils/gdm-screenshot.c:212 msgid "Screenshot taken" diff -Nru gdm3-3.28.2/tests/Makefile.in gdm3-3.28.3/tests/Makefile.in --- gdm3-3.28.2/tests/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/tests/Makefile.in 2018-08-13 15:08:29.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) diff -Nru gdm3-3.28.2/utils/Makefile.in gdm3-3.28.3/utils/Makefile.in --- gdm3-3.28.2/utils/Makefile.in 2018-05-17 14:13:29.000000000 +0000 +++ gdm3-3.28.3/utils/Makefile.in 2018-08-13 15:08:30.000000000 +0000 @@ -95,8 +95,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.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)/acinclude.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)